diff --git a/etcd-fix/ADOPTERS.md b/etcd-fix/ADOPTERS.md
deleted file mode 100644
index c6c2946..0000000
--- a/etcd-fix/ADOPTERS.md
+++ /dev/null
@@ -1,250 +0,0 @@
----
-title: Production users
----
-
-This document tracks people and use cases for etcd in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various etcd applications, operation environments, and cluster sizes. The etcd development team may reach out periodically to check-in on how etcd is working in the field and update this list.
-
-## All Kubernetes Users
-
-- *Application*: https://kubernetes.io/
-- *Environments*: AWS, OpenStack, Azure, Google Cloud, Huawei Cloud, Bare Metal, etc
-
-**This is a meta user; please feel free to document specific Kubernetes clusters!**
-
-All Kubernetes clusters use etcd as their primary data store. This means etcd's users include such companies as [Niantic, Inc Pokemon Go](https://cloudplatform.googleblog.com/2016/09/bringing-Pokemon-GO-to-life-on-Google-Cloud.html), [Box](https://blog.box.com/blog/kubernetes-box-microservices-maximum-velocity/), [CoreOS](https://coreos.com/tectonic), [Ticketmaster](https://www.youtube.com/watch?v=wqXVKneP0Hg), [Salesforce](https://www.salesforce.com) and many many more.
-
-## discovery.etcd.io
-
-- *Application*: https://github.com/coreos/discovery.etcd.io
-- *Launched*: Feb. 2014
-- *Cluster Size*: 5 members, 5 discovery proxies
-- *Order of Data Size*: 100s of Megabytes
-- *Operator*: CoreOS, brandon.philips@coreos.com
-- *Environment*: AWS
-- *Backups*: Periodic async to S3
-
-discovery.etcd.io is the longest continuously running etcd backed service that we know about. It is the basis of automatic cluster bootstrap and was launched in Feb. 2014: https://coreos.com/blog/etcd-0.3.0-released/.
-
-## OpenTable
-
-- *Application*: OpenTable internal service discovery and cluster configuration management
-- *Launched*: May 2014
-- *Cluster Size*: 3 members each in 6 independent clusters; approximately 50 nodes reading / writing
-- *Order of Data Size*: 10s of MB
-- *Operator*: OpenTable, Inc; sschlansker@opentable.com
-- *Environment*: AWS, VMWare
-- *Backups*: None, all data can be re-created if necessary.
-
-## cycoresys.com
-
-- *Application*: multiple
-- *Launched*: Jul. 2014
-- *Cluster Size*: 3 members, _n_ proxies
-- *Order of Data Size*: 100s of kilobytes
-- *Operator*: CyCore Systems, Inc, sys@cycoresys.com
-- *Environment*: Baremetal
-- *Backups*: Periodic sync to Ceph RadosGW and DigitalOcean VM
-
-CyCore Systems provides architecture and engineering for computing systems. This cluster provides microservices, virtual machines, databases, storage clusters to a number of clients. It is built on CoreOS machines, with each machine in the cluster running etcd as a peer or proxy.
-
-## Radius Intelligence
-
-- *Application*: multiple internal tools, Kubernetes clusters, bootstrappable system configs
-- *Launched*: June 2015
-- *Cluster Size*: 2 clusters of 5 and 3 members; approximately a dozen nodes read/write
-- *Order of Data Size*: 100s of kilobytes
-- *Operator*: Radius Intelligence; jcderr@radius.com
-- *Environment*: AWS, CoreOS, Kubernetes
-- *Backups*: None, all data can be recreated if necessary.
-
-Radius Intelligence uses Kubernetes running CoreOS to containerize and scale internal toolsets. Examples include running [JetBrains TeamCity][teamcity] and internal AWS security and cost reporting tools. etcd clusters back these clusters as well as provide some basic environment bootstrapping configuration keys.
-
-## Vonage
-
-- *Application*: kubernetes, vault backend, system configuration for microservices, scheduling, locks (future - service discovery)
-- *Launched*: August 2015
-- *Cluster Size*: 2 clusters of 5 members in 2 DCs, n local proxies 1-to-1 with microservice, (ssl and SRV look up)
-- *Order of Data Size*: kilobytes
-- *Operator*: Vonage [devAdmin][raoofm]
-- *Environment*: VMWare, AWS
-- *Backups*: Daily snapshots on VMs. Backups done for upgrades.
-
-## PD
-
-- *Application*: embed etcd
-- *Launched*: Mar 2016
-- *Cluster Size*: 3 or 5 members
-- *Order of Data Size*: megabytes
-- *Operator*: PingCAP, Inc.
-- *Environment*: Bare Metal, AWS, etc.
-- *Backups*: None.
-
-PD(Placement Driver) is the central controller in the TiDB cluster. It saves the cluster meta information, schedule the data, allocate the global unique timestamp for the distributed transaction, etc. It embeds etcd to supply high availability and auto failover.
-
-## Huawei
-
-- *Application*: System configuration for overlay network (Canal)
-- *Launched*: June 2016
-- *Cluster Size*: 3 members for each cluster
-- *Order of Data Size*: kilobytes
-- *Operator*: Huawei Euler Department
-- *Environment*: [Huawei Cloud](http://www.hwclouds.com/product/cce.html)
-- *Backups*: None, all data can be recreated if necessary.
-
-[teamcity]: https://www.jetbrains.com/teamcity/
-[raoofm]:https://github.com/raoofm
-
-## Qiniu Cloud
-
-- *Application*: system configuration for microservices, distributed locks
-- *Launched*: Jan. 2016
-- *Cluster Size*: 3 members each with several clusters
-- *Order of Data Size*: kilobytes
-- *Operator*: Pandora, chenchao@qiniu.com
-- *Environment*: Baremetal
-- *Backups*: None, all data can be recreated if necessary
-
-## QingCloud
-
-- *Application*: [QingCloud][qingcloud] appcenter cluster for service discovery as [metad][metad] backend.
-- *Launched*: December 2016
-- *Cluster Size*: 1 cluster of 3 members per user.
-- *Order of Data Size*: kilobytes
-- *Operator*: [yunify][yunify]
-- *Environment*: QingCloud IaaS
-- *Backups*: None, all data can be recreated if necessary.
-
-[metad]:https://github.com/yunify/metad
-[yunify]:https://github.com/yunify
-[qingcloud]:https://qingcloud.com/
-
-
-## Yandex
-
-- *Application*: system configuration for services, service discovery
-- *Launched*: March 2016
-- *Cluster Size*: 3 clusters of 5 members
-- *Order of Data Size*: several gigabytes
-- *Operator*: Yandex; [nekto0n][nekto0n]
-- *Environment*: Bare Metal
-- *Backups*: None
-
-[nekto0n]:https://github.com/nekto0n
-
-## Tencent Games
-
-- *Application*: Meta data and configuration data for service discovery, Kubernetes, etc.
-- *Launched*: Jan. 2015
-- *Cluster Size*: 3 members each with 10s of clusters
-- *Order of Data Size*: 10s of Megabytes
-- *Operator*: Tencent Game Operations Department
-- *Environment*: Baremetal
-- *Backups*: Periodic sync to backup server
-
-In Tencent games, we use Docker and Kubernetes to deploy and run our applications, and use etcd to save meta data for service discovery, Kubernetes, etc.
-
-## Hyper.sh
-
-- *Application*: Kubernetes, distributed locks, etc.
-- *Launched*: April 2016
-- *Cluster Size*: 1 cluster of 3 members
-- *Order of Data Size*: 10s of MB
-- *Operator*: Hyper.sh
-- *Environment*: Baremetal
-- *Backups*: None, all data can be recreated if necessary.
-
-In [hyper.sh][hyper.sh], the container service is backed by [hypernetes][hypernetes], a multi-tenant kubernetes distro. Moreover, we use etcd to coordinate the multiple manage services and store global meta data.
-
-[hypernetes]:https://github.com/hyperhq/hypernetes
-[Hyper.sh]:https://www.hyper.sh
-
-## Meitu
-- *Application*: system configuration for services, service discovery, kubernetes in test environment
-- *Launched*: October 2015
-- *Cluster Size*: 1 cluster of 3 members
-- *Order of Data Size*: megabytes
-- *Operator*: Meitu, hxj@meitu.com, [shafreeck][shafreeck]
-- *Environment*: Bare Metal
-- *Backups*: None, all data can be recreated if necessary.
-
-[shafreeck]:https://github.com/shafreeck
-
-## Grab
-- *Application*: system configuration for services, service discovery
-- *Launched*: June 2016
-- *Cluster Size*: 1 cluster of 7 members
-- *Order of Data Size*: megabytes
-- *Operator*: Grab, [taxitan][taxitan], [reterVision][reterVision]
-- *Environment*: AWS
-- *Backups*: None, all data can be recreated if necessary.
-
-[taxitan]:https://github.com/taxitan
-[reterVision]:https://github.com/reterVision
-
-## DaoCloud.io
-
-- *Application*: container management
-- *Launched*: Sep. 2015
-- *Cluster Size*: 1000+ deployments, each deployment contains a 3 node cluster.
-- *Order of Data Size*: 100s of Megabytes
-- *Operator*: daocloud.io
-- *Environment*: Baremetal and virtual machines
-- *Backups*: None, all data can be recreated if necessary.
-
-In [DaoCloud][DaoCloud], we use Docker and Swarm to deploy and run our applications, and we use etcd to save metadata for service discovery.
-
-[DaoCloud]:https://www.daocloud.io
-
-## Branch.io
-
-- *Application*: Kubernetes
-- *Launched*: April 2016
-- *Cluster Size*: Multiple clusters, multiple sizes
-- *Order of Data Size*: 100s of Megabytes
-- *Operator*: branch.io
-- *Environment*: AWS, Kubernetes
-- *Backups*: EBS volume backups
-
-At [Branch][branch], we use kubernetes heavily as our core microservice platform for staging and production.
-
-[branch]: https://branch.io
-
-## Baidu Waimai
-
-- *Application*: SkyDNS, Kubernetes, UDC, CMDB and other distributed systems
-- *Launched*: April. 2016
-- *Cluster Size*: 3 clusters of 5 members
-- *Order of Data Size*: several gigabytes
-- *Operator*: Baidu Waimai Operations Department
-- *Environment*: CentOS 6.5
-- *Backups*: backup scripts
-
-## Salesforce.com
-
-- *Application*: Kubernetes
-- *Launched*: Jan 2017
-- *Cluster Size*: Multiple clusters of 3 members
-- *Order of Data Size*: 100s of Megabytes
-- *Operator*: Salesforce.com (krmayankk@github)
-- *Environment*: BareMetal
-- *Backups*: None, all data can be recreated
-
-## Hosted Graphite
-
-- *Application*: Service discovery, locking, ephemeral application data
-- *Launched*: January 2017
-- *Cluster Size*: 2 clusters of 7 members
-- *Order of Data Size*: Megabytes
-- *Operator*: Hosted Graphite (sre@hostedgraphite.com)
-- *Environment*: Bare Metal
-- *Backups*: None, all data is considered ephemeral.
-
-## Transwarp
-
-- *Application*: Transwarp Data Cloud, Transwarp Operating System, Transwarp Data Hub, Sophon
-- *Launched*: January 2016
-- *Cluster Size*: Multiple clusters, multiple sizes
-- *Order of Data Size*: Megabytes
-- *Operator*: Trasnwarp Operating System
-- *Environment*: Bare Metal, Container
-- *Backups*: backup scripts
diff --git a/etcd-fix/CHANGELOG-2.3.md b/etcd-fix/CHANGELOG-2.3.md
deleted file mode 100644
index 0b54062..0000000
--- a/etcd-fix/CHANGELOG-2.3.md
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-## [v2.3.8](https://github.com/etcd-io/etcd/releases/tag/v2.3.8) (2017-02-17)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v2.3.7...v2.3.8).
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
diff --git a/etcd-fix/CHANGELOG-3.0.md b/etcd-fix/CHANGELOG-3.0.md
deleted file mode 100644
index ec197a8..0000000
--- a/etcd-fix/CHANGELOG-3.0.md
+++ /dev/null
@@ -1,291 +0,0 @@
-
-
-
-
-
-## [v3.0.16](https://github.com/etcd-io/etcd/releases/tag/v3.0.16) (2016-11-13)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.15...v3.0.16) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Go
-
-- Compile with [*Go 1.6.4*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.15](https://github.com/etcd-io/etcd/releases/tag/v3.0.15) (2016-11-11)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.14...v3.0.15) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Fixed
-
-- Fix cancel watch request with wrong range end.
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.14](https://github.com/etcd-io/etcd/releases/tag/v3.0.14) (2016-11-04)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.13...v3.0.14) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Added
-
-- v3 `etcdctl migrate` command now supports `--no-ttl` flag to discard keys on transform.
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.13](https://github.com/etcd-io/etcd/releases/tag/v3.0.13) (2016-10-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.12...v3.0.13) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.12](https://github.com/etcd-io/etcd/releases/tag/v3.0.12) (2016-10-07)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.11...v3.0.12) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.11](https://github.com/etcd-io/etcd/releases/tag/v3.0.11) (2016-10-07)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.10...v3.0.11) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Added
-
-- Server returns previous key-value (optional)
- - `clientv3.WithPrevKV` option
- - v3 etcdctl `put,watch,del --prev-kv` flag
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.10](https://github.com/etcd-io/etcd/releases/tag/v3.0.10) (2016-09-23)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.9...v3.0.10) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.9](https://github.com/etcd-io/etcd/releases/tag/v3.0.9) (2016-09-15)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.8...v3.0.9) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Added
-
-- Warn on domain names on listen URLs (v3.2 will reject domain names).
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.8](https://github.com/etcd-io/etcd/releases/tag/v3.0.8) (2016-09-09)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.7...v3.0.8) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Other
-
-- Allow only IP addresses in listen URLs (domain names are rejected).
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.7](https://github.com/etcd-io/etcd/releases/tag/v3.0.7) (2016-08-31)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.6...v3.0.7) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Other
-
-- SRV records only allow A records (RFC 2052).
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.6](https://github.com/etcd-io/etcd/releases/tag/v3.0.6) (2016-08-19)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.5...v3.0.6) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.5](https://github.com/etcd-io/etcd/releases/tag/v3.0.5) (2016-08-19)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.4...v3.0.5) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Other
-
-- SRV records (e.g., infra1.example.com) must match the discovery domain (i.e., example.com) if no custom certificate authority is given.
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.4](https://github.com/etcd-io/etcd/releases/tag/v3.0.4) (2016-07-27)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.3...v3.0.4) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Added
-
-- v2 `etcdctl ls` command now supports `--output=json`.
-- Add /var/lib/etcd directory to etcd official Docker image.
-
-### Other
-
-- v2 auth can now use common name from TLS certificate when `--client-cert-auth` is enabled.
-
-### Go
-
-- Compile with [*Go 1.6.3*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.3](https://github.com/etcd-io/etcd/releases/tag/v3.0.3) (2016-07-15)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.2...v3.0.3) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Other
-
-- Revert Dockerfile to use `CMD`, instead of `ENTRYPOINT`, to support `etcdctl` run.
- - Docker commands for v3.0.2 won't work without specifying executable binary paths.
-- v3 etcdctl default endpoints are now `127.0.0.1:2379`.
-
-### Go
-
-- Compile with [*Go 1.6.2*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.2](https://github.com/etcd-io/etcd/releases/tag/v3.0.2) (2016-07-08)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.1...v3.0.2) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Other
-
-- Dockerfile uses `ENTRYPOINT`, instead of `CMD`, to run etcd without binary path specified.
-
-### Go
-
-- Compile with [*Go 1.6.2*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.1](https://github.com/etcd-io/etcd/releases/tag/v3.0.1) (2016-07-01)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.0...v3.0.1) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Go
-
-- Compile with [*Go 1.6.2*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
-
-## [v3.0.0](https://github.com/etcd-io/etcd/releases/tag/v3.0.0) (2016-06-30)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v2.3.0...v3.0.0) and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_0.md).**
-
-### Go
-
-- Compile with [*Go 1.6.2*](https://golang.org/doc/devel/release.html#go1.6).
-
-
-
-
diff --git a/etcd-fix/CHANGELOG-3.1.md b/etcd-fix/CHANGELOG-3.1.md
deleted file mode 100644
index f4562b9..0000000
--- a/etcd-fix/CHANGELOG-3.1.md
+++ /dev/null
@@ -1,578 +0,0 @@
-
-
-Previous change logs can be found at [CHANGELOG-3.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.0.md).
-
-
-The minimum recommended etcd versions to run in **production** are 3.1.11+, 3.2.26+, and 3.3.11+.
-
-
-
-
-## [v3.1.21](https://github.com/etcd-io/etcd/releases/tag/v3.1.21) (2019-TBD)
-
-### etcdctl v3
-
-- [Strip out insecure endpoints from DNS SRV records when using discovery](https://github.com/etcd-io/etcd/pull/10443) with etcdctl v2
-- Add [`etcdctl endpoint health --write-out` support](https://github.com/etcd-io/etcd/pull/9540).
- - Previously, [`etcdctl endpoint health --write-out json` did not work](https://github.com/etcd-io/etcd/issues/9532).
- - The command output is changed. Previously, if endpoint is unreachable, the command output is
- "\ is unhealthy: failed to connect: \". This change unified the error message, all error types
- now have the same output "\ is unhealthy: failed to commit proposal: \".
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Fix bug where [db_compaction_total_duration_milliseconds metric incorrectly measured duration as 0](https://github.com/etcd-io/etcd/pull/10646).
-
-
-
-## [v3.1.20](https://github.com/etcd-io/etcd/releases/tag/v3.1.20) (2018-10-10)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.19...v3.1.20) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Improved
-
-- Improve ["became inactive" warning log](https://github.com/etcd-io/etcd/pull/10024), which indicates message send to a peer failed.
-- Improve [read index wait timeout warning log](https://github.com/etcd-io/etcd/pull/10026), which indicates that local node might have slow network.
-- Add [gRPC interceptor for debugging logs](https://github.com/etcd-io/etcd/pull/9990); enable `etcd --debug` flag to see per-request debug information.
-- Add [consistency check in snapshot status](https://github.com/etcd-io/etcd/pull/10109). If consistency check on snapshot file fails, `snapshot status` returns `"snapshot file integrity check failed..."` error.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Improve [`etcd_network_peer_round_trip_time_seconds`](https://github.com/etcd-io/etcd/pull/10155) Prometheus metric to track leader heartbeats.
- - Previously, it only samples the TCP connection for snapshot messages.
-- Display all registered [gRPC metrics at start](https://github.com/etcd-io/etcd/pull/10034).
-- Add [`etcd_snap_db_fsync_duration_seconds_count`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_snap_db_save_total_duration_seconds_bucket`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_server_id`](https://github.com/etcd-io/etcd/pull/9998) Prometheus metric.
-- Add [`etcd_server_health_success`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_health_failures`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_read_indexes_failed_total`](https://github.com/etcd-io/etcd/pull/10094) Prometheus metric.
-
-### client v3
-
-- Fix logic on [release lock key if cancelled](https://github.com/etcd-io/etcd/pull/10153) in `clientv3/concurrency` package.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.19](https://github.com/etcd-io/etcd/releases/tag/v3.1.19) (2018-07-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.18...v3.1.19) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Improved
-
-- Improve [Raft Read Index timeout warning messages](https://github.com/etcd-io/etcd/pull/9897).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_server_go_version`](https://github.com/etcd-io/etcd/pull/9957) Prometheus metric.
-- Add [`etcd_server_slow_read_indexes_total`](https://github.com/etcd-io/etcd/pull/9897) Prometheus metric.
-- Add [`etcd_server_quota_backend_bytes`](https://github.com/etcd-io/etcd/pull/9820) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_mvcc_db_total_size_in_use_in_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-- Add [`etcd_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819) Prometheus metric.
- - In addition to [`etcd_debugging_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819).
-- Add [`etcd_mvcc_db_total_size_in_use_in_bytes`](https://github.com/etcd-io/etcd/pull/9256) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_mvcc_db_total_size_in_use_in_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-
-### client v3
-
-- Fix [lease keepalive interval updates when response queue is full](https://github.com/etcd-io/etcd/pull/9952).
- - If `<-chan *clientv3LeaseKeepAliveResponse` from `clientv3.Lease.KeepAlive` was never consumed or channel is full, client was [sending keepalive request every 500ms](https://github.com/etcd-io/etcd/issues/9911) instead of expected rate of every "TTL / 3" duration.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.18](https://github.com/etcd-io/etcd/releases/tag/v3.1.18) (2018-06-15)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.17...v3.1.18) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_server_version`](https://github.com/etcd-io/etcd/pull/8960) Prometheus metric.
- - To replace [Kubernetes `etcd-version-monitor`](https://github.com/etcd-io/etcd/issues/8948).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.17](https://github.com/etcd-io/etcd/releases/tag/v3.1.17) (2018-06-06)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.16...v3.1.17) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- Fix [v3 snapshot recovery](https://github.com/etcd-io/etcd/issues/7628).
- - A follower receives a leader snapshot to be persisted as a `[SNAPSHOT-INDEX].snap.db` file on disk.
- - Now, server [ensures that the incoming snapshot be persisted on disk before loading it](https://github.com/etcd-io/etcd/pull/7876).
- - Otherwise, index mismatch happens and triggers server-side panic (e.g. newer WAL entry with outdated snapshot index).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.16](https://github.com/etcd-io/etcd/releases/tag/v3.1.16) (2018-05-31)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.15...v3.1.16) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- Fix [`mvcc` server panic from restore operation](https://github.com/etcd-io/etcd/pull/9775).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.15](https://github.com/etcd-io/etcd/releases/tag/v3.1.15) (2018-05-09)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.14...v3.1.15) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- Purge old [`*.snap.db` snapshot files](https://github.com/etcd-io/etcd/pull/7967).
- - Previously, etcd did not respect `--max-snapshots` flag to purge old `*.snap.db` files.
- - Now, etcd purges old `*.snap.db` files to keep maximum `--max-snapshots` number of files on disk.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.14](https://github.com/etcd-io/etcd/releases/tag/v3.1.14) (2018-04-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.13...v3.1.14) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_server_is_leader`](https://github.com/etcd-io/etcd/pull/9587) Prometheus metric.
-
-### etcd server
-
-- Add [`--initial-election-tick-advance`](https://github.com/etcd-io/etcd/pull/9591) flag to configure initial election tick fast-forward.
- - By default, `--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 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.
- - 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 `--initial-election-tick-advance` at the cost of slow initial bootstrap.
- - If single-node, it advances ticks regardless.
- - Address [disruptive rejoining follower node](https://github.com/etcd-io/etcd/issues/9333).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.13](https://github.com/etcd-io/etcd/releases/tag/v3.1.13) (2018-03-29)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.12...v3.1.13) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Improved
-
-- Adjust [election timeout on server restart](https://github.com/etcd-io/etcd/pull/9415) to reduce [disruptive rejoining servers](https://github.com/etcd-io/etcd/issues/9333).
- - 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.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add missing [`etcd_network_peer_sent_failures_total` count](https://github.com/etcd-io/etcd/pull/9437).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.12](https://github.com/etcd-io/etcd/releases/tag/v3.1.12) (2018-03-08)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.11...v3.1.12) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- Fix [`mvcc` "unsynced" watcher restore operation](https://github.com/etcd-io/etcd/pull/9297).
- - "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 [missing events from "unsynced" watchers](https://github.com/etcd-io/etcd/issues/9086).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.11](https://github.com/etcd-io/etcd/releases/tag/v3.1.11) (2017-11-28)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.10...v3.1.11) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- [#8411](https://github.com/etcd-io/etcd/issues/8411),[#8806](https://github.com/etcd-io/etcd/pull/8806) backport "mvcc: sending events after restore"
-- [#8009](https://github.com/etcd-io/etcd/issues/8009),[#8902](https://github.com/etcd-io/etcd/pull/8902) backport coreos/bbolt v1.3.1-coreos.5
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.1.10](https://github.com/etcd-io/etcd/releases/tag/v3.1.10) (2017-07-14)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.9...v3.1.10) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Added
-
-- Tag docker images with minor versions.
- - e.g. `docker pull quay.io/coreos/etcd:v3.1` to fetch latest v3.1 versions.
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
- - Fix panic on `net/http.CloseNotify`
-
-
-
-
-
-## [v3.1.9](https://github.com/etcd-io/etcd/releases/tag/v3.1.9) (2017-06-09)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.8...v3.1.9) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- Allow v2 snapshot over 512MB.
-
-### Go
-
-- Compile with [*Go 1.7.6*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.8](https://github.com/etcd-io/etcd/releases/tag/v3.1.8) (2017-05-19)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.7...v3.1.8) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.7](https://github.com/etcd-io/etcd/releases/tag/v3.1.7) (2017-04-28)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.6...v3.1.7) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.6](https://github.com/etcd-io/etcd/releases/tag/v3.1.6) (2017-04-19)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.5...v3.1.6) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- Fill in Auth API response header.
-- Remove auth check in Status API.
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.5](https://github.com/etcd-io/etcd/releases/tag/v3.1.5) (2017-03-27)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.4...v3.1.5) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd server
-
-- Fix raft memory leak issue.
-- Fix Windows file path issues.
-
-### Other
-
-- Add `/etc/nsswitch.conf` file to alpine-based Docker image.
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.4](https://github.com/etcd-io/etcd/releases/tag/v3.1.4) (2017-03-22)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.3...v3.1.4) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.3](https://github.com/etcd-io/etcd/releases/tag/v3.1.3) (2017-03-10)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.2...v3.1.3) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd gateway
-
-- Fix `etcd gateway` schema handling in DNS discovery.
-- Fix sd_notify behaviors in `gateway`, `grpc-proxy`.
-
-### gRPC Proxy
-
-- Fix sd_notify behaviors in `gateway`, `grpc-proxy`.
-
-### Other
-
-- Use machine default host when advertise URLs are default values(`localhost:2379,2380`) AND if listen URL is `0.0.0.0`.
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.2](https://github.com/etcd-io/etcd/releases/tag/v3.1.2) (2017-02-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.1...v3.1.2) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### etcd gateway
-
-- Fix `etcd gateway` with multiple endpoints.
-
-### Other
-
-- Use IPv4 default host, by default (when IPv4 and IPv6 are available).
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.1](https://github.com/etcd-io/etcd/releases/tag/v3.1.1) (2017-02-17)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.0...v3.1.1) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Go
-
-- Compile with [*Go 1.7.5*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
-
-## [v3.1.0](https://github.com/etcd-io/etcd/releases/tag/v3.1.0) (2017-01-20)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.0.0...v3.1.0) and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.1 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md).**
-
-### Improved
-
-- Faster linearizable reads (implements Raft [read-index](https://github.com/etcd-io/etcd/pull/6212)).
-- v3 authentication API is now stable.
-
-### Breaking Changes
-
-- Deprecated following gRPC metrics in favor of [go-grpc-prometheus](https://github.com/grpc-ecosystem/go-grpc-prometheus).
- - `etcd_grpc_requests_total`
- - `etcd_grpc_requests_failed_total`
- - `etcd_grpc_active_streams`
- - `etcd_grpc_unary_requests_duration_seconds`
-
-### Dependency
-
-- Upgrade [`github.com/ugorji/go/codec`](https://github.com/ugorji/go) to [**`ugorji/go@9c7f9b7`**](https://github.com/ugorji/go/commit/9c7f9b7a2bc3a520f7c7b30b34b7f85f47fe27b6), and [regenerate v2 `client`](https://github.com/etcd-io/etcd/pull/6945).
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- SRV records (e.g., infra1.example.com) must match the discovery domain (i.e., example.com) if no custom certificate authority is given.
- - `TLSConfig.ServerName` is ignored with user-provided certificates for backwards compatibility; to be deprecated.
- - For example, `etcd --discovery-srv=example.com` will only authenticate peers/clients when the provided certs have root domain `example.com` as an entry in Subject Alternative Name (SAN) field.
-
-### etcd server
-
-- Automatic leadership transfer when leader steps down.
-- etcd flags
- - `--strict-reconfig-check` flag is set by default.
- - Add `--log-output` flag.
- - Add `--metrics` flag.
-- etcd uses default route IP if advertise URL is not given.
-- Cluster rejects removing members if quorum will be lost.
-- Discovery now has upper limit for waiting on retries.
-- Warn on binding listeners through domain names; to be deprecated.
-- v3.0 and v3.1 with `--auto-compaction-retention=10` run periodic compaction on v3 key-value store for every 10-hour.
- - Compactor only supports periodic compaction.
- - Compactor records latest revisions every 5-minute, until it reaches the first compaction period (e.g. 10-hour).
- - In order to retain key-value history of last compaction period, it uses the last revision that was fetched before compaction period, from the revision records that were collected every 5-minute.
- - When `--auto-compaction-retention=10`, compactor uses revision 100 for compact revision where revision 100 is the latest revision fetched from 10 hours ago.
- - If compaction succeeds or requested revision has already been compacted, it resets period timer and starts over with new historical revision records (e.g. restart revision collect and compact for the next 10-hour period).
- - If compaction fails, it retries in 5 minutes.
-
-### client v3
-
-- Add `SetEndpoints` method; update endpoints at runtime.
-- Add `Sync` method; auto-update endpoints at runtime.
-- Add `Lease TimeToLive` API; fetch lease information.
-- replace Config.Logger field with global logger.
-- Get API responses are sorted in ascending order by default.
-
-### etcdctl v3
-
-- Add `lease timetolive` command.
-- Add `--print-value-only` flag to get command.
-- Add `--dest-prefix` flag to make-mirror command.
-- `get` command responses are sorted in ascending order by default.
-
-### gRPC Proxy
-
-- Experimental gRPC proxy feature.
-
-### Other
-
-- `recipes` now conform to sessions defined in `clientv3/concurrency`.
-- ACI has symlinks to `/usr/local/bin/etcd*`.
-
-### Go
-
-- Compile with [*Go 1.7.4*](https://golang.org/doc/devel/release.html#go1.7).
-
-
-
-
diff --git a/etcd-fix/CHANGELOG-3.2.md b/etcd-fix/CHANGELOG-3.2.md
deleted file mode 100644
index b763f34..0000000
--- a/etcd-fix/CHANGELOG-3.2.md
+++ /dev/null
@@ -1,1004 +0,0 @@
-
-
-Previous change logs can be found at [CHANGELOG-3.1](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.1.md).
-
-
-The minimum recommended etcd versions to run in **production** are 3.2.28+, 3.3.18+, and 3.4.2+.
-
-
-
-
-
-## [v3.2.31](https://github.com/etcd-io/etcd/releases/tag/v3.2.31) (2020-08-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.30...v3.2.31) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-### auth, etcdserver
-
-- Improve [`runtime.FDUsage` call pattern to reduce objects malloc of Memory Usage and CPU Usage](https://github.com/etcd-io/etcd/pull/11986).
-- [attaching a fake root token when calling `LeaseRevoke`](https://github.com/etcd-io/etcd/pull/11691).
- - fix a data corruption bug caused by lease expiration when authentication is enabled and upgrading cluster from etcd-3.2 to etcd-3.3
-
-### Package `runtime`
-
-- Optimize [`runtime.FDUsage` by removing unnecessary sorting](https://github.com/etcd-io/etcd/pull/12214).
-
-### Metrics, Monitoring
-
-- Add [`os_fd_used` and `os_fd_limit` to monitor current OS file descriptors](https://github.com/etcd-io/etcd/pull/12214).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.2.30](https://github.com/etcd-io/etcd/releases/tag/v3.2.30) (2020-04-01)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.29...v3.2.30) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-### Package `wal`
-
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-
-### Metrics, Monitoring
-
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.2.29](https://github.com/etcd-io/etcd/releases/tag/v3.2.29) (2020-03-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.28...v3.2.29) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-### etcd server
-
-- [Fix corruption bug in defrag](https://github.com/etcd-io/etcd/pull/11613).
-- Log [`[CLIENT-PORT]/health` check in server side](https://github.com/etcd-io/etcd/pull/11704).
-
-### client v3
-
-- Fix [`"hasleader"` metadata embedding](https://github.com/etcd-io/etcd/pull/11687).
- - Previously, `clientv3.WithRequireLeader(ctx)` was overwriting existing context keys.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-- Add [`etcd_server_client_requests_total` with `"type"` and `"client_api_version"` labels](https://github.com/etcd-io/etcd/pull/11687).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.28](https://github.com/etcd-io/etcd/releases/tag/v3.2.28) (2019-11-10)
-
-### Improved
-
-- Add `etcd --experimental-peer-skip-client-san-verification` to [skip verification of peer client address](https://github.com/etcd-io/etcd/pull/11195).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_cluster_version`](https://github.com/etcd-io/etcd/pull/11271) Prometheus metric.
-
-### etcdserver
-
-- Fix [`wait purge file loop during shutdown`](https://github.com/etcd-io/etcd/pull/11308).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.27](https://github.com/etcd-io/etcd/releases/tag/v3.2.27) (2019-09-17)
-
-### etcdctl v3
-
-- [Strip out insecure endpoints from DNS SRV records when using discovery](https://github.com/etcd-io/etcd/pull/10443) with etcdctl v2
-- Add [`etcdctl endpoint health --write-out` support](https://github.com/etcd-io/etcd/pull/9540).
- - Previously, [`etcdctl endpoint health --write-out json` did not work](https://github.com/etcd-io/etcd/issues/9532).
- - The command output is changed. Previously, if endpoint is unreachable, the command output is
- "\ is unhealthy: failed to connect: \". This change unified the error message, all error types
- now have the same output "\ is unhealthy: failed to commit proposal: \".
-- Fix [`etcdctl snapshot status` to not modify snapshot file](https://github.com/etcd-io/etcd/pull/11157).
- - 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..."`
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Fix bug where [db_compaction_total_duration_milliseconds metric incorrectly measured duration as 0](https://github.com/etcd-io/etcd/pull/10646).
-- Add [`etcd_debugging_mvcc_current_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-- Add [`etcd_debugging_mvcc_compact_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.26](https://github.com/etcd-io/etcd/releases/tag/v3.2.26) (2019-01-11)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.25...v3.2.26) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### gRPC Proxy
-
-- Fix [memory leak in cache layer](https://github.com/etcd-io/etcd/pull/10327).
-
-### Security, Authentication
-
-- Disable [CommonName authentication for gRPC-gateway](https://github.com/etcd-io/etcd/pull/10366) 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.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.25](https://github.com/etcd-io/etcd/releases/tag/v3.2.25) (2018-10-10)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.24...v3.2.25) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Improved
-
-- Improve ["became inactive" warning log](https://github.com/etcd-io/etcd/pull/10024), which indicates message send to a peer failed.
-- Improve [read index wait timeout warning log](https://github.com/etcd-io/etcd/pull/10026), which indicates that local node might have slow network.
-- Add [gRPC interceptor for debugging logs](https://github.com/etcd-io/etcd/pull/9990); enable `etcd --debug` flag to see per-request debug information.
-- Add [consistency check in snapshot status](https://github.com/etcd-io/etcd/pull/10109). If consistency check on snapshot file fails, `snapshot status` returns `"snapshot file integrity check failed..."` error.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Improve [`etcd_network_peer_round_trip_time_seconds`](https://github.com/etcd-io/etcd/pull/10155) Prometheus metric to track leader heartbeats.
- - Previously, it only samples the TCP connection for snapshot messages.
-- Display all registered [gRPC metrics at start](https://github.com/etcd-io/etcd/pull/10032).
-- Add [`etcd_snap_db_fsync_duration_seconds_count`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_snap_db_save_total_duration_seconds_bucket`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_server_id`](https://github.com/etcd-io/etcd/pull/9998) Prometheus metric.
-- Add [`etcd_server_health_success`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_health_failures`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_read_indexes_failed_total`](https://github.com/etcd-io/etcd/pull/10094) Prometheus metric.
-
-### client v3
-
-- Fix logic on [release lock key if cancelled](https://github.com/etcd-io/etcd/pull/10153) in `clientv3/concurrency` package.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.24](https://github.com/etcd-io/etcd/releases/tag/v3.2.24) (2018-07-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.23...v3.2.24) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Improved
-
-- Improve [Raft Read Index timeout warning messages](https://github.com/etcd-io/etcd/pull/9897).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_server_go_version`](https://github.com/etcd-io/etcd/pull/9957) Prometheus metric.
-- Add [`etcd_server_heartbeat_send_failures_total`](https://github.com/etcd-io/etcd/pull/9942) Prometheus metric.
-- Add [`etcd_server_slow_apply_total`](https://github.com/etcd-io/etcd/pull/9942) Prometheus metric.
-- Add [`etcd_disk_backend_defrag_duration_seconds`](https://github.com/etcd-io/etcd/pull/9942) Prometheus metric.
-- Add [`etcd_mvcc_hash_duration_seconds`](https://github.com/etcd-io/etcd/pull/9942) Prometheus metric.
-- Add [`etcd_server_slow_read_indexes_total`](https://github.com/etcd-io/etcd/pull/9897) Prometheus metric.
-- Add [`etcd_server_quota_backend_bytes`](https://github.com/etcd-io/etcd/pull/9820) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_mvcc_db_total_size_in_use_in_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-- Add [`etcd_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819) Prometheus metric.
- - In addition to [`etcd_debugging_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819).
-- Add [`etcd_mvcc_db_total_size_in_use_in_bytes`](https://github.com/etcd-io/etcd/pull/9256) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_server_quota_backend_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-
-### gRPC Proxy
-
-- Add [flags for specifying TLS for connecting to proxy](https://github.com/etcd-io/etcd/pull/9894):
- - Add `grpc-proxy start --cert-file`, `grpc-proxy start --key-file` and `grpc-proxy start --trusted-ca-file` flags.
-- Add [`grpc-proxy start --metrics-addr` flag for specifying a separate metrics listen address](https://github.com/etcd-io/etcd/pull/9894).
-
-### client v3
-
-- Fix [lease keepalive interval updates when response queue is full](https://github.com/etcd-io/etcd/pull/9952).
- - If `<-chan *clientv3LeaseKeepAliveResponse` from `clientv3.Lease.KeepAlive` was never consumed or channel is full, client was [sending keepalive request every 500ms](https://github.com/etcd-io/etcd/issues/9911) instead of expected rate of every "TTL / 3" duration.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.23](https://github.com/etcd-io/etcd/releases/tag/v3.2.23) (2018-06-15)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.22...v3.2.23) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Improved
-
-- Improve [slow request apply warning log](https://github.com/etcd-io/etcd/pull/9288).
- - e.g. `read-only range request "key:\"/a\" range_end:\"/b\" " with result "range_response_count:3 size:96" took too long (97.966µs) to execute`.
- - Redact [request value field](https://github.com/etcd-io/etcd/pull/9822).
- - Provide [response size](https://github.com/etcd-io/etcd/pull/9826).
-- Add [backoff on watch retries on transient errors](https://github.com/etcd-io/etcd/pull/9840).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_server_version`](https://github.com/etcd-io/etcd/pull/8960) Prometheus metric.
- - To replace [Kubernetes `etcd-version-monitor`](https://github.com/etcd-io/etcd/issues/8948).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.22](https://github.com/etcd-io/etcd/releases/tag/v3.2.22) (2018-06-06)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.21...v3.2.22) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Security, Authentication
-
-- Support TLS cipher suite whitelisting.
- - To block [weak cipher suites](https://github.com/etcd-io/etcd/issues/8320).
- - TLS handshake fails when client hello is requested with invalid cipher suites.
- - Add [`etcd --cipher-suites`](https://github.com/etcd-io/etcd/pull/9801) flag.
- - If empty, Go auto-populates the list.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.21](https://github.com/etcd-io/etcd/releases/tag/v3.2.21) (2018-05-31)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.20...v3.2.21) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Fix [auth storage panic when simple token provider is disabled](https://github.com/etcd-io/etcd/pull/8695).
-- Fix [`mvcc` server panic from restore operation](https://github.com/etcd-io/etcd/pull/9775).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.20](https://github.com/etcd-io/etcd/releases/tag/v3.2.20) (2018-05-09)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.19...v3.2.20) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Purge old [`*.snap.db` snapshot files](https://github.com/etcd-io/etcd/pull/7967).
- - Previously, etcd did not respect `--max-snapshots` flag to purge old `*.snap.db` files.
- - Now, etcd purges old `*.snap.db` files to keep maximum `--max-snapshots` number of files on disk.
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.19](https://github.com/etcd-io/etcd/releases/tag/v3.2.19) (2018-04-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.18...v3.2.19) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Fix [`etcd_debugging_server_lease_expired_total`](https://github.com/etcd-io/etcd/pull/9557) Prometheus metric.
-- Fix [race conditions in v2 server stat collecting](https://github.com/etcd-io/etcd/pull/9562).
-- Add [`etcd_server_is_leader`](https://github.com/etcd-io/etcd/pull/9587) Prometheus metric.
-
-### Security, Authentication
-
-- Fix [TLS reload](https://github.com/etcd-io/etcd/pull/9570) when [certificate SAN field only includes IP addresses but no domain names](https://github.com/etcd-io/etcd/issues/9541).
- - 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 [not include any domain names but only IP addresses](https://github.com/etcd-io/etcd/issues/9541) 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).
-
-### etcd server
-
-- Add [`etcd --initial-election-tick-advance`](https://github.com/etcd-io/etcd/pull/9591) 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 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.
- - 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 `--initial-election-tick-advance` at the cost of slow initial bootstrap.
- - If single-node, it advances ticks regardless.
- - Address [disruptive rejoining follower node](https://github.com/etcd-io/etcd/issues/9333).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.18](https://github.com/etcd-io/etcd/releases/tag/v3.2.18) (2018-03-29)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.17...v3.2.18) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Improved
-
-- Adjust [election timeout on server restart](https://github.com/etcd-io/etcd/pull/9415) to reduce [disruptive rejoining servers](https://github.com/etcd-io/etcd/issues/9333).
- - 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.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add missing [`etcd_network_peer_sent_failures_total` count](https://github.com/etcd-io/etcd/pull/9437).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.17](https://github.com/etcd-io/etcd/releases/tag/v3.2.17) (2018-03-08)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.16...v3.2.17) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Fix [server panic on invalid Election Proclaim/Resign HTTP(S) requests](https://github.com/etcd-io/etcd/pull/9379).
- - 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":""}'`.
-- Prevent [overflow by large `TTL` values for `Lease` `Grant`](https://github.com/etcd-io/etcd/pull/9399).
- - `TTL` parameter to `Grant` request is unit of second.
- - Leases with too large `TTL` values exceeding `math.MaxInt64` [expire in unexpected ways](https://github.com/etcd-io/etcd/issues/9374).
- - 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 [`raft.Config.CheckQuorum` when starting with `ForceNewCluster`](https://github.com/etcd-io/etcd/pull/9347).
-
-### Proxy v2
-
-- Fix [v2 proxy leaky HTTP requests](https://github.com/etcd-io/etcd/pull/9336).
-
-### Go
-
-- Compile with [*Go 1.8.7*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.16](https://github.com/etcd-io/etcd/releases/tag/v3.2.16) (2018-02-12)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.15...v3.2.16) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Fix [`mvcc` "unsynced" watcher restore operation](https://github.com/etcd-io/etcd/pull/9297).
- - "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 [missing events from "unsynced" watchers](https://github.com/etcd-io/etcd/issues/9086).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.15](https://github.com/etcd-io/etcd/releases/tag/v3.2.15) (2018-01-22)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.14...v3.2.15) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Prevent [server panic from member update/add](https://github.com/etcd-io/etcd/pull/9174) with [wrong scheme URLs](https://github.com/etcd-io/etcd/issues/9173).
-- Log [user context cancel errors on stream APIs in debug level with TLS](https://github.com/etcd-io/etcd/pull/9178).
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.14](https://github.com/etcd-io/etcd/releases/tag/v3.2.14) (2018-01-11)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.13...v3.2.14) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Improved
-
-- Log [user context cancel errors on stream APIs in debug level](https://github.com/etcd-io/etcd/pull/9105).
-
-### etcd server
-
-- Fix [`mvcc/backend.defragdb` nil-pointer dereference on create bucket failure](https://github.com/etcd-io/etcd/pull/9119).
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.13](https://github.com/etcd-io/etcd/releases/tag/v3.2.13) (2018-01-02)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.12...v3.2.13) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Remove [verbose error messages on stream cancel and gRPC info-level logs](https://github.com/etcd-io/etcd/pull/9080) in server-side.
-- Fix [gRPC server panic on `GracefulStop` TLS-enabled server](https://github.com/etcd-io/etcd/pull/8987).
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.12](https://github.com/etcd-io/etcd/releases/tag/v3.2.12) (2017-12-20)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.11...v3.2.12) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Dependency
-
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases/tag) from [**`v1.7.4`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.4) to [**`v1.7.5`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.5).
-- Upgrade [`github.com/grpc-ecosystem/grpc-gateway`](https://github.com/grpc-ecosystem/grpc-gateway/releases) from [**`v1.3`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.3) to [**`v1.3.0`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.3.0).
-
-### etcd server
-
-- Fix [error message of `Revision` compactor](https://github.com/etcd-io/etcd/pull/8999) in server-side.
-
-### client v3
-
-- Add [`MaxCallSendMsgSize` and `MaxCallRecvMsgSize`](https://github.com/etcd-io/etcd/pull/9047) fields to [`clientv3.Config`](https://godoc.org/github.com/etcd-io/etcd/clientv3#Config).
- - Fix [exceeded response size limit error in client-side](https://github.com/etcd-io/etcd/issues/9043).
- - Address [kubernetes#51099](https://github.com/kubernetes/kubernetes/issues/51099).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.11](https://github.com/etcd-io/etcd/releases/tag/v3.2.11) (2017-12-05)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.10...v3.2.11) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Dependency
-
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases/tag) from [**`v1.7.3`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.3) to [**`v1.7.4`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.4).
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- Log [more details on TLS handshake failures](https://github.com/etcd-io/etcd/pull/8952/files).
-
-### client v3
-
-- Fix racey grpc-go's server handler transport `WriteStatus` call to prevent [TLS-enabled etcd server crash](https://github.com/etcd-io/etcd/issues/8904).
-- Add [gRPC RPC failure warnings](https://github.com/etcd-io/etcd/pull/8939) to help debug such issues in the future.
-
-### Documentation
-
-- Remove `--listen-metrics-urls` flag in monitoring document (non-released in `v3.2.x`, planned for `v3.3.x`).
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.10](https://github.com/etcd-io/etcd/releases/tag/v3.2.10) (2017-11-16)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.9...v3.2.10) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Dependency
-
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases/tag) from [**`v1.2.1`**](https://github.com/grpc/grpc-go/releases/tag/v1.2.1) to [**`v1.7.3`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.3).
-- Upgrade [`github.com/grpc-ecosystem/grpc-gateway`](https://github.com/grpc-ecosystem/grpc-gateway/releases) from [**`v1.2.0`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.2.0) to [**`v1.3`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.3).
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- Revert [discovery SRV auth `ServerName` with `*.{ROOT_DOMAIN}`](https://github.com/etcd-io/etcd/pull/8651) to support non-wildcard subject alternative names in the certs (see [issue #8445](https://github.com/etcd-io/etcd/issues/8445) for more contexts).
- - For instance, `etcd --discovery-srv=etcd.local` will only authenticate peers/clients when the provided certs have root domain `etcd.local` (**not `*.etcd.local`**) as an entry in Subject Alternative Name (SAN) field.
-
-### etcd server
-
-- Replace backend key-value database `boltdb/bolt` with [`coreos/bbolt`](https://github.com/coreos/bbolt/releases) to address [backend database size issue](https://github.com/etcd-io/etcd/issues/8009).
-
-### client v3
-
-- Rewrite balancer to handle [network partitions](https://github.com/etcd-io/etcd/issues/8711).
-
-### Go
-
-- Compile with [*Go 1.8.5*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.9](https://github.com/etcd-io/etcd/releases/tag/v3.2.9) (2017-10-06)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.8...v3.2.9) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- Update `golang.org/x/crypto/bcrypt` (see [golang/crypto@6c586e1](https://github.com/golang/crypto/commit/6c586e17d90a7d08bbbc4069984180dce3b04117)).
-- Fix discovery SRV bootstrapping to [authenticate `ServerName` with `*.{ROOT_DOMAIN}`](https://github.com/etcd-io/etcd/pull/8651), in order to support sub-domain wildcard matching (see [issue #8445](https://github.com/etcd-io/etcd/issues/8445) for more contexts).
- - For instance, `etcd --discovery-srv=etcd.local` will only authenticate peers/clients when the provided certs have root domain `*.etcd.local` as an entry in Subject Alternative Name (SAN) field.
-
-### Go
-
-- Compile with [*Go 1.8.4*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.8](https://github.com/etcd-io/etcd/releases/tag/v3.2.8) (2017-09-29)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.7...v3.2.8) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### client v2
-
-- Fix v2 client failover to next endpoint on mutable operation.
-
-### gRPC Proxy
-
-- Handle [`KeysOnly` flag](https://github.com/etcd-io/etcd/pull/8552).
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.7](https://github.com/etcd-io/etcd/releases/tag/v3.2.7) (2017-09-01)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.6...v3.2.7) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Security, Authentication
-
-- Fix [server-side auth so concurrent auth operations do not return old revision error](https://github.com/etcd-io/etcd/pull/8306).
-
-### client v3
-
-- Fix [`concurrency/stm` Put with serializable snapshot](https://github.com/etcd-io/etcd/pull/8439).
- - Use store revision from first fetch to resolve write conflicts instead of modified revision.
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.6](https://github.com/etcd-io/etcd/releases/tag/v3.2.6) (2017-08-21)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.5...v3.2.6) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Fix watch restore from snapshot.
-- Fix multiple URLs for `--listen-peer-urls` flag.
-- Add `--enable-pprof` flag to etcd configuration file format.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Fix `etcd_debugging_mvcc_keys_total` inconsistency.
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.5](https://github.com/etcd-io/etcd/releases/tag/v3.2.5) (2017-08-04)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.4...v3.2.5) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcdctl v3
-
-- Return non-zero exit code on unhealthy `endpoint health`.
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- [Server supports reverse-lookup on wildcard DNS `SAN`](https://github.com/etcd-io/etcd/pull/8281). 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. For example, peer B's CSR (with `cfssl`) SAN field is `["*.example.default.svc", "*.example.default.svc.cluster.local"]` when peer B's remote IP address is `10.138.0.2`. When peer B tries to join the cluster, peer A reverse-lookup the IP `10.138.0.2` to get the list of host names. And either exact or wildcard match the host names with peer B's cert DNS names in Subject Alternative Name (SAN) field. If none of reverse/forward lookups worked, it returns an error `"tls: "10.138.0.2" does not match any of DNSNames ["*.example.default.svc","*.example.default.svc.cluster.local"]`. See [issue#8268](https://github.com/etcd-io/etcd/issues/8268) for more detail.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Fix unreachable `/metrics` endpoint when `--enable-v2=false`.
-
-### gRPC Proxy
-
-- Handle [`PrevKv` flag](https://github.com/etcd-io/etcd/pull/8366).
-
-### Other
-
-- Add container registry `gcr.io/etcd-development/etcd`.
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.4](https://github.com/etcd-io/etcd/releases/tag/v3.2.4) (2017-07-19)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.3...v3.2.4) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Do not block on active client stream when stopping server
-
-### gRPC proxy
-
-- Fix gRPC proxy Snapshot RPC error handling
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.3](https://github.com/etcd-io/etcd/releases/tag/v3.2.3) (2017-07-14)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.2...v3.2.3) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### client v3
-
-- Let clients establish unlimited streams
-
-### Other
-
-- Tag docker images with minor versions
- - e.g. `docker pull quay.io/coreos/etcd:v3.2` to fetch latest v3.2 versions
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.2](https://github.com/etcd-io/etcd/releases/tag/v3.2.2) (2017-07-07)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.1...v3.2.2) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Improved
-
-- Rate-limit lease revoke on expiration.
-- Extend leases on promote to avoid queueing effect on lease expiration.
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- [Server accepts connections if IP matches, without checking DNS entries](https://github.com/etcd-io/etcd/pull/8223). 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 example, peer B's CSR (with `cfssl`) SAN field is `["invalid.domain", "10.138.0.2"]` when peer B's remote IP address is `10.138.0.2` and `invalid.domain` is a invalid host. When peer B tries to join the cluster, peer A successfully authenticates B, since Subject Alternative Name (SAN) field has a valid matching IP address. See [issue#8206](https://github.com/etcd-io/etcd/issues/8206) for more detail.
-
-### etcd server
-
-- Accept connection with matched IP SAN but no DNS match.
- - Don't check DNS entries in certs if there's a matching IP.
-
-### gRPC gateway
-
-- Use user-provided listen address to connect to gRPC gateway.
- - `net.Listener` rewrites IPv4 0.0.0.0 to IPv6 [::], breaking IPv6 disabled hosts.
- - Only v3.2.0, v3.2.1 are affected.
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.1](https://github.com/etcd-io/etcd/releases/tag/v3.2.1) (2017-06-23)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.0...v3.2.1) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### etcd server
-
-- Fix backend database in-memory index corruption issue on restore (only 3.2.0 is affected).
-
-### gRPC gateway
-
-- Fix Txn marshaling.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Fix backend database size debugging metrics.
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
-
-## [v3.2.0](https://github.com/etcd-io/etcd/releases/tag/v3.2.0) (2017-06-09)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.1.0...v3.2.0) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_2.md).**
-
-### Improved
-
-- Improve backend read concurrency.
-
-### Breaking Changes
-
-- Increased [`--snapshot-count` default value from 10,000 to 100,000](https://github.com/etcd-io/etcd/pull/7160).
- - Higher snapshot count means it holds Raft entries in memory for longer before discarding old entries.
- - It is a trade-off between less frequent snapshotting and [higher memory usage](https://github.com/kubernetes/kubernetes/issues/60589#issuecomment-371977156).
- - User lower `--snapshot-count` value for lower memory usage.
- - User higher `--snapshot-count` value for better availabilities of slow followers (less frequent snapshots from leader).
-- `clientv3.Lease.TimeToLive` returns `LeaseTimeToLiveResponse.TTL == -1` on lease not found.
-- `clientv3.NewFromConfigFile` is moved to `clientv3/yaml.NewConfig`.
-- `embed.Etcd.Peers` field is now `[]*peerListener`.
-- Rejects domains names for `--listen-peer-urls` and `--listen-client-urls` (3.1 only prints out warnings), since [domain name is invalid for network interface binding](https://github.com/etcd-io/etcd/issues/6336).
-
-### Dependency
-
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases) from [**`v1.0.4`**](https://github.com/grpc/grpc-go/releases/tag/v1.0.4) to [**`v1.2.1`**](https://github.com/grpc/grpc-go/releases/tag/v1.2.1).
-- Upgrade [`github.com/grpc-ecosystem/grpc-gateway`](https://github.com/grpc-ecosystem/grpc-gateway/releases) to [**`v1.2.0`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.2.0).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_disk_backend_snapshot_duration_seconds`](https://github.com/etcd-io/etcd/pull/7892)
-- Add `etcd_debugging_server_lease_expired_total` metrics.
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- [TLS certificates get reloaded on every client connection](https://github.com/etcd-io/etcd/pull/7829). This is useful when replacing expiry certs without stopping etcd servers; it can be done by overwriting old certs with new ones. Refreshing certs for every connection should not have too much overhead, but can be improved in the future, with caching layer. Example tests can be found [here](https://github.com/etcd-io/etcd/blob/b041ce5d514a4b4aaeefbffb008f0c7570a18986/integration/v3_grpc_test.go#L1601-L1757).
-- [Server denies incoming peer certs with wrong IP `SAN`](https://github.com/etcd-io/etcd/pull/7687). For instance, if peer cert contains any IP addresses in Subject Alternative Name (SAN) field, server authenticates a peer only when the remote IP address matches one of those IP addresses. This is to prevent unauthorized endpoints from joining the cluster. For example, peer B's CSR (with `cfssl`) SAN field is `["*.example.default.svc", "*.example.default.svc.cluster.local", "10.138.0.27"]` when peer B's actual IP address is `10.138.0.2`, not `10.138.0.27`. When peer B tries to join the cluster, peer A will reject B with the error `x509: certificate is valid for 10.138.0.27, not 10.138.0.2`, because B's remote IP address does not match the one in Subject Alternative Name (SAN) field.
-- [Server resolves TLS `DNSNames` when checking `SAN`](https://github.com/etcd-io/etcd/pull/7767). For instance, if peer cert contains only DNS names (no IP addresses) in Subject Alternative Name (SAN) field, server authenticates a peer only when forward-lookups (`dig b.com`) on those DNS names have matching IP with the remote IP address. For example, peer B's CSR (with `cfssl`) SAN field is `["b.com"]` when peer B's remote IP address is `10.138.0.2`. When peer B tries to join the cluster, peer A looks up the incoming host `b.com` to get the list of IP addresses (e.g. `dig b.com`). And rejects B if the list does not contain the IP `10.138.0.2`, with the error `tls: 10.138.0.2 does not match any of DNSNames ["b.com"]`.
-- Auth support JWT token.
-
-### etcd server
-
-- RPCs
- - Add Election, Lock service.
-- Native client `etcdserver/api/v3client`
- - client "embedded" in the server.
-- Logging, monitoring
- - Server warns large snapshot operations.
-- Add `etcd --enable-v2` flag to enable v2 API server.
- - `etcd --enable-v2=true` by default.
-- Add `etcd --auth-token` flag.
-- v3.2 compactor runs [every hour](https://github.com/etcd-io/etcd/pull/7875).
- - Compactor only supports periodic compaction.
- - Compactor continues to record latest revisions every 5-minute.
- - For every hour, it uses the last revision that was fetched before compaction period, from the revision records that were collected every 5-minute.
- - That is, for every hour, compactor discards historical data created before compaction period.
- - The retention window of compaction period moves to next hour.
- - 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 compacts revision 1000, 1100, and 1200 for every 1-hour.
- - If compaction succeeds or requested revision has already been compacted, it resets period timer and removes used compacted revision from historical revision records (e.g. start next revision collect and compaction from previously collected revisions).
- - If compaction fails, it retries in 5 minutes.
-- Allow snapshot over 512MB.
-
-### client v3
-
-- STM prefetching.
-- Add namespace feature.
-- Add `ErrOldCluster` with server version checking.
-- Translate `WithPrefix()` into `WithFromKey()` for empty key.
-
-### etcdctl v3
-
-- Add `check perf` command.
-- Add `etcdctl --from-key` flag to role grant-permission command.
-- `lock` command takes an optional command to execute.
-
-### gRPC Proxy
-
-- Proxy endpoint discovery.
-- Namespaces.
-- Coalesce lease requests.
-
-### etcd gateway
-
-- Support [DNS SRV priority](https://github.com/etcd-io/etcd/pull/7882) for [smart proxy routing](https://github.com/etcd-io/etcd/issues/4378).
-
-### Other
-
-- v3 client
- - concurrency package's elections updated to match RPC interfaces.
- - let client dial endpoints not in the balancer.
-- Release
- - Annotate acbuild with supports-systemd-notify.
- - Add `nsswitch.conf` to Docker container image.
- - Add ppc64le, arm64(experimental) builds.
-
-### Go
-
-- Compile with [*Go 1.8.3*](https://golang.org/doc/devel/release.html#go1.8).
-
-
-
-
diff --git a/etcd-fix/CHANGELOG-3.3.md b/etcd-fix/CHANGELOG-3.3.md
deleted file mode 100644
index a5f4adf..0000000
--- a/etcd-fix/CHANGELOG-3.3.md
+++ /dev/null
@@ -1,1094 +0,0 @@
-
-
-Previous change logs can be found at [CHANGELOG-3.2](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md).
-
-
-The minimum recommended etcd versions to run in **production** are 3.2.28+, 3.3.18+, and 3.4.2+.
-
-
-
-
-
-## v3.3.25 (2020 TBD)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.23...v3.3.25) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### Security
-
-- A [log warning](https://github.com/etcd-io/etcd/pull/12242) is added when etcd use any existing directory that has a permission different than 700 on Linux and 777 on Windows.
-
-
-## [v3.3.24](https://github.com/etcd-io/etcd/releases/tag/v3.3.24) (2020-08-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.23...v3.3.24) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### Package `etcd server`
-
-- Fix [`int64` convert panic in raft logger](https://github.com/etcd-io/etcd/pull/12106).
- - Fix [kubernetes/kubernetes#91937](https://github.com/kubernetes/kubernetes/issues/91937).
-
-### Package `runtime`
-
-- Optimize [`runtime.FDUsage` by removing unnecessary sorting](https://github.com/etcd-io/etcd/pull/12214).
-
-### Metrics, Monitoring
-
-- Add [`os_fd_used` and `os_fd_limit` to monitor current OS file descriptors](https://github.com/etcd-io/etcd/pull/12214).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-
-
-## [v3.3.23](https://github.com/etcd-io/etcd/releases/tag/v3.3.23) (2020-07-16)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.22...v3.3.23) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### Breaking Changes
-
-- Fix [incorrect package dependency when etcd clientv3 used as libary](https://github.com/etcd-io/etcd/issues/12068).
-- Changed behavior on [existing dir permission](https://github.com/etcd-io/etcd/pull/11798).
- - 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.
-
-### Package `wal`
-
-### etcd server
-- Fix [watch stream got closed if one watch request is not permitted](https://github.com/etcd-io/etcd/pull/11758).
-- Add [etcd --auth-token-ttl](https://github.com/etcd-io/etcd/pull/11980) flag to customize `simpleTokenTTL` settings.
-- Improve [runtime.FDUsage objects malloc of Memory Usage and CPU Usage](https://github.com/etcd-io/etcd/pull/11986).
-- Improve [mvcc.watchResponse channel Memory Usage](https://github.com/etcd-io/etcd/pull/11987).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-
-## [v3.3.22](https://github.com/etcd-io/etcd/releases/tag/v3.3.22) (2020-05-20)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.21...v3.3.22) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### Package `wal`
-
-- Add [missing CRC checksum check in WAL validate method otherwise causes panic](https://github.com/etcd-io/etcd/pull/11924).
- - See https://github.com/etcd-io/etcd/issues/11918.
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.3.21](https://github.com/etcd-io/etcd/releases/tag/v3.3.21) (2020-05-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.20...v3.3.21) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### `etcdctl`
-
-- Make sure [save snapshot downloads checksum for integrity checks](https://github.com/etcd-io/etcd/pull/11896).
-
-### Package `clientv3`
-
-- Make sure [save snapshot downloads checksum for integrity checks](https://github.com/etcd-io/etcd/pull/11896).
-
-### etcd server
-
-- Improve logging around snapshot send and receive.
-- [Add log when etcdserver failed to apply command](https://github.com/etcd-io/etcd/pull/11670).
-- [Fix deadlock bug in mvcc](https://github.com/etcd-io/etcd/pull/11817).
-- Fix [inconsistency between WAL and server snapshot](https://github.com/etcd-io/etcd/pull/11888).
- - 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.
-
-### Package `auth`
-
-- [Fix a data corruption bug by saving consistent index](https://github.com/etcd-io/etcd/pull/11652).
-
-### Metrics, Monitoring
-
-- Add [`etcd_debugging_auth_revision`](https://github.com/etcd-io/etcd/commit/f14d2a087f7b0fd6f7980b95b5e0b945109c95f3).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.3.20](https://github.com/etcd-io/etcd/releases/tag/v3.3.20) (2020-04-01)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.19...v3.3.20) and [v3.2 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### Package `wal`
-
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-
-### Metrics, Monitoring
-
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.3.19](https://github.com/etcd-io/etcd/releases/tag/v3.3.19) (2020-03-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.18...v3.3.19) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### client v3
-
-- Fix [`"hasleader"` metadata embedding](https://github.com/etcd-io/etcd/pull/11687).
- - Previously, `clientv3.WithRequireLeader(ctx)` was overwriting existing context keys.
-
-### etcd server
-
-- [Fix corruption bug in defrag](https://github.com/etcd-io/etcd/pull/11613).
-- Log [`[CLIENT-PORT]/health` check in server side](https://github.com/etcd-io/etcd/pull/11704).
-
-### etcdctl v3
-
-- Fix [`etcdctl member add`](https://github.com/etcd-io/etcd/pull/11638) command to prevent potential timeout.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-- Add [`etcd_server_client_requests_total` with `"type"` and `"client_api_version"` labels](https://github.com/etcd-io/etcd/pull/11687).
-
-### gRPC Proxy
-
-- Fix [`panic on error`](https://github.com/etcd-io/etcd/pull/11694) for metrics handler.
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.3.18](https://github.com/etcd-io/etcd/releases/tag/v3.3.18) (2019-11-26)
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_cluster_version`](https://github.com/etcd-io/etcd/pull/11261) Prometheus metric.
-- Add [`etcd_debugging_mvcc_total_put_size_in_bytes`](https://github.com/etcd-io/etcd/pull/11374) Prometheus metric.
-
-### etcdserver
-
-- Fix [`wait purge file loop during shutdown`](https://github.com/etcd-io/etcd/pull/11308).
- - 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.
-
-
-
-
-
-## [v3.3.17](https://github.com/etcd-io/etcd/releases/tag/v3.3.17) (2019-10-11)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.16...v3.3.17) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-### Release details
-
-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.
-
-
-
-
-
-## [v3.3.16](https://github.com/etcd-io/etcd/releases/tag/v3.3.16) (2019-10-10)
-
-**WARNING: This is a bad release! Please use etcd 3.3.17 instead. See https://github.com/etcd-io/etcd/issues/11241 for details.**
-
-### Issues with release
-
-- 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 [code changes](https://github.com/etcd-io/etcd/compare/v3.3.15...v3.3.16) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Add `etcd --experimental-peer-skip-client-san-verification` to [skip verification of peer client address](https://github.com/etcd-io/etcd/pull/11196).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_debugging_mvcc_current_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-- Add [`etcd_debugging_mvcc_compact_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-
-### Dependency
-
-- Upgrade [`github.com/coreos/bbolt`](https://github.com/etcd-io/bbolt/releases) from [**`v1.3.1-coreos.6`**](https://github.com/etcd-io/bbolt/releases/tag/v1.3.1-coreos.6) to [**`v1.3.3`**](https://github.com/etcd-io/bbolt/releases/tag/v1.3.3).
-
-### etcdctl v3
-
-- Fix [`etcdctl member add`](https://github.com/etcd-io/etcd/pull/11194) command to prevent potential timeout.
-
-### Go
-
-- Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-
-### client v3
-
-- Fix [client balancer failover against multiple endpoints](https://github.com/etcd-io/etcd/pull/11184).
- - Fix ["kube-apiserver: failover on multi-member etcd cluster fails certificate check on DNS mismatch" (kubernetes#83028)](https://github.com/kubernetes/kubernetes/issues/83028).
-- Fix [IPv6 endpoint parsing in client](https://github.com/etcd-io/etcd/pull/11211).
- - Fix ["1.16: etcd client does not parse IPv6 addresses correctly when members are joining" (kubernetes#83550)](https://github.com/kubernetes/kubernetes/issues/83550).
-
-
-
-
-
-## [v3.3.15](https://github.com/etcd-io/etcd/releases/tag/v3.3.15) (2019-08-19)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.14...v3.3.15) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-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 ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available" (kubernetes#72102)](https://github.com/kubernetes/kubernetes/issues/72102).
-
-### Breaking Changes
-
-- Revert "Migrate dependency management tool from `glide` to [Go module](https://github.com/etcd-io/etcd/pull/10063)".
- - Now, etcd >= v3.3.15 uses `glide` for dependency management.
- - See [kubernetes#81434](https://github.com/kubernetes/kubernetes/pull/81434) for more contexts.
-
-### Go
-
-- Require [*Go 1.12+*](https://github.com/etcd-io/etcd/pull/10045).
-- Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-
-
-
-
-
-## [v3.3.14](https://github.com/etcd-io/etcd/releases/tag/v3.3.14) (2019-08-16)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.13...v3.3.14) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-- [v3.3.14-rc.0](https://github.com/etcd-io/etcd/releases/tag/v3.3.14-rc.0) (2019-08-15), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.14-beta.0...v3.3.14-rc.0).
-- [v3.3.14-beta.0](https://github.com/etcd-io/etcd/releases/tag/v3.3.14-beta.0) (2019-08-14), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.13...v3.3.14-beta.0).
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-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 ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available" (kubernetes#72102)](https://github.com/kubernetes/kubernetes/issues/72102).
-
-### Breaking Changes
-
-- Rewrite [client balancer](https://github.com/etcd-io/etcd/pull/9860) with [new gRPC balancer interface](https://github.com/etcd-io/etcd/issues/9106).
- - Upgrade [gRPC to v1.23.0](https://github.com/etcd-io/etcd/pull/10911).
- - Improve [client balancer failover against secure endpoints](https://github.com/etcd-io/etcd/pull/10911).
- - Fix ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available" (kubernetes#72102)](https://github.com/kubernetes/kubernetes/issues/72102).
- - [The new client balancer](https://github.com/etcd-io/etcd/blob/master/Documentation/learning/design-client.md) 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 [*Go 1.12+*](https://github.com/etcd-io/etcd/pull/10045).
-- Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-- Migrate dependency management tool from `glide` to [Go module](https://github.com/etcd-io/etcd/pull/10063).
- - <= 3.3 puts `vendor` directory under `cmd/vendor` directory to [prevent conflicting transitive dependencies](https://github.com/etcd-io/etcd/issues/4913).
- - 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` [release container](https://console.cloud.google.com/gcr/images/etcd-development/GLOBAL/etcd) tag.
- - **`docker pull gcr.io/etcd-development/etcd:latest` would not be up-to-date**.
-- Deprecated [minor](https://semver.org/) version [release container](https://console.cloud.google.com/gcr/images/etcd-development/GLOBAL/etcd) 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 [ACIs from official release](https://github.com/etcd-io/etcd/pull/9059).
- - [AppC was officially suspended](https://github.com/appc/spec#-disclaimer-), as of late 2016.
- - [`acbuild`](https://github.com/containers/build#this-project-is-currently-unmaintained) is not maintained anymore.
- - `*.aci` files are not available from `v3.4` release.
-
-### etcd server
-
-- Add [`rpctypes.ErrLeaderChanged`](https://github.com/etcd-io/etcd/pull/10094).
- - Now linearizable requests with read index would fail fast when there is a leadership change, instead of waiting until context timeout.
-- Fix [race condition in `rafthttp` transport pause/resume](https://github.com/etcd-io/etcd/pull/10826).
-
-### API
-
-- Add [`watch_id` field to `etcdserverpb.WatchCreateRequest`](https://github.com/etcd-io/etcd/pull/9065) to allow user-provided watch ID to `mvcc`.
- - Corresponding `watch_id` is returned via `etcdserverpb.WatchResponse`, if any.
-- Add [`fragment` field to `etcdserverpb.WatchCreateRequest`](https://github.com/etcd-io/etcd/pull/9291) to request etcd server to [split watch events](https://github.com/etcd-io/etcd/issues/9294) 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 [`WatchRequest.WatchProgressRequest`](https://github.com/etcd-io/etcd/pull/9869).
- - 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.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_network_snapshot_send_inflights_total`](https://github.com/etcd-io/etcd/pull/11009) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_inflights_total`](https://github.com/etcd-io/etcd/pull/11009) Prometheus metric.
-- Add [`etcd_server_snapshot_apply_in_progress_total`](https://github.com/etcd-io/etcd/pull/11009) Prometheus metric.
-
-### client v3
-
-- Fix [gRPC panic "send on closed channel](https://github.com/etcd-io/etcd/issues/9956) by upgrading [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases) from [**`v1.7.5`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.5) to [**`v1.23.0`**](https://github.com/grpc/grpc-go/releases/tag/v1.23.0).
-- Rewrite [client balancer](https://github.com/etcd-io/etcd/pull/9860) with [new gRPC balancer interface](https://github.com/etcd-io/etcd/issues/9106).
- - Upgrade [gRPC to v1.23.0](https://github.com/etcd-io/etcd/pull/10911).
- - Improve [client balancer failover against secure endpoints](https://github.com/etcd-io/etcd/pull/10911).
- - Fix ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available" (kubernetes#72102)](https://github.com/kubernetes/kubernetes/issues/72102).
- - [The new client balancer](https://github.com/etcd-io/etcd/blob/master/Documentation/learning/design-client.md) 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`.
-
-### etcdctl v3
-
-- Add [`etcdctl endpoint health --write-out` support](https://github.com/etcd-io/etcd/pull/9540).
- - Previously, [`etcdctl endpoint health --write-out json` did not work](https://github.com/etcd-io/etcd/issues/9532).
- - The command output is changed. Previously, if endpoint is unreachable, the command output is
- "\ is unhealthy: failed to connect: \". This change unified the error message, all error types
- now have the same output "\ is unhealthy: failed to commit proposal: \".
-- Add [missing newline in `etcdctl endpoint health`](https://github.com/etcd-io/etcd/pull/10793).
-
-### Package `pkg/adt`
-
-- Change [`pkg/adt.IntervalTree` from `struct` to `interface`](https://github.com/etcd-io/etcd/pull/10959).
- - See [`pkg/adt` README](https://github.com/etcd-io/etcd/tree/master/pkg/adt) and [`pkg/adt` godoc](https://godoc.org/go.etcd.io/etcd/pkg/adt).
-- Improve [`pkg/adt.IntervalTree` test coverage](https://github.com/etcd-io/etcd/pull/10959).
- - See [`pkg/adt` README](https://github.com/etcd-io/etcd/tree/master/pkg/adt) and [`pkg/adt` godoc](https://godoc.org/go.etcd.io/etcd/pkg/adt).
-- Fix [Red-Black tree to maintain black-height property](https://github.com/etcd-io/etcd/pull/10978).
- - Previously, delete operation violates [black-height property](https://github.com/etcd-io/etcd/issues/10965).
-
-### Go
-
-- Require [*Go 1.12+*](https://github.com/etcd-io/etcd/pull/10045).
-- Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-
-
-
-
-
-## [v3.3.13](https://github.com/etcd-io/etcd/releases/tag/v3.3.13) (2019-05-02)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.12...v3.3.13) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Improve [heartbeat send failure logging](https://github.com/etcd-io/etcd/pull/10663).
-- Add [`Verify` function to perform corruption check on WAL contents](https://github.com/etcd-io/etcd/pull/10603).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Fix bug where [db_compaction_total_duration_milliseconds metric incorrectly measured duration as 0](https://github.com/etcd-io/etcd/pull/10646).
-
-### client v3
-
-- Fix [`(*Client).Endpoints()` method race condition](https://github.com/etcd-io/etcd/pull/10595).
-
-### Package `wal`
-
-- Add [`Verify` function to perform corruption check on WAL contents](https://github.com/etcd-io/etcd/pull/10603).
-
-### Dependency
-
-- Migrate [`github.com/ugorji/go/codec`](https://github.com/ugorji/go/releases) to [**`github.com/json-iterator/go`**](https://github.com/json-iterator/go) (See [#10667](https://github.com/etcd-io/etcd/pull/10667) for more).
-- Migrate [`github.com/ghodss/yaml`](https://github.com/ghodss/yaml/releases) to [**`sigs.k8s.io/yaml`**](https://github.com/kubernetes-sigs/yaml) (See [#10718](https://github.com/etcd-io/etcd/pull/10718) for more).
-
-### Go
-
-- Compile with [*Go 1.10.8*](https://golang.org/doc/devel/release.html#go1.10).
-
-
-
-
-
-## [v3.3.12](https://github.com/etcd-io/etcd/releases/tag/v3.3.12) (2019-02-07)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.11...v3.3.12) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### etcdctl v3
-
-- [Strip out insecure endpoints from DNS SRV records when using discovery](https://github.com/etcd-io/etcd/pull/10443) with etcdctl v2
-
-### Go
-
-- Compile with [*Go 1.10.8*](https://golang.org/doc/devel/release.html#go1.10).
-
-
-
-
-
-## [v3.3.11](https://github.com/etcd-io/etcd/releases/tag/v3.3.11) (2019-01-11)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.10...v3.3.11) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### gRPC Proxy
-
-- Fix [memory leak in cache layer](https://github.com/etcd-io/etcd/pull/10327).
-
-### Security, Authentication
-
-- Disable [CommonName authentication for gRPC-gateway](https://github.com/etcd-io/etcd/pull/10366) 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.
-
-### Go
-
-- Compile with [*Go 1.10.7*](https://golang.org/doc/devel/release.html#go1.10).
-
-
-
-
-
-## [v3.3.10](https://github.com/etcd-io/etcd/releases/tag/v3.3.10) (2018-10-10)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.9...v3.3.10) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Improve ["became inactive" warning log](https://github.com/etcd-io/etcd/pull/10024), which indicates message send to a peer failed.
-- Improve [read index wait timeout warning log](https://github.com/etcd-io/etcd/pull/10026), which indicates that local node might have slow network.
-- Add [gRPC interceptor for debugging logs](https://github.com/etcd-io/etcd/pull/9990); enable `etcd --debug` flag to see per-request debug information.
-- Add [consistency check in snapshot status](https://github.com/etcd-io/etcd/pull/10109). If consistency check on snapshot file fails, `snapshot status` returns `"snapshot file integrity check failed..."` error.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Improve [`etcd_network_peer_round_trip_time_seconds`](https://github.com/etcd-io/etcd/pull/10155) Prometheus metric to track leader heartbeats.
- - Previously, it only samples the TCP connection for snapshot messages.
-- Add [`etcd_snap_db_fsync_duration_seconds_count`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_snap_db_save_total_duration_seconds_bucket`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_server_id`](https://github.com/etcd-io/etcd/pull/9998) Prometheus metric.
-- Add [`etcd_server_health_success`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_health_failures`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_read_indexes_failed_total`](https://github.com/etcd-io/etcd/pull/10094) Prometheus metric.
-
-### client v3
-
-- Fix logic on [release lock key if cancelled](https://github.com/etcd-io/etcd/pull/10153) in `clientv3/concurrency` package.
-
-### Go
-
-- Compile with [*Go 1.10.4*](https://golang.org/doc/devel/release.html#go1.10).
-
-
-
-
-
-## [v3.3.9](https://github.com/etcd-io/etcd/releases/tag/v3.3.9) (2018-07-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.8...v3.3.9) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Improve [Raft Read Index timeout warning messages](https://github.com/etcd-io/etcd/pull/9897).
-
-### Security, Authentication
-
-- Compile with [*Go 1.10.3*](https://golang.org/doc/devel/release.html#go1.10) to support [crypto/x509 "Name Constraints"](https://github.com/etcd-io/etcd/issues/9912).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_server_go_version`](https://github.com/etcd-io/etcd/pull/9957) Prometheus metric.
-- Add [`etcd_server_heartbeat_send_failures_total`](https://github.com/etcd-io/etcd/pull/9940) Prometheus metric.
-- Add [`etcd_server_slow_apply_total`](https://github.com/etcd-io/etcd/pull/9940) Prometheus metric.
-- Add [`etcd_disk_backend_defrag_duration_seconds`](https://github.com/etcd-io/etcd/pull/9940) Prometheus metric.
-- Add [`etcd_mvcc_hash_duration_seconds`](https://github.com/etcd-io/etcd/pull/9940) Prometheus metric.
-- Add [`etcd_mvcc_hash_rev_duration_seconds`](https://github.com/etcd-io/etcd/pull/9940) Prometheus metric.
-- Add [`etcd_server_slow_read_indexes_total`](https://github.com/etcd-io/etcd/pull/9897) Prometheus metric.
-- Add [`etcd_server_quota_backend_bytes`](https://github.com/etcd-io/etcd/pull/9820) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_mvcc_db_total_size_in_use_in_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-- Add [`etcd_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819) Prometheus metric.
- - In addition to [`etcd_debugging_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819).
-- Add [`etcd_mvcc_db_total_size_in_use_in_bytes`](https://github.com/etcd-io/etcd/pull/9256) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_mvcc_db_total_size_in_use_in_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-
-### client v3
-
-- Fix [lease keepalive interval updates when response queue is full](https://github.com/etcd-io/etcd/pull/9952).
- - If `<-chan *clientv3LeaseKeepAliveResponse` from `clientv3.Lease.KeepAlive` was never consumed or channel is full, client was [sending keepalive request every 500ms](https://github.com/etcd-io/etcd/issues/9911) instead of expected rate of every "TTL / 3" duration.
-
-### Go
-
-- Compile with [*Go 1.10.3*](https://golang.org/doc/devel/release.html#go1.10).
-
-
-
-
-
-## [v3.3.8](https://github.com/etcd-io/etcd/releases/tag/v3.3.8) (2018-06-15)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.7...v3.3.8) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Improve [slow request apply warning log](https://github.com/etcd-io/etcd/pull/9288).
- - e.g. `read-only range request "key:\"/a\" range_end:\"/b\" " with result "range_response_count:3 size:96" took too long (97.966µs) to execute`.
- - Redact [request value field](https://github.com/etcd-io/etcd/pull/9822).
- - Provide [response size](https://github.com/etcd-io/etcd/pull/9826).
-- Add [backoff on watch retries on transient errors](https://github.com/etcd-io/etcd/pull/9840).
-
-### Go
-
-- Compile with [*Go 1.9.7*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.7](https://github.com/etcd-io/etcd/releases/tag/v3.3.7) (2018-06-06)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.6...v3.3.7) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Security, Authentication
-
-- Support TLS cipher suite whitelisting.
- - To block [weak cipher suites](https://github.com/etcd-io/etcd/issues/8320).
- - TLS handshake fails when client hello is requested with invalid cipher suites.
- - Add [`etcd --cipher-suites`](https://github.com/etcd-io/etcd/pull/9801) flag.
- - If empty, Go auto-populates the list.
-
-### etcdctl v3
-
-- Fix [`etcdctl move-leader` command for TLS-enabled endpoints](https://github.com/etcd-io/etcd/pull/9807).
-
-### Go
-
-- Compile with [*Go 1.9.6*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.6](https://github.com/etcd-io/etcd/releases/tag/v3.3.6) (2018-05-31)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.5...v3.3.6) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### etcd server
-
-- Allow [empty auth token](https://github.com/etcd-io/etcd/pull/9369).
- - Previously, when auth token is an empty string, it returns [`failed to initialize the etcd server: auth: invalid auth options` error](https://github.com/etcd-io/etcd/issues/9349).
-- Fix [auth storage panic on server lease revoke routine with JWT token](https://github.com/etcd-io/etcd/issues/9695).
-- Fix [`mvcc` server panic from restore operation](https://github.com/etcd-io/etcd/pull/9775).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.9.6*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.5](https://github.com/etcd-io/etcd/releases/tag/v3.3.5) (2018-05-09)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.4...v3.3.5) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### etcdctl v3
-
-- Fix [`etcdctl watch [key] [range_end] -- [exec-command…]`](https://github.com/etcd-io/etcd/pull/9688) parsing.
- - Previously, `ETCDCTL_API=3 ./bin/etcdctl watch foo -- echo watch event received` panicked.
-
-### Go
-
-- Compile with [*Go 1.9.6*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.4](https://github.com/etcd-io/etcd/releases/tag/v3.3.4) (2018-04-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.3...v3.3.4) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_server_is_leader`](https://github.com/etcd-io/etcd/pull/9587) Prometheus metric.
-- Fix [`etcd_debugging_server_lease_expired_total`](https://github.com/etcd-io/etcd/pull/9557) Prometheus metric.
-- Fix [race conditions in v2 server stat collecting](https://github.com/etcd-io/etcd/pull/9562).
-
-### Security, Authentication
-
-- Fix [TLS reload](https://github.com/etcd-io/etcd/pull/9570) when [certificate SAN field only includes IP addresses but no domain names](https://github.com/etcd-io/etcd/issues/9541).
- - 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 [not include any domain names but only IP addresses](https://github.com/etcd-io/etcd/issues/9541) 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).
-
-### etcd server
-
-- Add [`etcd --initial-election-tick-advance`](https://github.com/etcd-io/etcd/pull/9591) 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 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.
- - 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 [disruptive rejoining follower node](https://github.com/etcd-io/etcd/issues/9333).
-
-### Package `embed`
-
-- Add [`embed.Config.InitialElectionTickAdvance`](https://github.com/etcd-io/etcd/pull/9591) to enable/disable initial election tick fast-forward.
- - `embed.NewConfig()` would return `*embed.Config` with `InitialElectionTickAdvance` as true by default.
-
-### Go
-
-- Compile with [*Go 1.9.5*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.3](https://github.com/etcd-io/etcd/releases/tag/v3.3.3) (2018-03-29)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.2...v3.3.3) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Adjust [election timeout on server restart](https://github.com/etcd-io/etcd/pull/9415) to reduce [disruptive rejoining servers](https://github.com/etcd-io/etcd/issues/9333).
- - 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 [periodic compaction retention window](https://github.com/etcd-io/etcd/pull/9485).
- - 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.
- - Futhermore, 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.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add missing [`etcd_network_peer_sent_failures_total` count](https://github.com/etcd-io/etcd/pull/9437).
-
-### Go
-
-- Compile with [*Go 1.9.5*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.2](https://github.com/etcd-io/etcd/releases/tag/v3.3.2) (2018-03-08)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.1...v3.3.2) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### etcd server
-
-- Fix [server panic on invalid Election Proclaim/Resign HTTP(S) requests](https://github.com/etcd-io/etcd/pull/9379).
- - 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 [revision-based compaction retention parsing](https://github.com/etcd-io/etcd/pull/9339).
- - Previously, `etcd --auto-compaction-mode revision --auto-compaction-retention 1` was [translated to revision retention 3600000000000](https://github.com/etcd-io/etcd/issues/9337).
- - Now, `etcd --auto-compaction-mode revision --auto-compaction-retention 1` is correctly parsed as revision retention 1.
-- Prevent [overflow by large `TTL` values for `Lease` `Grant`](https://github.com/etcd-io/etcd/pull/9399).
- - `TTL` parameter to `Grant` request is unit of second.
- - Leases with too large `TTL` values exceeding `math.MaxInt64` [expire in unexpected ways](https://github.com/etcd-io/etcd/issues/9374).
- - 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 [`raft.Config.CheckQuorum` when starting with `ForceNewCluster`](https://github.com/etcd-io/etcd/pull/9347).
-
-### Proxy v2
-
-- Fix [v2 proxy leaky HTTP requests](https://github.com/etcd-io/etcd/pull/9336).
-
-### Go
-
-- Compile with [*Go 1.9.4*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.1](https://github.com/etcd-io/etcd/releases/tag/v3.3.1) (2018-02-12)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0...v3.3.1) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Add [warnings on requests taking too long](https://github.com/etcd-io/etcd/pull/9288).
- - e.g. `etcdserver: read-only range request "key:\"\\000\" range_end:\"\\000\" " took too long [3.389041388s] to execute`
-
-### etcd server
-
-- Fix [`mvcc` "unsynced" watcher restore operation](https://github.com/etcd-io/etcd/pull/9281).
- - "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 [missing events from "unsynced" watchers](https://github.com/etcd-io/etcd/issues/9086).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.9.4*](https://golang.org/doc/devel/release.html#go1.9).
-
-
-
-
-
-## [v3.3.0](https://github.com/etcd-io/etcd/releases/tag/v3.3.0) (2018-02-01)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.2.0...v3.3.0) and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md) for any breaking changes.
-
-- [v3.3.0](https://github.com/etcd-io/etcd/releases/tag/v3.3.0) (2018-02-01), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0-rc.4...v3.3.0).
-- [v3.3.0-rc.4](https://github.com/etcd-io/etcd/releases/tag/v3.3.0-rc.4) (2018-01-22), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0-rc.3...v3.3.0-rc.4).
-- [v3.3.0-rc.3](https://github.com/etcd-io/etcd/releases/tag/v3.3.0-rc.3) (2018-01-17), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0-rc.2...v3.3.0-rc.3).
-- [v3.3.0-rc.2](https://github.com/etcd-io/etcd/releases/tag/v3.3.0-rc.2) (2018-01-11), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0-rc.1...v3.3.0-rc.2).
-- [v3.3.0-rc.1](https://github.com/etcd-io/etcd/releases/tag/v3.3.0-rc.1) (2018-01-02), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0-rc.0...v3.3.0-rc.1).
-- [v3.3.0-rc.0](https://github.com/etcd-io/etcd/releases/tag/v3.3.0-rc.0) (2017-12-20), see [code changes](https://github.com/etcd-io/etcd/compare/v3.2.0...v3.3.0-rc.0).
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.3 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_3.md).**
-
-### Improved
-
-- Use [`coreos/bbolt`](https://github.com/coreos/bbolt/releases) to replace [`boltdb/bolt`](https://github.com/boltdb/bolt#project-status).
- - Fix [etcd database size grows until `mvcc: database space exceeded`](https://github.com/etcd-io/etcd/issues/8009).
-- [Support database size larger than 8GiB](https://github.com/etcd-io/etcd/pull/7525) (8GiB is now a suggested maximum size for normal environments)
-- [Reduce memory allocation](https://github.com/etcd-io/etcd/pull/8428) on [Range operations](https://github.com/etcd-io/etcd/pull/8475).
-- [Rate limit](https://github.com/etcd-io/etcd/pull/8099) and [randomize](https://github.com/etcd-io/etcd/pull/8101) lease revoke on restart or leader elections.
- - Prevent [spikes in Raft proposal rate](https://github.com/etcd-io/etcd/issues/8096).
-- Support `clientv3` balancer failover under [network faults/partitions](https://github.com/etcd-io/etcd/issues/8711).
-- Better warning on [mismatched `etcd --initial-cluster`](https://github.com/etcd-io/etcd/pull/8083) 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. [due to DNS error](https://github.com/etcd-io/etcd/pull/9210)), 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 ...))`.
-
-### Breaking Changes
-
-- Require [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases) [**`v1.7.4`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.4) or [**`v1.7.5`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.5).
- - Deprecate [`metadata.Incoming/OutgoingContext`](https://github.com/etcd-io/etcd/pull/7896).
- - Deprecate `grpclog.Logger`, upgrade to [`grpclog.LoggerV2`](https://github.com/etcd-io/etcd/pull/8533).
- - Deprecate [`grpc.ErrClientConnTimeout`](https://github.com/etcd-io/etcd/pull/8505) errors in `clientv3`.
- - Use [`MaxRecvMsgSize` and `MaxSendMsgSize`](https://github.com/etcd-io/etcd/pull/8437) to limit message size, in etcd server.
-- Translate [gRPC status error in v3 client `Snapshot` API](https://github.com/etcd-io/etcd/pull/9038).
-- v3 `etcdctl` [`lease timetolive LEASE_ID`](https://github.com/etcd-io/etcd/issues/9028) on expired lease now prints [`"lease LEASE_ID already expired"`](https://github.com/etcd-io/etcd/pull/9047).
- - <=3.2 prints `"lease LEASE_ID granted with TTL(0s), remaining(-1s)"`.
-- Replace [gRPC gateway](https://github.com/grpc-ecosystem/grpc-gateway) endpoint `/v3alpha` with [`/v3beta`](https://github.com/etcd-io/etcd/pull/8880).
- - To deprecate [`/v3alpha`](https://github.com/etcd-io/etcd/issues/8125) 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 [accept string values](https://github.com/etcd-io/etcd/pull/8563) with [finer granularity](https://github.com/etcd-io/etcd/issues/8503).
- - 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 [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) function in Go.
-
-### Dependency
-
-- Upgrade [`boltdb/bolt`](https://github.com/boltdb/bolt#project-status) from [**`v1.3.0`**](https://github.com/boltdb/bolt/releases/tag/v1.3.0) to [`coreos/bbolt`](https://github.com/coreos/bbolt/releases) [**`v1.3.1-coreos.6`**](https://github.com/coreos/bbolt/releases/tag/v1.3.1-coreos.6).
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases) from [**`v1.2.1`**](https://github.com/grpc/grpc-go/releases/tag/v1.2.1) to [**`v1.7.5`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.5).
-- Upgrade [`github.com/ugorji/go/codec`](https://github.com/ugorji/go) to [**`v1.1`**](https://github.com/ugorji/go/releases/tag/v1.1), and [regenerate v2 `client`](https://github.com/etcd-io/etcd/pull/8721).
-- Upgrade [`github.com/ugorji/go/codec`](https://github.com/ugorji/go) to [**`ugorji/go@54210f4e0`**](https://github.com/ugorji/go/commit/54210f4e076c57f351166f0ed60e67d3fca57a36), and [regenerate v2 `client`](https://github.com/etcd-io/etcd/pull/8574).
-- Upgrade [`github.com/grpc-ecosystem/grpc-gateway`](https://github.com/grpc-ecosystem/grpc-gateway/releases) from [**`v1.2.2`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.2.2) to [**`v1.3.0`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.3.0).
-- Upgrade [`golang.org/x/crypto/bcrypt`](https://github.com/golang/crypto) to [**`golang/crypto@6c586e17d`**](https://github.com/golang/crypto/commit/6c586e17d90a7d08bbbc4069984180dce3b04117).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd --listen-metrics-urls`](https://github.com/etcd-io/etcd/pull/8242) flag for additional `/metrics` and `/health` endpoints.
- - Useful for [bypassing critical APIs when monitoring etcd](https://github.com/etcd-io/etcd/issues/8060).
-- Add [`etcd_server_version`](https://github.com/etcd-io/etcd/pull/8960) Prometheus metric.
- - To replace [Kubernetes `etcd-version-monitor`](https://github.com/etcd-io/etcd/issues/8948).
-- Add [`etcd_debugging_mvcc_db_compaction_keys_total`](https://github.com/etcd-io/etcd/pull/8280) Prometheus metric.
-- Add [`etcd_debugging_server_lease_expired_total`](https://github.com/etcd-io/etcd/pull/8064) Prometheus metric.
- - To improve [lease revoke monitoring](https://github.com/etcd-io/etcd/issues/8050).
-- Document [Prometheus 2.0 rules](https://github.com/etcd-io/etcd/pull/8879).
-- Initialize gRPC server [metrics with zero values](https://github.com/etcd-io/etcd/pull/8878).
-- Fix [range/put/delete operation metrics](https://github.com/etcd-io/etcd/pull/8054) with transaction.
- - `etcd_debugging_mvcc_range_total`
- - `etcd_debugging_mvcc_put_total`
- - `etcd_debugging_mvcc_delete_total`
- - `etcd_debugging_mvcc_txn_total`
-- Fix [`etcd_debugging_mvcc_keys_total`](https://github.com/etcd-io/etcd/pull/8390) on restore.
-- Fix [`etcd_debugging_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/8120) on restore.
- - Also change to [`prometheus.NewGaugeFunc`](https://github.com/etcd-io/etcd/pull/8150).
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- Add [CRL based connection rejection](https://github.com/etcd-io/etcd/pull/8124) to manage [revoked certs](https://github.com/etcd-io/etcd/issues/4034).
-- Document [TLS authentication changes](https://github.com/etcd-io/etcd/pull/8895).
- - [Server accepts connections if IP matches, without checking DNS entries](https://github.com/etcd-io/etcd/pull/8223). 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.
- - [Server supports reverse-lookup on wildcard DNS `SAN`](https://github.com/etcd-io/etcd/pull/8281). 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 [`etcd --peer-cert-allowed-cn`](https://github.com/etcd-io/etcd/pull/8616) flag.
- - To support [CommonName(CN) based auth](https://github.com/etcd-io/etcd/issues/8262) for inter peer connection.
-- [Swap priority](https://github.com/etcd-io/etcd/pull/8594) of cert CommonName(CN) and username + password.
- - To address ["username and password specified in the request should take priority over CN in the cert"](https://github.com/etcd-io/etcd/issues/8584).
-- Protect [lease revoke with auth](https://github.com/etcd-io/etcd/pull/8031).
-- Provide user's role on [auth permission error](https://github.com/etcd-io/etcd/pull/8164).
-- Fix [auth store panic with disabled token](https://github.com/etcd-io/etcd/pull/8695).
-
-### etcd server
-
-- Add [`etcd --experimental-initial-corrupt-check`](https://github.com/etcd-io/etcd/pull/8554) flag to [check cluster database hashes before serving client/peer traffic](https://github.com/etcd-io/etcd/issues/8313).
- - `etcd --experimental-initial-corrupt-check=false` by default.
- - v3.4 will enable `--initial-corrupt-check=true` by default.
-- Add [`etcd --experimental-corrupt-check-time`](https://github.com/etcd-io/etcd/pull/8420) flag to [raise corrupt alarm monitoring](https://github.com/etcd-io/etcd/issues/7125).
- - `etcd --experimental-corrupt-check-time=0s` disabled by default.
-- Add [`etcd --experimental-enable-v2v3`](https://github.com/etcd-io/etcd/pull/8407) flag to [emulate v2 API with v3](https://github.com/etcd-io/etcd/issues/6925).
- - `etcd --experimental-enable-v2v3=false` by default.
-- Add [`etcd --max-txn-ops`](https://github.com/etcd-io/etcd/pull/7976) flag to [configure maximum number operations in transaction](https://github.com/etcd-io/etcd/issues/7826).
-- Add [`etcd --max-request-bytes`](https://github.com/etcd-io/etcd/pull/7968) flag to [configure maximum client request size](https://github.com/etcd-io/etcd/issues/7923).
- - If not configured, it defaults to 1.5 MiB.
-- Add [`etcd --client-crl-file`, `--peer-crl-file`](https://github.com/etcd-io/etcd/pull/8124) flags for [Certificate revocation list](https://github.com/etcd-io/etcd/issues/4034).
-- Add [`etcd --peer-cert-allowed-cn`](https://github.com/etcd-io/etcd/pull/8616) flag to support [CN-based auth for inter-peer connection](https://github.com/etcd-io/etcd/issues/8262).
-- Add [`etcd --listen-metrics-urls`](https://github.com/etcd-io/etcd/pull/8242) flag for additional `/metrics` and `/health` endpoints.
- - Support [additional (non) TLS `/metrics` endpoints for a TLS-enabled cluster](https://github.com/etcd-io/etcd/pull/8282).
- - 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 [bypassing critical APIs when monitoring etcd](https://github.com/etcd-io/etcd/issues/8060).
-- Add [`etcd --auto-compaction-mode`](https://github.com/etcd-io/etcd/pull/8123) flag to [support revision-based compaction](https://github.com/etcd-io/etcd/issues/8098).
-- Change `etcd --auto-compaction-retention` flag to [accept string values](https://github.com/etcd-io/etcd/pull/8563) with [finer granularity](https://github.com/etcd-io/etcd/issues/8503).
- - 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 [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) 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. Futhermore, 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 granularity.
- - 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 [`etcd --grpc-keepalive-min-time`, `etcd --grpc-keepalive-interval`, `etcd --grpc-keepalive-timeout`](https://github.com/etcd-io/etcd/pull/8535) flags to configure server-side keepalive policies.
-- Serve [`/health` endpoint as unhealthy](https://github.com/etcd-io/etcd/pull/8272) when [alarm (e.g. `NOSPACE`) is raised or there's no leader](https://github.com/etcd-io/etcd/issues/8207).
- - Define [`etcdhttp.Health`](https://godoc.org/github.com/coreos/etcd/etcdserver/api/etcdhttp#Health) struct with JSON encoder.
- - Note that `"health"` field is [`string` type, not `bool`](https://github.com/etcd-io/etcd/pull/9143).
- - e.g. `{"health":"false"}`, `{"health":"true"}`
- - [Remove `"errors"` field](https://github.com/etcd-io/etcd/pull/9162) 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 [logging setup to embed package](https://github.com/etcd-io/etcd/pull/8810)
- - Disable gRPC server info-level logs by default (can be enabled with `etcd --debug` flag).
-- Use [monotonic time in Go 1.9](https://github.com/etcd-io/etcd/pull/8507) for `lease` package.
-- Warn on [empty hosts in advertise URLs](https://github.com/etcd-io/etcd/pull/8384).
- - Address [advertise client URLs accepts empty hosts](https://github.com/etcd-io/etcd/issues/8379).
- - etcd v3.4 will exit on this error.
- - e.g. `etcd --advertise-client-urls=http://:2379`.
-- Warn on [shadowed environment variables](https://github.com/etcd-io/etcd/pull/8385).
- - Address [error on shadowed environment variables](https://github.com/etcd-io/etcd/issues/8380).
- - etcd v3.4 will exit on this error.
-
-### API
-
-- Support [ranges in transaction comparisons](https://github.com/etcd-io/etcd/pull/8025) for [disconnected linearized reads](https://github.com/etcd-io/etcd/issues/7924).
-- Add [nested transactions](https://github.com/etcd-io/etcd/pull/8102) to extend [proxy use cases](https://github.com/etcd-io/etcd/issues/7857).
-- Add [lease comparison target in transaction](https://github.com/etcd-io/etcd/pull/8324).
-- Add [lease list](https://github.com/etcd-io/etcd/pull/8358).
-- Add [hash by revision](https://github.com/etcd-io/etcd/pull/8263) for [better corruption checking against boltdb](https://github.com/etcd-io/etcd/issues/8016).
-
-### client v3
-
-- Add [health balancer](https://github.com/etcd-io/etcd/pull/8545) to fix [watch API hangs](https://github.com/etcd-io/etcd/issues/7247), improve [endpoint switch under network faults](https://github.com/etcd-io/etcd/issues/7941).
-- [Refactor balancer](https://github.com/etcd-io/etcd/pull/8840) and add [client-side keepalive pings](https://github.com/etcd-io/etcd/pull/8199) to handle [network partitions](https://github.com/etcd-io/etcd/issues/8711).
-- Add [`MaxCallSendMsgSize` and `MaxCallRecvMsgSize`](https://github.com/etcd-io/etcd/pull/9047) fields to [`clientv3.Config`](https://godoc.org/github.com/coreos/etcd/clientv3#Config).
- - Fix [exceeded response size limit error in client-side](https://github.com/etcd-io/etcd/issues/9043).
- - Address [kubernetes#51099](https://github.com/kubernetes/kubernetes/issues/51099).
- - 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 [`Compare_LEASE`](https://github.com/etcd-io/etcd/pull/8324) in [`clientv3.Compare`](https://godoc.org/github.com/coreos/etcd/clientv3#Compare).
-- Add [`LeaseValue` helper](https://github.com/etcd-io/etcd/pull/8488) to `Cmp` `LeaseID` values in `Txn`.
-- Add [`MoveLeader`](https://github.com/etcd-io/etcd/pull/8153) to `Maintenance`.
-- Add [`HashKV`](https://github.com/etcd-io/etcd/pull/8351) to `Maintenance`.
-- Add [`Leases`](https://github.com/etcd-io/etcd/pull/8358) to `Lease`.
-- Add [`clientv3/ordering`](https://github.com/etcd-io/etcd/pull/8092) for enforce [ordering in serialized requests](https://github.com/etcd-io/etcd/issues/7623).
-- Fix ["put at-most-once" violation](https://github.com/etcd-io/etcd/pull/8335).
-- Fix [`WatchResponse.Canceled`](https://github.com/etcd-io/etcd/pull/8283) on [compacted watch request](https://github.com/etcd-io/etcd/issues/8231).
-- Fix [`concurrency/stm` `Put` with serializable snapshot](https://github.com/etcd-io/etcd/pull/8439).
- - Use store revision from first fetch to resolve write conflicts instead of modified revision.
-
-### etcdctl v3
-
-- Add [`etcdctl --discovery-srv`](https://github.com/etcd-io/etcd/pull/8462) flag.
-- Add [`etcdctl --keepalive-time`, `--keepalive-timeout`](https://github.com/etcd-io/etcd/pull/8663) flags.
-- Add [`etcdctl lease list`](https://github.com/etcd-io/etcd/pull/8358) command.
-- Add [`etcdctl lease keep-alive --once`](https://github.com/etcd-io/etcd/pull/8775) flag.
-- Make [`lease timetolive LEASE_ID`](https://github.com/etcd-io/etcd/issues/9028) on expired lease print [`lease LEASE_ID already expired`](https://github.com/etcd-io/etcd/pull/9047).
- - <=3.2 prints `lease LEASE_ID granted with TTL(0s), remaining(-1s)`.
-- Add [`etcdctl snapshot restore --wal-dir`](https://github.com/etcd-io/etcd/pull/9124) flag.
-- Add [`etcdctl defrag --data-dir`](https://github.com/etcd-io/etcd/pull/8367) flag.
-- Add [`etcdctl move-leader`](https://github.com/etcd-io/etcd/pull/8153) command.
-- Add [`etcdctl endpoint hashkv`](https://github.com/etcd-io/etcd/pull/8351) command.
-- Add [`etcdctl endpoint --cluster`](https://github.com/etcd-io/etcd/pull/8143) flag, equivalent to [v2 `etcdctl cluster-health`](https://github.com/etcd-io/etcd/issues/8117).
-- Make `etcdctl endpoint health` command terminate with [non-zero exit code on unhealthy status](https://github.com/etcd-io/etcd/pull/8342).
-- Add [`etcdctl lock --ttl`](https://github.com/etcd-io/etcd/pull/8370) flag.
-- Support [`etcdctl watch [key] [range_end] -- [exec-command…]`](https://github.com/etcd-io/etcd/pull/8919), equivalent to [v2 `etcdctl exec-watch`](https://github.com/etcd-io/etcd/issues/8814).
- - Make `etcdctl watch -- [exec-command]` set environmental variables [`ETCD_WATCH_REVISION`, `ETCD_WATCH_EVENT_TYPE`, `ETCD_WATCH_KEY`, `ETCD_WATCH_VALUE`](https://github.com/etcd-io/etcd/pull/9142) for each event.
-- Support [`etcdctl watch` with environmental variables `ETCDCTL_WATCH_KEY` and `ETCDCTL_WATCH_RANGE_END`](https://github.com/etcd-io/etcd/pull/9142).
-- Enable [`clientv3.WithRequireLeader(context.Context)` for `watch`](https://github.com/etcd-io/etcd/pull/8672) command.
-- Print [`"del"` instead of `"delete"`](https://github.com/etcd-io/etcd/pull/8297) in `txn` interactive mode.
-- Print [`ETCD_INITIAL_ADVERTISE_PEER_URLS` in `member add`](https://github.com/etcd-io/etcd/pull/8332).
-- Fix [`etcdctl snapshot status` to not modify snapshot file](https://github.com/etcd-io/etcd/pull/8815).
- - 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..."`
-
-### etcdctl v3
-
-- Handle [empty key permission](https://github.com/etcd-io/etcd/pull/8514) in `etcdctl`.
-
-### etcdctl v2
-
-- Add [`etcdctl backup --with-v3`](https://github.com/etcd-io/etcd/pull/8479) flag.
-
-### gRPC Proxy
-
-- Add [`grpc-proxy start --experimental-leasing-prefix`](https://github.com/etcd-io/etcd/pull/8341) flag.
- - For disconnected linearized reads.
- - Based on [V system leasing](https://github.com/etcd-io/etcd/issues/6065).
- - See ["Disconnected consistent reads with etcd" blog post](https://coreos.com/blog/coreos-labs-disconnected-consistent-reads-with-etcd).
-- Add [`grpc-proxy start --experimental-serializable-ordering`](https://github.com/etcd-io/etcd/pull/8315) flag.
- - To ensure serializable reads have monotonically increasing store revisions across endpoints.
-- Add [`grpc-proxy start --metrics-addr`](https://github.com/etcd-io/etcd/pull/8242) flag for an additional `/metrics` endpoint.
- - Set `--metrics-addr=http://[HOST]:9379` to serve `/metrics` in insecure port 9379.
-- Serve [`/health` endpoint in grpc-proxy](https://github.com/etcd-io/etcd/pull/8322).
-- Add [`grpc-proxy start --debug`](https://github.com/etcd-io/etcd/pull/8994) flag.
-- Add [`grpc-proxy start --max-send-bytes`](https://github.com/etcd-io/etcd/pull/9250) flag to [configure maximum client request size](https://github.com/etcd-io/etcd/issues/7923).
-- Add [`grpc-proxy start --max-recv-bytes`](https://github.com/etcd-io/etcd/pull/9250) flag to [configure maximum client request size](https://github.com/etcd-io/etcd/issues/7923).
-- Fix [Snapshot API error handling](https://github.com/etcd-io/etcd/commit/dbd16d52fbf81e5fd806d21ff5e9148d5bf203ab).
-- Fix [KV API `PrevKv` flag handling](https://github.com/etcd-io/etcd/pull/8366).
-- Fix [KV API `KeysOnly` flag handling](https://github.com/etcd-io/etcd/pull/8552).
-
-### gRPC gateway
-
-- Replace [gRPC gateway](https://github.com/grpc-ecosystem/grpc-gateway) endpoint `/v3alpha` with [`/v3beta`](https://github.com/etcd-io/etcd/pull/8880).
- - To deprecate [`/v3alpha`](https://github.com/etcd-io/etcd/issues/8125) 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 ["authorization" token](https://github.com/etcd-io/etcd/pull/7999).
-- Support [websocket for bi-directional streams](https://github.com/etcd-io/etcd/pull/8257).
- - Fix [`Watch` API with gRPC gateway](https://github.com/etcd-io/etcd/issues/8237).
-- Upgrade gRPC gateway to [v1.3.0](https://github.com/etcd-io/etcd/issues/8838).
-
-### etcd server
-
-- Fix [backend database in-memory index corruption](https://github.com/etcd-io/etcd/pull/8127) issue on restore (only 3.2.0 is affected).
-- Fix [watch restore from snapshot](https://github.com/etcd-io/etcd/pull/8427).
-- Fix [`mvcc/backend.defragdb` nil-pointer dereference on create bucket failure](https://github.com/etcd-io/etcd/pull/9119).
-- Fix [server crash](https://github.com/etcd-io/etcd/pull/8010) on [invalid transaction request from gRPC gateway](https://github.com/etcd-io/etcd/issues/7889).
-- Prevent [server panic from member update/add](https://github.com/etcd-io/etcd/pull/9174) with [wrong scheme URLs](https://github.com/etcd-io/etcd/issues/9173).
-- Make [peer dial timeout longer](https://github.com/etcd-io/etcd/pull/8599).
- - See [coreos/etcd-operator#1300](https://github.com/etcd-io/etcd-operator/issues/1300) for more detail.
-- Make server [wait up to request time-out](https://github.com/etcd-io/etcd/pull/8267) with [pending RPCs](https://github.com/etcd-io/etcd/issues/8224).
-- Fix [`grpc.Server` panic on `GracefulStop`](https://github.com/etcd-io/etcd/pull/8987) with [TLS-enabled server](https://github.com/etcd-io/etcd/issues/8916).
-- Fix ["multiple peer URLs cannot start" issue](https://github.com/etcd-io/etcd/issues/8383).
-- Fix server-side auth so [concurrent auth operations do not return old revision error](https://github.com/etcd-io/etcd/pull/8442).
-- Handle [WAL renaming failure on Windows](https://github.com/etcd-io/etcd/pull/8286).
-- Upgrade [`coreos/go-systemd`](https://github.com/coreos/go-systemd/releases) to `v15` (see https://github.com/coreos/go-systemd/releases/tag/v15).
-- [Put back `/v2/machines`](https://github.com/etcd-io/etcd/pull/8062) endpoint for python-etcd wrapper.
-
-### client v2
-
-- [Fail-over v2 client](https://github.com/etcd-io/etcd/pull/8519) to next endpoint on [oneshot failure](https://github.com/etcd-io/etcd/issues/8515).
-
-### Package `raft`
-
-- Add [non-voting member](https://github.com/etcd-io/etcd/pull/8751).
- - To implement [Raft thesis 4.2.1 Catching up new servers](https://github.com/etcd-io/etcd/issues/8568).
- - `Learner` node does not vote or promote itself.
-
-### Other
-
-- Support previous two minor versions (see our [new release policy](https://github.com/etcd-io/etcd/pull/8805)).
-- `v3.3.x` is the last release cycle that supports `ACI`.
- - [AppC was officially suspended](https://github.com/appc/spec#-disclaimer-), as of late 2016.
- - [`acbuild`](https://github.com/containers/build#this-project-is-currently-unmaintained) is not maintained anymore.
- - `*.aci` files won't be available from etcd v3.4 release.
-- Add container registry [`gcr.io/etcd-development/etcd`](https://gcr.io/etcd-development/etcd).
- - [quay.io/coreos/etcd](https://quay.io/coreos/etcd) is still supported as secondary.
-
-### Go
-
-- Require [*Go 1.9+*](https://github.com/etcd-io/etcd/issues/6174).
-- Compile with [*Go 1.9.3*](https://golang.org/doc/devel/release.html#go1.9).
-- Deprecate [`golang.org/x/net/context`](https://github.com/etcd-io/etcd/pull/8511).
-
-
-
-
diff --git a/etcd-fix/CHANGELOG-3.4.md b/etcd-fix/CHANGELOG-3.4.md
deleted file mode 100644
index f6a6047..0000000
--- a/etcd-fix/CHANGELOG-3.4.md
+++ /dev/null
@@ -1,994 +0,0 @@
-
-
-Previous change logs can be found at [CHANGELOG-3.3](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md).
-
-
-The minimum recommended etcd versions to run in **production** are 3.2.28+, 3.3.18+, and 3.4.2+.
-
-
-
-
-
-## v3.4.14 (2020-11-25)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.13...v3.4.14) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### Package `clientv3`
-
-- Fix [auth token invalid after watch reconnects](https://github.com/etcd-io/etcd/pull/12264). Get AuthToken automatically when clientConn is ready.
-
-### etcd server
-
-- [Fix server panic](https://github.com/etcd-io/etcd/pull/12288) when force-new-cluster flag is enabled in a cluster which had learner node.
-
-### Package `netutil`
-
-- Remove [`netutil.DropPort/RecoverPort/SetLatency/RemoveLatency`](https://github.com/etcd-io/etcd/pull/12491).
- - 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.
-
-### `tools/etcd-dump-metrics`
-
-- Implement [input validation to prevent arbitrary shell invocation](https://github.com/etcd-io/etcd/pull/12491).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.13](https://github.com/etcd-io/etcd/releases/tag/v3.4.13) (2020-8-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.12...v3.4.13) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### Security
-
-- A [log warning](https://github.com/etcd-io/etcd/pull/12242) is added when etcd use any existing directory that has a permission different than 700 on Linux and 777 on Windows.
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.12](https://github.com/etcd-io/etcd/releases/tag/v3.4.12) (2020-08-19)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.11...v3.4.12) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### etcd server
-
-- Fix [server panic in slow writes warnings](https://github.com/etcd-io/etcd/issues/12197).
- - Fixed via [PR#12238](https://github.com/etcd-io/etcd/pull/12238).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-
-
-## [v3.4.11](https://github.com/etcd-io/etcd/releases/tag/v3.4.11) (2020-08-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.10...v3.4.11) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### etcd server
-
-- Improve [`runtime.FDUsage` call pattern to reduce objects malloc of Memory Usage and CPU Usage](https://github.com/etcd-io/etcd/pull/11986).
-- Add [`etcd --experimental-watch-progress-notify-interval`](https://github.com/etcd-io/etcd/pull/12216) flag to make watch progress notify interval configurable.
-
-### Package `clientv3`
-
-- Remove [excessive watch cancel logging messages](https://github.com/etcd-io/etcd/pull/12187).
- - See [kubernetes/kubernetes#93450](https://github.com/kubernetes/kubernetes/issues/93450).
-
-### Package `runtime`
-
-- Optimize [`runtime.FDUsage` by removing unnecessary sorting](https://github.com/etcd-io/etcd/pull/12214).
-
-### Metrics, Monitoring
-
-- Add [`os_fd_used` and `os_fd_limit` to monitor current OS file descriptors](https://github.com/etcd-io/etcd/pull/12214).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-
-
-
-
-## [v3.4.10](https://github.com/etcd-io/etcd/releases/tag/v3.4.10) (2020-07-16)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.9...v3.4.10) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### Package `etcd server`
-
-- Add [`--unsafe-no-fsync`](https://github.com/etcd-io/etcd/pull/11946) 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 [etcd --auth-token-ttl](https://github.com/etcd-io/etcd/pull/11980) flag to customize `simpleTokenTTL` settings.
-- Improve [runtime.FDUsage objects malloc of Memory Usage and CPU Usage](https://github.com/etcd-io/etcd/pull/11986).
-- Improve [mvcc.watchResponse channel Memory Usage](https://github.com/etcd-io/etcd/pull/11987).
-- Fix [`int64` convert panic in raft logger](https://github.com/etcd-io/etcd/pull/12106).
- - Fix [kubernetes/kubernetes#91937](https://github.com/kubernetes/kubernetes/issues/91937).
-
-### Breaking Changes
-
-- Changed behavior on [existing dir permission](https://github.com/etcd-io/etcd/pull/11798).
- - 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.
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.9](https://github.com/etcd-io/etcd/releases/tag/v3.4.9) (2020-05-20)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.8...v3.4.9) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### Package `wal`
-
-- Add [missing CRC checksum check in WAL validate method otherwise causes panic](https://github.com/etcd-io/etcd/pull/11924).
- - See https://github.com/etcd-io/etcd/issues/11918.
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.8](https://github.com/etcd-io/etcd/releases/tag/v3.4.8) (2020-05-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.7...v3.4.8) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### `etcdctl`
-
-- Make sure [save snapshot downloads checksum for integrity checks](https://github.com/etcd-io/etcd/pull/11896).
-
-### Package `clientv3`
-
-- Make sure [save snapshot downloads checksum for integrity checks](https://github.com/etcd-io/etcd/pull/11896).
-
-### etcd server
-
-- Improve logging around snapshot send and receive.
-- [Add log when etcdserver failed to apply command](https://github.com/etcd-io/etcd/pull/11670).
-- [Fix deadlock bug in mvcc](https://github.com/etcd-io/etcd/pull/11817).
-- Fix [inconsistency between WAL and server snapshot](https://github.com/etcd-io/etcd/pull/11888).
- - 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.
-
-### Package Auth
-
-- [Fix a data corruption bug by saving consistent index](https://github.com/etcd-io/etcd/pull/11652).
-
-### Metrics, Monitoring
-
-- Add [`etcd_debugging_auth_revision`](https://github.com/etcd-io/etcd/commit/f14d2a087f7b0fd6f7980b95b5e0b945109c95f3).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.7](https://github.com/etcd-io/etcd/releases/tag/v3.4.7) (2020-04-01)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.6...v3.4.7) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### etcd server
-
-- Improve [compaction performance when latest index is greater than 1-million](https://github.com/etcd-io/etcd/pull/11734).
-
-### Package `wal`
-
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-
-### Metrics, Monitoring
-
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.6](https://github.com/etcd-io/etcd/releases/tag/v3.4.6) (2020-03-29)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.5...v3.4.6) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-### Package `lease`
-
-- Fix [memory leak in follower nodes](https://github.com/etcd-io/etcd/pull/11731).
- - https://github.com/etcd-io/etcd/issues/11495
- - https://github.com/etcd-io/etcd/issues/11730
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.5](https://github.com/etcd-io/etcd/releases/tag/v3.4.5) (2020-03-18)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.4...v3.4.5) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md).**
-
-### etcd server
-
-- Log [`[CLIENT-PORT]/health` check in server side](https://github.com/etcd-io/etcd/pull/11704).
-
-### client v3
-
-- Fix [`"hasleader"` metadata embedding](https://github.com/etcd-io/etcd/pull/11687).
- - Previously, `clientv3.WithRequireLeader(ctx)` was overwriting existing context keys.
-
-### etcdctl v3
-
-- Fix [`etcdctl member add`](https://github.com/etcd-io/etcd/pull/11638) command to prevent potential timeout.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-- Add [`etcd_server_client_requests_total` with `"type"` and `"client_api_version"` labels](https://github.com/etcd-io/etcd/pull/11687).
-
-### gRPC Proxy
-
-- Fix [`panic on error`](https://github.com/etcd-io/etcd/pull/11694) for metrics handler.
-
-### Go
-
-- Compile with [*Go 1.12.17*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.4](https://github.com/etcd-io/etcd/releases/tag/v3.4.4) (2020-02-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.3...v3.4.4) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md).**
-
-### etcd server
-
-- Fix [`wait purge file loop during shutdown`](https://github.com/etcd-io/etcd/pull/11308).
- - 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.
-- [Fix corruption bug in defrag](https://github.com/etcd-io/etcd/pull/11613).
-- Fix [quorum protection logic when promoting a learner](https://github.com/etcd-io/etcd/pull/11640).
-- Improve [peer corruption checker](https://github.com/etcd-io/etcd/pull/11621) to work when peer mTLS is enabled.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_debugging_mvcc_total_put_size_in_bytes`](https://github.com/etcd-io/etcd/pull/11374) Prometheus metric.
-- Fix bug where [etcd_debugging_mvcc_db_compaction_keys_total is always 0](https://github.com/etcd-io/etcd/pull/11400).
-
-### Auth
-
-- Fix [NoPassword check when adding user through GRPC gateway](https://github.com/etcd-io/etcd/pull/11418) ([issue#11414](https://github.com/etcd-io/etcd/issues/11414))
-- Fix bug where [some auth related messages are logged at wrong level](https://github.com/etcd-io/etcd/pull/11586)
-
-
-
-
-
-## [v3.4.3](https://github.com/etcd-io/etcd/releases/tag/v3.4.3) (2019-10-24)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.2...v3.4.3) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md).**
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Change [`etcd_cluster_version`](https://github.com/etcd-io/etcd/pull/11254) Prometheus metrics to include only major and minor version.
-
-### Go
-
-- Compile with [*Go 1.12.12*](https://golang.org/doc/devel/release.html#go1.12).
-
-
-
-
-
-## [v3.4.2](https://github.com/etcd-io/etcd/releases/tag/v3.4.2) (2019-10-11)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.1...v3.4.2) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md).**
-
-### etcdctl v3
-
-- Fix [`etcdctl member add`](https://github.com/etcd-io/etcd/pull/11194) command to prevent potential timeout.
-
-### etcdserver
-
-- Add [`tracing`](https://github.com/etcd-io/etcd/pull/11179) to range, put and compact requests in etcdserver.
-
-### Go
-
-- Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-
-### client v3
-
-- Fix [client balancer failover against multiple endpoints](https://github.com/etcd-io/etcd/pull/11184).
- - Fix ["kube-apiserver: failover on multi-member etcd cluster fails certificate check on DNS mismatch" (kubernetes#83028)](https://github.com/kubernetes/kubernetes/issues/83028).
-- Fix [IPv6 endpoint parsing in client](https://github.com/etcd-io/etcd/pull/11211).
- - Fix ["1.16: etcd client does not parse IPv6 addresses correctly when members are joining" (kubernetes#83550)](https://github.com/kubernetes/kubernetes/issues/83550).
-
-
-
-
-
-## [v3.4.1](https://github.com/etcd-io/etcd/releases/tag/v3.4.1) (2019-09-17)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0...v3.4.1) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md).**
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_debugging_mvcc_current_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-- Add [`etcd_debugging_mvcc_compact_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-
-### etcd server
-
-- Fix [secure server logging message](https://github.com/etcd-io/etcd/commit/8b053b0f44c14ac0d9f39b9b78c17c57d47966eb).
-- Remove [redundant `%` characters in file descriptor warning message](https://github.com/etcd-io/etcd/commit/d5f79adc9cea9ec8c93669526464b0aa19ed417b).
-
-### Package `embed`
-
-- Add [`embed.Config.ZapLoggerBuilder`](https://github.com/etcd-io/etcd/pull/11148) to allow creating a custom zap logger.
-
-### Dependency
-
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases) from [**`v1.23.0`**](https://github.com/grpc/grpc-go/releases/tag/v1.23.0) to [**`v1.23.1`**](https://github.com/grpc/grpc-go/releases/tag/v1.23.1).
-
-### Go
-
-- Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-
-
-
-
-
-## v3.4.0 (2019-08-30)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0...v3.4.0) and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for any breaking changes.
-
-- [v3.4.0](https://github.com/etcd-io/etcd/releases/tag/v3.4.0) (2019-08-30), see [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0-rc.4...v3.4.0).
-- [v3.4.0-rc.4](https://github.com/etcd-io/etcd/releases/tag/v3.4.0-rc.4) (2019-08-29), see [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0-rc.3...v3.4.0-rc.4).
-- [v3.4.0-rc.3](https://github.com/etcd-io/etcd/releases/tag/v3.4.0-rc.3) (2019-08-27), see [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0-rc.2...v3.4.0-rc.3).
-- [v3.4.0-rc.2](https://github.com/etcd-io/etcd/releases/tag/v3.4.0-rc.2) (2019-08-23), see [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0-rc.1...v3.4.0-rc.2).
-- [v3.4.0-rc.1](https://github.com/etcd-io/etcd/releases/tag/v3.4.0-rc.1) (2019-08-15), see [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0-rc.0...v3.4.0-rc.1).
-- [v3.4.0-rc.0](https://github.com/etcd-io/etcd/releases/tag/v3.4.0-rc.0) (2019-08-12), see [code changes](https://github.com/etcd-io/etcd/compare/v3.3.0...v3.4.0-rc.0).
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md).**
-
-### Documentation
-
-- etcd now has a new website! Please visit https://etcd.io.
-
-### Improved
-
-- Add Raft learner: [etcd#10725](https://github.com/etcd-io/etcd/pull/10725), [etcd#10727](https://github.com/etcd-io/etcd/pull/10727), [etcd#10730](https://github.com/etcd-io/etcd/pull/10730).
- - User guide: [runtime-configuration document](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/runtime-configuration.md#add-a-new-member-as-learner).
- - API change: [API reference document](https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md).
- - More details on implementation: [learner design document](https://github.com/etcd-io/etcd/blob/master/Documentation/learning/design-learner.md) and [implementation task list](https://github.com/etcd-io/etcd/issues/10537).
-- Rewrite [client balancer](https://github.com/etcd-io/etcd/pull/9860) with [new gRPC balancer interface](https://github.com/etcd-io/etcd/issues/9106).
- - Upgrade [gRPC to v1.23.0](https://github.com/etcd-io/etcd/pull/10911).
- - Improve [client balancer failover against secure endpoints](https://github.com/etcd-io/etcd/pull/10911).
- - Fix ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available" (kubernetes#72102)](https://github.com/kubernetes/kubernetes/issues/72102).
- - Fix [gRPC panic "send on closed channel](https://github.com/etcd-io/etcd/issues/9956).
- - [The new client balancer](https://github.com/etcd-io/etcd/blob/master/Documentation/learning/design-client.md) 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 [backoff on watch retries on transient errors](https://github.com/etcd-io/etcd/pull/9840).
-- Add [jitter to watch progress notify](https://github.com/etcd-io/etcd/pull/9278) to prevent [spikes in `etcd_network_client_grpc_sent_bytes_total`](https://github.com/etcd-io/etcd/issues/9246).
-- Improve [read index wait timeout warning log](https://github.com/etcd-io/etcd/pull/10026), which indicates that local node might have slow network.
-- Improve [slow request apply warning log](https://github.com/etcd-io/etcd/pull/9288).
- - e.g. `read-only range request "key:\"/a\" range_end:\"/b\" " with result "range_response_count:3 size:96" took too long (97.966µs) to execute`.
- - Redact [request value field](https://github.com/etcd-io/etcd/pull/9822).
- - Provide [response size](https://github.com/etcd-io/etcd/pull/9826).
-- Improve ["became inactive" warning log](https://github.com/etcd-io/etcd/pull/10024), which indicates message send to a peer failed.
-- Improve [TLS setup error logging](https://github.com/etcd-io/etcd/pull/9518) to help debug [TLS-enabled cluster configuring issues](https://github.com/etcd-io/etcd/issues/9400).
-- Improve [long-running concurrent read transactions under light write workloads](https://github.com/etcd-io/etcd/pull/9296).
- - Previously, periodic commit on pending writes blocks incoming read transactions, even if there is no pending write.
- - Now, periodic commit operation does not block concurrent read transactions, thus improves long-running read transaction performance.
-- Make [backend read transactions fully concurrent](https://github.com/etcd-io/etcd/pull/10523).
- - Previously, ongoing long-running read transactions block writes and future reads.
- - With this change, write throughput is increased by 70% and P99 write latency is reduced by 90% in the presence of long-running reads.
-- Improve [Raft Read Index timeout warning messages](https://github.com/etcd-io/etcd/pull/9897).
-- Adjust [election timeout on server restart](https://github.com/etcd-io/etcd/pull/9415) to reduce [disruptive rejoining servers](https://github.com/etcd-io/etcd/issues/9333).
- - 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.
-- Add [Raft Pre-Vote feature](https://github.com/etcd-io/etcd/pull/9352) to reduce [disruptive rejoining servers](https://github.com/etcd-io/etcd/issues/9333).
- - For instance, a flaky(or rejoining) member may drop in and out, and start campaign. This member will end up with a higher term, and ignore all incoming messages with lower term. In this case, a new leader eventually need to get elected, thus disruptive to cluster availability. Raft implements Pre-Vote phase to prevent this kind of disruptions. If enabled, Raft runs an additional phase of election to check if pre-candidate can get enough votes to win an election.
-- Adjust [periodic compaction retention window](https://github.com/etcd-io/etcd/pull/9485).
- - 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=24h` automatically `Compact` with 24-hour retention windown for every 2.4-hour. Now, `Compact` happens for every 1-hour.
- - 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.
- - 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.
- - Futhermore, 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.
-- Improve [lease expire/revoke operation performance](https://github.com/etcd-io/etcd/pull/9418), address [lease scalability issue](https://github.com/etcd-io/etcd/issues/9496).
-- Make [Lease `Lookup` non-blocking with concurrent `Grant`/`Revoke`](https://github.com/etcd-io/etcd/pull/9229).
-- Make etcd server return `raft.ErrProposalDropped` on internal Raft proposal drop in [v3 applier](https://github.com/etcd-io/etcd/pull/9549) and [v2 applier](https://github.com/etcd-io/etcd/pull/9558).
- - e.g. a node is removed from cluster, or [`raftpb.MsgProp` arrives at current leader while there is an ongoing leadership transfer](https://github.com/etcd-io/etcd/issues/8975).
-- Add [`snapshot`](https://github.com/etcd-io/etcd/pull/9118) package for easier snapshot workflow (see [`godoc.org/github.com/etcd/clientv3/snapshot`](https://godoc.org/github.com/etcd-io/etcd/clientv3/snapshot) for more).
-- Improve [functional tester](https://github.com/etcd-io/etcd/tree/master/functional) coverage: [proxy layer to run network fault tests in CI](https://github.com/etcd-io/etcd/pull/9081), [TLS is enabled both for server and client](https://github.com/etcd-io/etcd/pull/9534), [liveness mode](https://github.com/etcd-io/etcd/issues/9230), [shuffle test sequence](https://github.com/etcd-io/etcd/issues/9381), [membership reconfiguration failure cases](https://github.com/etcd-io/etcd/pull/9564), [disastrous quorum loss and snapshot recover from a seed member](https://github.com/etcd-io/etcd/pull/9565), [embedded etcd](https://github.com/etcd-io/etcd/pull/9572).
-- Improve [index compaction blocking](https://github.com/etcd-io/etcd/pull/9511) by using a copy on write clone to avoid holding the lock for the traversal of the entire index.
-- Update [JWT methods](https://github.com/etcd-io/etcd/pull/9883) to allow for use of any supported signature method/algorithm.
-- Add [Lease checkpointing](https://github.com/etcd-io/etcd/pull/9924) to persist remaining TTLs to the consensus log periodically so that long lived leases progress toward expiry in the presence of leader elections and server restarts.
- - Enabled by experimental flag "--experimental-enable-lease-checkpoint".
-- Add [gRPC interceptor for debugging logs](https://github.com/etcd-io/etcd/pull/9990); enable `etcd --debug` flag to see per-request debug information.
-- Add [consistency check in snapshot status](https://github.com/etcd-io/etcd/pull/10109). If consistency check on snapshot file fails, `snapshot status` returns `"snapshot file integrity check failed..."` error.
-- Add [`Verify` function to perform corruption check on WAL contents](https://github.com/etcd-io/etcd/pull/10603).
-- Improve [heartbeat send failure logging](https://github.com/etcd-io/etcd/pull/10663).
-- Support [users with no password](https://github.com/etcd-io/etcd/pull/9817) for reducing security risk introduced by leaked password. The users can only be authenticated with `CommonName` based auth.
-- Add `etcd --experimental-peer-skip-client-san-verification` to [skip verification of peer client address](https://github.com/etcd-io/etcd/pull/10524).
-- Add `etcd --experimental-compaction-batch-limit` to [sets the maximum revisions deleted in each compaction batch](https://github.com/etcd-io/etcd/pull/11034).
-- Reduced default compaction batch size from 10k revisions to 1k revisions to improve p99 latency during compactions and reduced wait between compactions from 100ms to 10ms.
-
-### Breaking Changes
-
-- Rewrite [client balancer](https://github.com/etcd-io/etcd/pull/9860) with [new gRPC balancer interface](https://github.com/etcd-io/etcd/issues/9106).
- - Upgrade [gRPC to v1.23.0](https://github.com/etcd-io/etcd/pull/10911).
- - Improve [client balancer failover against secure endpoints](https://github.com/etcd-io/etcd/pull/10911).
- - Fix ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available" (kubernetes#72102)](https://github.com/kubernetes/kubernetes/issues/72102).
- - Fix [gRPC panic "send on closed channel](https://github.com/etcd-io/etcd/issues/9956).
- - [The new client balancer](https://github.com/etcd-io/etcd/blob/master/Documentation/learning/design-client.md) 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 [*Go 1.12+*](https://github.com/etcd-io/etcd/pull/10045).
- - Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-- Migrate dependency management tool from `glide` to [Go module](https://github.com/etcd-io/etcd/pull/10063).
- - <= 3.3 puts `vendor` directory under `cmd/vendor` directory to [prevent conflicting transitive dependencies](https://github.com/etcd-io/etcd/issues/4913).
- - 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` [release container](https://console.cloud.google.com/gcr/images/etcd-development/GLOBAL/etcd) tag.
- - **`docker pull gcr.io/etcd-development/etcd:latest` would not be up-to-date**.
-- Deprecated [minor](https://semver.org/) version [release container](https://console.cloud.google.com/gcr/images/etcd-development/GLOBAL/etcd) tags.
- - `docker pull gcr.io/etcd-development/etcd:v3.3` would still work.
- - **`docker pull gcr.io/etcd-development/etcd:v3.4` would not work**.
- - Use **`docker pull gcr.io/etcd-development/etcd:v3.4.x`** instead, with the exact patch version.
-- Deprecated [ACIs from official release](https://github.com/etcd-io/etcd/pull/9059).
- - [AppC was officially suspended](https://github.com/appc/spec#-disclaimer-), as of late 2016.
- - [`acbuild`](https://github.com/containers/build#this-project-is-currently-unmaintained) is not maintained anymore.
- - `*.aci` files are not available from `v3.4` release.
-- Move [`"github.com/coreos/etcd"`](https://github.com/etcd-io/etcd/issues/9965) to [`"github.com/etcd-io/etcd"`](https://github.com/etcd-io/etcd/issues/9965).
- - Change import path to `"go.etcd.io/etcd"`.
- - e.g. `import "go.etcd.io/etcd/raft"`.
-- Make [`ETCDCTL_API=3 etcdctl` default](https://github.com/etcd-io/etcd/issues/9600).
- - Now, `etcdctl set foo bar` must be `ETCDCTL_API=2 etcdctl set foo bar`.
- - Now, `ETCDCTL_API=3 etcdctl put foo bar` could be just `etcdctl put foo bar`.
-- Make [`etcd --enable-v2=false` default](https://github.com/etcd-io/etcd/pull/10935).
-- Make [`embed.DefaultEnableV2` `false` default](https://github.com/etcd-io/etcd/pull/10935).
-- **Deprecated `etcd --ca-file` flag**. Use [`etcd --trusted-ca-file`](https://github.com/etcd-io/etcd/pull/9470) instead (`etcd --ca-file` flag has been marked deprecated since v2.1).
-- **Deprecated `etcd --peer-ca-file` flag**. Use [`etcd --peer-trusted-ca-file`](https://github.com/etcd-io/etcd/pull/9470) instead (`etcd --peer-ca-file` flag has been marked deprecated since v2.1).
-- **Deprecated `pkg/transport.TLSInfo.CAFile` field**. Use [`pkg/transport.TLSInfo.TrustedCAFile`](https://github.com/etcd-io/etcd/pull/9470) instead (`CAFile` field has been marked deprecated since v2.1).
-- Exit on [empty hosts in advertise URLs](https://github.com/etcd-io/etcd/pull/8786).
- - Address [advertise client URLs accepts empty hosts](https://github.com/etcd-io/etcd/issues/8379).
- - e.g. exit with error on `--advertise-client-urls=http://:2379`.
- - e.g. exit with error on `--initial-advertise-peer-urls=http://:2380`.
-- Exit on [shadowed environment variables](https://github.com/etcd-io/etcd/pull/9382).
- - Address [error on shadowed environment variables](https://github.com/etcd-io/etcd/issues/8380).
- - e.g. exit with error on `ETCD_NAME=abc etcd --name=def`.
- - e.g. exit with error on `ETCD_INITIAL_CLUSTER_TOKEN=abc etcd --initial-cluster-token=def`.
- - e.g. exit with error on `ETCDCTL_ENDPOINTS=abc.com ETCDCTL_API=3 etcdctl endpoint health --endpoints=def.com`.
-- Change [`etcdserverpb.AuthRoleRevokePermissionRequest/key,range_end` fields type from `string` to `bytes`](https://github.com/etcd-io/etcd/pull/9433).
-- Deprecating `etcd_debugging_mvcc_db_total_size_in_bytes` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819) instead.
-- Deprecating `etcd_debugging_mvcc_put_total` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_put_total`](https://github.com/etcd-io/etcd/pull/10962) instead.
-- Deprecating `etcd_debugging_mvcc_delete_total` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_delete_total`](https://github.com/etcd-io/etcd/pull/10962) instead.
-- Deprecating `etcd_debugging_mvcc_range_total` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_range_total`](https://github.com/etcd-io/etcd/pull/10968) instead.
-- Deprecating `etcd_debugging_mvcc_txn_total`Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_txn_total`](https://github.com/etcd-io/etcd/pull/10968) instead.
-- Rename `etcdserver.ServerConfig.SnapCount` field to `etcdserver.ServerConfig.SnapshotCount`, to be consistent with the flag name `etcd --snapshot-count`.
-- Rename `embed.Config.SnapCount` field to [`embed.Config.SnapshotCount`](https://github.com/etcd-io/etcd/pull/9745), to be consistent with the flag name `etcd --snapshot-count`.
-- Change [`embed.Config.CorsInfo` in `*cors.CORSInfo` type to `embed.Config.CORS` in `map[string]struct{}` type](https://github.com/etcd-io/etcd/pull/9490).
-- Deprecated [`embed.Config.SetupLogging`](https://github.com/etcd-io/etcd/pull/9572).
- - Now logger is set up automatically based on [`embed.Config.Logger`, `embed.Config.LogOutputs`, `embed.Config.Debug` fields](https://github.com/etcd-io/etcd/pull/9572).
-- Rename [`etcd --log-output` to `etcd --log-outputs`](https://github.com/etcd-io/etcd/pull/9624) to support multiple log outputs.
- - **`etcd --log-output`** will be deprecated in v3.5.
-- Rename [**`embed.Config.LogOutput`** to **`embed.Config.LogOutputs`**](https://github.com/etcd-io/etcd/pull/9624) to support multiple log outputs.
-- Change [**`embed.Config.LogOutputs`** type from `string` to `[]string`](https://github.com/etcd-io/etcd/pull/9579) to support multiple log outputs.
- - Now that `etcd --log-outputs` accepts multiple writers, etcd configuration YAML file `log-outputs` field must be changed to `[]string` type.
- - Previously, `etcd --config-file etcd.config.yaml` can have `log-outputs: default` field, now must be `log-outputs: [default]`.
-- Deprecating [`etcd --debug`](https://github.com/etcd-io/etcd/pull/10947) flag. Use `etcd --log-level=debug` flag instead.
- - v3.5 will deprecate `etcd --debug` flag in favor of `etcd --log-level=debug`.
-- Change v3 `etcdctl snapshot` exit codes with [`snapshot` package](https://github.com/etcd-io/etcd/pull/9118/commits/df689f4280e1cce4b9d61300be13ca604d41670a).
- - Exit on error with exit code 1 (no more exit code 5 or 6 on `snapshot save/restore` commands).
-- Deprecated [`grpc.ErrClientConnClosing`](https://github.com/etcd-io/etcd/pull/10981).
- - `clientv3` and `proxy/grpcproxy` now does not return `grpc.ErrClientConnClosing`.
- - `grpc.ErrClientConnClosing` has been [deprecated in gRPC >= 1.10](https://github.com/grpc/grpc-go/pull/1854).
- - Use `clientv3.IsConnCanceled(error)` or `google.golang.org/grpc/status.FromError(error)` instead.
-- Deprecated [gRPC gateway](https://github.com/grpc-ecosystem/grpc-gateway) endpoint `/v3beta` with [`/v3`](https://github.com/etcd-io/etcd/pull/9298).
- - Deprecated [`/v3alpha`](https://github.com/etcd-io/etcd/pull/9298).
- - To deprecate [`/v3beta`](https://github.com/etcd-io/etcd/issues/9189) in v3.5.
- - In v3.4, `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` still works as a fallback to `curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'`, but `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` won't work in v3.5. Use `curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` instead.
-- Change [`wal` package function signatures](https://github.com/etcd-io/etcd/pull/9572) to support [structured logger and logging to file](https://github.com/etcd-io/etcd/issues/9438) in server-side.
- - Previously, `Open(dirpath string, snap walpb.Snapshot) (*WAL, error)`, now `Open(lg *zap.Logger, dirpath string, snap walpb.Snapshot) (*WAL, error)`.
- - Previously, `OpenForRead(dirpath string, snap walpb.Snapshot) (*WAL, error)`, now `OpenForRead(lg *zap.Logger, dirpath string, snap walpb.Snapshot) (*WAL, error)`.
- - Previously, `Repair(dirpath string) bool`, now `Repair(lg *zap.Logger, dirpath string) bool`.
- - Previously, `Create(dirpath string, metadata []byte) (*WAL, error)`, now `Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error)`.
-- Remove [`pkg/cors` package](https://github.com/etcd-io/etcd/pull/9490).
-- Move internal packages to `etcdserver`.
- - `"github.com/coreos/etcd/alarm"` to `"go.etcd.io/etcd/etcdserver/api/v3alarm"`.
- - `"github.com/coreos/etcd/compactor"` to `"go.etcd.io/etcd/etcdserver/api/v3compactor"`.
- - `"github.com/coreos/etcd/discovery"` to `"go.etcd.io/etcd/etcdserver/api/v2discovery"`.
- - `"github.com/coreos/etcd/etcdserver/auth"` to `"go.etcd.io/etcd/etcdserver/api/v2auth"`.
- - `"github.com/coreos/etcd/etcdserver/membership"` to `"go.etcd.io/etcd/etcdserver/api/membership"`.
- - `"github.com/coreos/etcd/etcdserver/stats"` to `"go.etcd.io/etcd/etcdserver/api/v2stats"`.
- - `"github.com/coreos/etcd/error"` to `"go.etcd.io/etcd/etcdserver/api/v2error"`.
- - `"github.com/coreos/etcd/rafthttp"` to `"go.etcd.io/etcd/etcdserver/api/rafthttp"`.
- - `"github.com/coreos/etcd/snap"` to `"go.etcd.io/etcd/etcdserver/api/snap"`.
- - `"github.com/coreos/etcd/store"` to `"go.etcd.io/etcd/etcdserver/api/v2store"`.
-- Change [snapshot file permissions](https://github.com/etcd-io/etcd/pull/9977): On Linux, the snapshot file changes from readable by all (mode 0644) to readable by the user only (mode 0600).
-- Change [`pkg/adt.IntervalTree` from `struct` to `interface`](https://github.com/etcd-io/etcd/pull/10959).
- - See [`pkg/adt` README](https://github.com/etcd-io/etcd/tree/master/pkg/adt) and [`pkg/adt` godoc](https://godoc.org/go.etcd.io/etcd/pkg/adt).
-- Release branch `/version` defines version `3.4.x-pre`, instead of `3.4.y+git`.
- - Use `3.4.5-pre`, instead of `3.4.4+git`.
-
-### Dependency
-
-- Upgrade [`github.com/coreos/bbolt`](https://github.com/etcd-io/bbolt/releases) from [**`v1.3.1-coreos.6`**](https://github.com/etcd-io/bbolt/releases/tag/v1.3.1-coreos.6) to [`go.etcd.io/bbolt`](https://github.com/etcd-io/bbolt/releases) [**`v1.3.3`**](https://github.com/etcd-io/bbolt/releases/tag/v1.3.3).
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases) from [**`v1.7.5`**](https://github.com/grpc/grpc-go/releases/tag/v1.7.5) to [**`v1.23.0`**](https://github.com/grpc/grpc-go/releases/tag/v1.23.0).
-- Migrate [`github.com/ugorji/go/codec`](https://github.com/ugorji/go/releases) to [**`github.com/json-iterator/go`**](https://github.com/json-iterator/go), to [regenerate v2 `client`](https://github.com/etcd-io/etcd/pull/9494) (See [#10667](https://github.com/etcd-io/etcd/pull/10667) for more).
-- Migrate [`github.com/ghodss/yaml`](https://github.com/ghodss/yaml/releases) to [**`sigs.k8s.io/yaml`**](https://github.com/kubernetes-sigs/yaml) (See [#10687](https://github.com/etcd-io/etcd/pull/10687) for more).
-- Upgrade [`golang.org/x/crypto`](https://github.com/golang/crypto) from [**`crypto@9419663f5`**](https://github.com/golang/crypto/commit/9419663f5a44be8b34ca85f08abc5fe1be11f8a3) to [**`crypto@0709b304e793`**](https://github.com/golang/crypto/commit/0709b304e793a5edb4a2c0145f281ecdc20838a4).
-- Upgrade [`golang.org/x/net`](https://github.com/golang/net) from [**`net@66aacef3d`**](https://github.com/golang/net/commit/66aacef3dd8a676686c7ae3716979581e8b03c47) to [**`net@adae6a3d119a`**](https://github.com/golang/net/commit/adae6a3d119ae4890b46832a2e88a95adc62b8e7).
-- Upgrade [`golang.org/x/sys`](https://github.com/golang/sys) from [**`sys@ebfc5b463`**](https://github.com/golang/sys/commit/ebfc5b4631820b793c9010c87fd8fef0f39eb082) to [**`sys@c7b8b68b1456`**](https://github.com/golang/sys/commit/c7b8b68b14567162c6602a7c5659ee0f26417c18).
-- Upgrade [`golang.org/x/text`](https://github.com/golang/text) from [**`text@b19bf474d`**](https://github.com/golang/text/commit/b19bf474d317b857955b12035d2c5acb57ce8b01) to [**`v0.3.0`**](https://github.com/golang/text/releases/tag/v0.3.0).
-- Upgrade [`golang.org/x/time`](https://github.com/golang/time) from [**`time@c06e80d93`**](https://github.com/golang/time/commit/c06e80d9300e4443158a03817b8a8cb37d230320) to [**`time@fbb02b229`**](https://github.com/golang/time/commit/fbb02b2291d28baffd63558aa44b4b56f178d650).
-- Upgrade [`github.com/golang/protobuf`](https://github.com/golang/protobuf/releases) from [**`golang/protobuf@1e59b77b5`**](https://github.com/golang/protobuf/commit/1e59b77b52bf8e4b449a57e6f79f21226d571845) to [**`v1.3.2`**](https://github.com/golang/protobuf/releases/tag/v1.3.2).
-- Upgrade [`gopkg.in/yaml.v2`](https://github.com/go-yaml/yaml/releases) from [**`yaml@cd8b52f82`**](https://github.com/go-yaml/yaml/commit/cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b) to [**`yaml@5420a8b67`**](https://github.com/go-yaml/yaml/commit/5420a8b6744d3b0345ab293f6fcba19c978f1183).
-- Upgrade [`github.com/dgrijalva/jwt-go`](https://github.com/dgrijalva/jwt-go/releases) from [**`v3.0.0`**](https://github.com/dgrijalva/jwt-go/releases/tag/v3.0.0) to [**`v3.2.0`**](https://github.com/dgrijalva/jwt-go/releases/tag/v3.2.0).
-- Upgrade [`github.com/soheilhy/cmux`](https://github.com/soheilhy/cmux/releases) from [**`v0.1.3`**](https://github.com/soheilhy/cmux/releases/tag/v0.1.3) to [**`v0.1.4`**](https://github.com/soheilhy/cmux/releases/tag/v0.1.4).
-- Upgrade [`github.com/google/btree`](https://github.com/google/btree/releases) from [**`google/btree@925471ac9`**](https://github.com/google/btree/commit/925471ac9e2131377a91e1595defec898166fe49) to [**`v1.0.0`**](https://github.com/google/btree/releases/tag/v1.0.0).
-- Upgrade [`github.com/spf13/cobra`](https://github.com/spf13/cobra/releases) from [**`spf13/cobra@1c44ec8d3`**](https://github.com/spf13/cobra/commit/1c44ec8d3f1552cac48999f9306da23c4d8a288b) to [**`v0.0.3`**](https://github.com/spf13/cobra/releases/tag/v0.0.3).
-- Upgrade [`github.com/spf13/pflag`](https://github.com/spf13/pflag/releases) from [**`v1.0.0`**](https://github.com/spf13/pflag/releases/tag/v1.0.0) to [**`spf13/pflag@1ce0cc6db`**](https://github.com/spf13/pflag/commit/1ce0cc6db4029d97571db82f85092fccedb572ce).
-- Upgrade [`github.com/coreos/go-systemd`](https://github.com/coreos/go-systemd/releases) from [**`v15`**](https://github.com/coreos/go-systemd/releases/tag/v15) to [**`v17`**](https://github.com/coreos/go-systemd/releases/tag/v17).
-- Upgrade [`github.com/prometheus/client_golang`](https://github.com/prometheus/client_golang/releases) from [**``prometheus/client_golang@5cec1d042``**](https://github.com/prometheus/client_golang/commit/5cec1d0429b02e4323e042eb04dafdb079ddf568) to [**`v1.0.0`**](https://github.com/prometheus/client_golang/releases/tag/v1.0.0).
-- Upgrade [`github.com/grpc-ecosystem/go-grpc-prometheus`](https://github.com/grpc-ecosystem/go-grpc-prometheus/releases) from [**``grpc-ecosystem/go-grpc-prometheus@0dafe0d49``**](https://github.com/grpc-ecosystem/go-grpc-prometheus/commit/0dafe0d496ea71181bf2dd039e7e3f44b6bd11a7) to [**`v1.2.0`**](https://github.com/grpc-ecosystem/go-grpc-prometheus/releases/tag/v1.2.0).
-- Upgrade [`github.com/grpc-ecosystem/grpc-gateway`](https://github.com/grpc-ecosystem/grpc-gateway/releases) from [**`v1.3.1`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.3.1) to [**`v1.4.1`**](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.4.1).
-- Migrate [`github.com/kr/pty`](https://github.com/kr/pty/releases) to [**`github.com/creack/pty`**](https://github.com/creack/pty/releases/tag/v1.1.7), as the later has replaced the original module.
-- Upgrade [`github.com/gogo/protobuf`](https://github.com/gogo/protobuf/releases) from [**`v1.0.0`**](https://github.com/gogo/protobuf/releases/tag/v1.0.0) to [**`v1.2.1`**](https://github.com/gogo/protobuf/releases/tag/v1.2.1).
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Add [`etcd_snap_db_fsync_duration_seconds_count`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_snap_db_save_total_duration_seconds_bucket`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_send_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_success`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_failures`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_total_duration_seconds`](https://github.com/etcd-io/etcd/pull/9997) Prometheus metric.
-- Add [`etcd_network_active_peers`](https://github.com/etcd-io/etcd/pull/9762) Prometheus metric.
- - Let's say `"7339c4e5e833c029"` server `/metrics` returns `etcd_network_active_peers{Local="7339c4e5e833c029",Remote="729934363faa4a24"} 1` and `etcd_network_active_peers{Local="7339c4e5e833c029",Remote="b548c2511513015"} 1`. This indicates that the local node `"7339c4e5e833c029"` currently has two active remote peers `"729934363faa4a24"` and `"b548c2511513015"` in a 3-node cluster. If the node `"b548c2511513015"` is down, the local node `"7339c4e5e833c029"` will show `etcd_network_active_peers{Local="7339c4e5e833c029",Remote="729934363faa4a24"} 1` and `etcd_network_active_peers{Local="7339c4e5e833c029",Remote="b548c2511513015"} 0`.
-- Add [`etcd_network_disconnected_peers_total`](https://github.com/etcd-io/etcd/pull/9762) Prometheus metric.
- - If a remote peer `"b548c2511513015"` is down, the local node `"7339c4e5e833c029"` server `/metrics` would return `etcd_network_disconnected_peers_total{Local="7339c4e5e833c029",Remote="b548c2511513015"} 1`, while active peer metrics will show `etcd_network_active_peers{Local="7339c4e5e833c029",Remote="729934363faa4a24"} 1` and `etcd_network_active_peers{Local="7339c4e5e833c029",Remote="b548c2511513015"} 0`.
-- Add [`etcd_network_server_stream_failures_total`](https://github.com/etcd-io/etcd/pull/9760) Prometheus metric.
- - e.g. `etcd_network_server_stream_failures_total{API="lease-keepalive",Type="receive"} 1`
- - e.g. `etcd_network_server_stream_failures_total{API="watch",Type="receive"} 1`
-- Improve [`etcd_network_peer_round_trip_time_seconds`](https://github.com/etcd-io/etcd/pull/10155) Prometheus metric to track leader heartbeats.
- - Previously, it only samples the TCP connection for snapshot messages.
-- Increase [`etcd_network_peer_round_trip_time_seconds`](https://github.com/etcd-io/etcd/pull/9762) Prometheus metric histogram upper-bound.
- - Previously, highest bucket only collects requests taking 0.8192 seconds or more.
- - Now, highest buckets collect 0.8192 seconds, 1.6384 seconds, and 3.2768 seconds or more.
-- Add [`etcd_server_is_leader`](https://github.com/etcd-io/etcd/pull/9587) Prometheus metric.
-- Add [`etcd_server_id`](https://github.com/etcd-io/etcd/pull/9998) Prometheus metric.
-- Add [`etcd_cluster_version`](https://github.com/etcd-io/etcd/pull/10257) Prometheus metric.
-- Add [`etcd_server_version`](https://github.com/etcd-io/etcd/pull/8960) Prometheus metric.
- - To replace [Kubernetes `etcd-version-monitor`](https://github.com/etcd-io/etcd/issues/8948).
-- Add [`etcd_server_go_version`](https://github.com/etcd-io/etcd/pull/9957) Prometheus metric.
-- Add [`etcd_server_health_success`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_health_failures`](https://github.com/etcd-io/etcd/pull/10156) Prometheus metric.
-- Add [`etcd_server_read_indexes_failed_total`](https://github.com/etcd-io/etcd/pull/10094) Prometheus metric.
-- Add [`etcd_server_heartbeat_send_failures_total`](https://github.com/etcd-io/etcd/pull/9761) Prometheus metric.
-- Add [`etcd_server_slow_apply_total`](https://github.com/etcd-io/etcd/pull/9761) Prometheus metric.
-- Add [`etcd_server_slow_read_indexes_total`](https://github.com/etcd-io/etcd/pull/9897) Prometheus metric.
-- Add [`etcd_server_quota_backend_bytes`](https://github.com/etcd-io/etcd/pull/9820) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_mvcc_db_total_size_in_use_in_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-- Add [`etcd_mvcc_db_total_size_in_use_in_bytes`](https://github.com/etcd-io/etcd/pull/9256) Prometheus metric.
- - Use it with `etcd_mvcc_db_total_size_in_bytes` and `etcd_mvcc_db_total_size_in_use_in_bytes`.
- - `etcd_server_quota_backend_bytes 2.147483648e+09` means current quota size is 2 GB.
- - `etcd_mvcc_db_total_size_in_bytes 20480` means current physically allocated DB size is 20 KB.
- - `etcd_mvcc_db_total_size_in_use_in_bytes 16384` means future DB size if defragment operation is complete.
- - `etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes` is the number of bytes that can be saved on disk with defragment operation.
-- Add [`etcd_mvcc_db_open_read_transactions`](https://github.com/etcd-io/etcd/pull/10523/commits/ad80752715aaed449629369687c5fd30eb1bda76) Prometheus metric.
-- Add [`etcd_snap_fsync_duration_seconds`](https://github.com/etcd-io/etcd/pull/9762) Prometheus metric.
-- Add [`etcd_disk_backend_defrag_duration_seconds`](https://github.com/etcd-io/etcd/pull/9761) Prometheus metric.
-- Add [`etcd_mvcc_hash_duration_seconds`](https://github.com/etcd-io/etcd/pull/9761) Prometheus metric.
-- Add [`etcd_mvcc_hash_rev_duration_seconds`](https://github.com/etcd-io/etcd/pull/9761) Prometheus metric.
-- Add [`etcd_debugging_disk_backend_commit_rebalance_duration_seconds`](https://github.com/etcd-io/etcd/pull/9834) Prometheus metric.
-- Add [`etcd_debugging_disk_backend_commit_spill_duration_seconds`](https://github.com/etcd-io/etcd/pull/9834) Prometheus metric.
-- Add [`etcd_debugging_disk_backend_commit_write_duration_seconds`](https://github.com/etcd-io/etcd/pull/9834) Prometheus metric.
-- Add [`etcd_debugging_lease_granted_total`](https://github.com/etcd-io/etcd/pull/9778) Prometheus metric.
-- Add [`etcd_debugging_lease_revoked_total`](https://github.com/etcd-io/etcd/pull/9778) Prometheus metric.
-- Add [`etcd_debugging_lease_renewed_total`](https://github.com/etcd-io/etcd/pull/9778) Prometheus metric.
-- Add [`etcd_debugging_lease_ttl_total`](https://github.com/etcd-io/etcd/pull/9778) Prometheus metric.
-- Add [`etcd_network_snapshot_send_inflights_total`](https://github.com/etcd-io/etcd/pull/11009) Prometheus metric.
-- Add [`etcd_network_snapshot_receive_inflights_total`](https://github.com/etcd-io/etcd/pull/11009) Prometheus metric.
-- Add [`etcd_server_snapshot_apply_in_progress_total`](https://github.com/etcd-io/etcd/pull/11009) Prometheus metric.
-- Add [`etcd_server_is_learner`](https://github.com/etcd-io/etcd/pull/10731) Prometheus metric.
-- Add [`etcd_server_learner_promote_failures`](https://github.com/etcd-io/etcd/pull/10731) Prometheus metric.
-- Add [`etcd_server_learner_promote_successes`](https://github.com/etcd-io/etcd/pull/10731) Prometheus metric.
-- Increase [`etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds`](https://github.com/etcd-io/etcd/pull/9762) Prometheus metric histogram upper-bound.
- - Previously, highest bucket only collects requests taking 1.024 seconds or more.
- - Now, highest buckets collect 1.024 seconds, 2.048 seconds, and 4.096 seconds or more.
-- Fix missing [`etcd_network_peer_sent_failures_total`](https://github.com/etcd-io/etcd/pull/9437) Prometheus metric count.
-- Fix [`etcd_debugging_server_lease_expired_total`](https://github.com/etcd-io/etcd/pull/9557) Prometheus metric.
-- Fix [race conditions in v2 server stat collecting](https://github.com/etcd-io/etcd/pull/9562).
-- Change [gRPC proxy to expose etcd server endpoint /metrics](https://github.com/etcd-io/etcd/pull/10618).
- - The metrics that were exposed via the proxy were not etcd server members but instead the proxy itself.
-- Fix bug where [db_compaction_total_duration_milliseconds metric incorrectly measured duration as 0](https://github.com/etcd-io/etcd/pull/10646).
-- Deprecating `etcd_debugging_mvcc_db_total_size_in_bytes` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_db_total_size_in_bytes`](https://github.com/etcd-io/etcd/pull/9819) instead.
-- Deprecating `etcd_debugging_mvcc_put_total` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_put_total`](https://github.com/etcd-io/etcd/pull/10962) instead.
-- Deprecating `etcd_debugging_mvcc_delete_total` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_delete_total`](https://github.com/etcd-io/etcd/pull/10962) instead.
-- Deprecating `etcd_debugging_mvcc_range_total` Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_range_total`](https://github.com/etcd-io/etcd/pull/10968) instead.
-- Deprecating `etcd_debugging_mvcc_txn_total`Prometheus metric (to be removed in v3.5). Use [`etcd_mvcc_txn_total`](https://github.com/etcd-io/etcd/pull/10968) instead.
-
-### Security, Authentication
-
-See [security doc](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-- Support TLS cipher suite whitelisting.
- - To block [weak cipher suites](https://github.com/etcd-io/etcd/issues/8320).
- - TLS handshake fails when client hello is requested with invalid cipher suites.
- - Add [`etcd --cipher-suites`](https://github.com/etcd-io/etcd/pull/9801) flag.
- - If empty, Go auto-populates the list.
-- Add [`etcd --host-whitelist`](https://github.com/etcd-io/etcd/pull/9372) flag, [`etcdserver.Config.HostWhitelist`](https://github.com/etcd-io/etcd/pull/9372), and [`embed.Config.HostWhitelist`](https://github.com/etcd-io/etcd/pull/9372), to prevent ["DNS Rebinding"](https://en.wikipedia.org/wiki/DNS_rebinding) attack.
- - Any website can simply create an authorized DNS name, and direct DNS to `"localhost"` (or any other address). Then, all HTTP endpoints of etcd server listening on `"localhost"` becomes accessible, thus vulnerable to [DNS rebinding attacks (CVE-2018-5702)](https://bugs.chromium.org/p/project-zero/issues/detail?id=1447#c2).
- - Client origin enforce policy works as follow:
- - If client connection is secure via HTTPS, allow any hostnames..
- - If client connection is not secure and `"HostWhitelist"` is not empty, only allow HTTP requests whose Host field is listed in whitelist.
- - By default, `"HostWhitelist"` is `"*"`, which means insecure server allows all client HTTP requests.
- - Note that the client origin policy is enforced whether authentication is enabled or not, for tighter controls.
- - When specifying hostnames, loopback addresses are not added automatically. To allow loopback interfaces, add them to whitelist manually (e.g. `"localhost"`, `"127.0.0.1"`, etc.).
- - e.g. `etcd --host-whitelist example.com`, then the server will reject all HTTP requests whose Host field is not `example.com` (also rejects requests to `"localhost"`).
-- Support [`etcd --cors`](https://github.com/etcd-io/etcd/pull/9490) in v3 HTTP requests (gRPC gateway).
-- Support [`ttl` field for `etcd` Authentication JWT token](https://github.com/etcd-io/etcd/pull/8302).
- - e.g. `etcd --auth-token jwt,pub-key=,priv-key=,sign-method=,ttl=5m`.
-- Allow empty token provider in [`etcdserver.ServerConfig.AuthToken`](https://github.com/etcd-io/etcd/pull/9369).
-- Fix [TLS reload](https://github.com/etcd-io/etcd/pull/9570) when [certificate SAN field only includes IP addresses but no domain names](https://github.com/etcd-io/etcd/issues/9541).
- - 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 [not include any domain names but only IP addresses](https://github.com/etcd-io/etcd/issues/9541) 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).
-
-### etcd server
-
-- Add [`rpctypes.ErrLeaderChanged`](https://github.com/etcd-io/etcd/pull/10094).
- - Now linearizable requests with read index would fail fast when there is a leadership change, instead of waiting until context timeout.
-- Add [`etcd --initial-election-tick-advance`](https://github.com/etcd-io/etcd/pull/9591) 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 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.
- - Now, this can be disabled by setting `etcd --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 [disruptive rejoining follower node](https://github.com/etcd-io/etcd/issues/9333).
-- Add [`etcd --pre-vote`](https://github.com/etcd-io/etcd/pull/9352) flag to enable to run an additional Raft election phase.
- - For instance, a flaky(or rejoining) member may drop in and out, and start campaign. This member will end up with a higher term, and ignore all incoming messages with lower term. In this case, a new leader eventually need to get elected, thus disruptive to cluster availability. Raft implements Pre-Vote phase to prevent this kind of disruptions. If enabled, Raft runs an additional phase of election to check if pre-candidate can get enough votes to win an election.
- - `etcd --pre-vote=false` by default.
- - v3.5 will enable `etcd --pre-vote=true` by default.
-- Add `etcd --experimental-compaction-batch-limit` to [sets the maximum revisions deleted in each compaction batch](https://github.com/etcd-io/etcd/pull/11034).
-- Reduced default compaction batch size from 10k revisions to 1k revisions to improve p99 latency during compactions and reduced wait between compactions from 100ms to 10ms.
-- Add [`etcd --discovery-srv-name`](https://github.com/etcd-io/etcd/pull/8690) flag to support custom DNS SRV name with discovery.
- - If not given, etcd queries `_etcd-server-ssl._tcp.[YOUR_HOST]` and `_etcd-server._tcp.[YOUR_HOST]`.
- - If `etcd --discovery-srv-name="foo"`, then query `_etcd-server-ssl-foo._tcp.[YOUR_HOST]` and `_etcd-server-foo._tcp.[YOUR_HOST]`.
- - Useful for operating multiple etcd clusters under the same domain.
-- Support TLS cipher suite whitelisting.
- - To block [weak cipher suites](https://github.com/etcd-io/etcd/issues/8320).
- - TLS handshake fails when client hello is requested with invalid cipher suites.
- - Add [`etcd --cipher-suites`](https://github.com/etcd-io/etcd/pull/9801) flag.
- - If empty, Go auto-populates the list.
-- Support [`etcd --cors`](https://github.com/etcd-io/etcd/pull/9490) in v3 HTTP requests (gRPC gateway).
-- Rename [`etcd --log-output` to `etcd --log-outputs`](https://github.com/etcd-io/etcd/pull/9624) to support multiple log outputs.
- - **`etcd --log-output` will be deprecated in v3.5**.
-- Add [`etcd --logger`](https://github.com/etcd-io/etcd/pull/9572) flag to support [structured logger and multiple log outputs](https://github.com/etcd-io/etcd/issues/9438) in server-side.
- - **`etcd --logger=capnslog` will be deprecated in v3.5**.
- - Main motivation is to promote automated etcd monitoring, rather than looking back server logs when it starts breaking. Future development will make etcd log as few as possible, and make etcd easier to monitor with metrics and alerts.
- - `etcd --logger=capnslog --log-outputs=default` is the default setting and same as previous etcd server logging format.
- - `etcd --logger=zap --log-outputs=default` is not supported when `etcd --logger=zap`.
- - Use `etcd --logger=zap --log-outputs=stderr` instead.
- - 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, [every single log write will fail](https://github.com/etcd-io/etcd/pull/9729) and fall back to `os.Stderr`, which is inefficient.
- - To avoid this problem, systemd journal logging must be configured manually.
- - `etcd --logger=zap --log-outputs=stderr` will log server operations in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig) and writes logs to `os.Stderr`. Use this to override journald log redirects.
- - `etcd --logger=zap --log-outputs=stdout` will log server operations in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig) and writes logs to `os.Stdout` Use this to override journald log redirects.
- - `etcd --logger=zap --log-outputs=a.log` will log server operations in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig) and writes logs to the specified file `a.log`.
- - `etcd --logger=zap --log-outputs=a.log,b.log,c.log,stdout` [writes server logs to multiple files `a.log`, `b.log` and `c.log` at the same time](https://github.com/etcd-io/etcd/pull/9579) and outputs to `os.Stderr`, in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig).
- - `etcd --logger=zap --log-outputs=/dev/null` will discard all server logs.
-- Add [`etcd --log-level`](https://github.com/etcd-io/etcd/pull/10947) flag to support log level.
- - v3.5 will deprecate `etcd --debug` flag in favor of `etcd --log-level=debug`.
-- Add [`etcd --backend-batch-limit`](https://github.com/etcd-io/etcd/pull/10283) flag.
-- Add [`etcd --backend-batch-interval`](https://github.com/etcd-io/etcd/pull/10283) flag.
-- Fix [`mvcc` "unsynced" watcher restore operation](https://github.com/etcd-io/etcd/pull/9281).
- - "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 [missing events from "unsynced" watchers](https://github.com/etcd-io/etcd/issues/9086).
- - 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.
-- Fix [`mvcc` server panic from restore operation](https://github.com/etcd-io/etcd/pull/9775).
- - 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.
-- Fix [server panic on invalid Election Proclaim/Resign HTTP(S) requests](https://github.com/etcd-io/etcd/pull/9379).
- - 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 [revision-based compaction retention parsing](https://github.com/etcd-io/etcd/pull/9339).
- - Previously, `etcd --auto-compaction-mode revision --auto-compaction-retention 1` was [translated to revision retention 3600000000000](https://github.com/etcd-io/etcd/issues/9337).
- - Now, `etcd --auto-compaction-mode revision --auto-compaction-retention 1` is correctly parsed as revision retention 1.
-- Prevent [overflow by large `TTL` values for `Lease` `Grant`](https://github.com/etcd-io/etcd/pull/9399).
- - `TTL` parameter to `Grant` request is unit of second.
- - Leases with too large `TTL` values exceeding `math.MaxInt64` [expire in unexpected ways](https://github.com/etcd-io/etcd/issues/9374).
- - 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!
-- Fix [expired lease revoke](https://github.com/etcd-io/etcd/pull/10693).
- - Fix ["the key is not deleted when the bound lease expires"](https://github.com/etcd-io/etcd/issues/10686).
-- Enable etcd server [`raft.Config.CheckQuorum` when starting with `ForceNewCluster`](https://github.com/etcd-io/etcd/pull/9347).
-- Allow [non-WAL files in `etcd --wal-dir` directory](https://github.com/etcd-io/etcd/pull/9743).
- - Previously, existing files such as [`lost+found`](https://github.com/etcd-io/etcd/issues/7287) in WAL directory prevent etcd server boot.
- - Now, WAL directory that contains only `lost+found` or a file that's not suffixed with `.wal` is considered non-initialized.
-- Fix [`ETCD_CONFIG_FILE` env variable parsing in `etcd`](https://github.com/etcd-io/etcd/pull/10762).
-- Fix [race condition in `rafthttp` transport pause/resume](https://github.com/etcd-io/etcd/pull/10826).
-- Fix [server crash from creating an empty role](https://github.com/etcd-io/etcd/pull/10907).
- - Previously, creating a role with an empty name crashed etcd server with an error code `Unavailable`.
- - Now, creating a role with an empty name is not allowed with an error code `InvalidArgument`.
-
-### API
-
-- Add `isLearner` field to `etcdserverpb.Member`, `etcdserverpb.MemberAddRequest` and `etcdserverpb.StatusResponse` as part of [raft learner implementation](https://github.com/etcd-io/etcd/pull/10725).
-- Add `MemberPromote` rpc to `etcdserverpb.Cluster` interface and the corresponding `MemberPromoteRequest` and `MemberPromoteResponse` as part of [raft learner implementation](https://github.com/etcd-io/etcd/pull/10725).
-- Add [`snapshot`](https://github.com/etcd-io/etcd/pull/9118) package for snapshot restore/save operations (see [`godoc.org/github.com/etcd/clientv3/snapshot`](https://godoc.org/github.com/coreos/etcd/clientv3/snapshot) for more).
-- Add [`watch_id` field to `etcdserverpb.WatchCreateRequest`](https://github.com/etcd-io/etcd/pull/9065) to allow user-provided watch ID to `mvcc`.
- - Corresponding `watch_id` is returned via `etcdserverpb.WatchResponse`, if any.
-- Add [`fragment` field to `etcdserverpb.WatchCreateRequest`](https://github.com/etcd-io/etcd/pull/9291) to request etcd server to [split watch events](https://github.com/etcd-io/etcd/issues/9294) 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 [`raftAppliedIndex` field to `etcdserverpb.StatusResponse`](https://github.com/etcd-io/etcd/pull/9176) for current Raft applied index.
-- Add [`errors` field to `etcdserverpb.StatusResponse`](https://github.com/etcd-io/etcd/pull/9206) for server-side error.
- - e.g. `"etcdserver: no leader", "NOSPACE", "CORRUPT"`
-- Add [`dbSizeInUse` field to `etcdserverpb.StatusResponse`](https://github.com/etcd-io/etcd/pull/9256) for actual DB size after compaction.
-- Add [`WatchRequest.WatchProgressRequest`](https://github.com/etcd-io/etcd/pull/9869).
- - 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.
-
-Note: **v3.5 will deprecate `etcd --log-package-levels` flag for `capnslog`**; `etcd --logger=zap --log-outputs=stderr` will the default. **v3.5 will deprecate `[CLIENT-URL]/config/local/log` endpoint.**
-
-### Package `embed`
-
-- Add [`embed.Config.CipherSuites`](https://github.com/etcd-io/etcd/pull/9801) to specify a list of supported cipher suites for TLS handshake between client/server and peers.
- - If empty, Go auto-populates the list.
- - Both `embed.Config.ClientTLSInfo.CipherSuites` and `embed.Config.CipherSuites` cannot be non-empty at the same time.
- - If not empty, specify either `embed.Config.ClientTLSInfo.CipherSuites` or `embed.Config.CipherSuites`.
-- Add [`embed.Config.InitialElectionTickAdvance`](https://github.com/etcd-io/etcd/pull/9591) to enable/disable initial election tick fast-forward.
- - `embed.NewConfig()` would return `*embed.Config` with `InitialElectionTickAdvance` as true by default.
-- Define [`embed.CompactorModePeriodic`](https://godoc.org/github.com/etcd-io/etcd/embed#pkg-variables) for `compactor.ModePeriodic`.
-- Define [`embed.CompactorModeRevision`](https://godoc.org/github.com/etcd-io/etcd/embed#pkg-variables) for `compactor.ModeRevision`.
-- Change [`embed.Config.CorsInfo` in `*cors.CORSInfo` type to `embed.Config.CORS` in `map[string]struct{}` type](https://github.com/etcd-io/etcd/pull/9490).
-- Remove [`embed.Config.SetupLogging`](https://github.com/etcd-io/etcd/pull/9572).
- - Now logger is set up automatically based on [`embed.Config.Logger`, `embed.Config.LogOutputs`, `embed.Config.Debug` fields](https://github.com/etcd-io/etcd/pull/9572).
-- Add [`embed.Config.Logger`](https://github.com/etcd-io/etcd/pull/9518) to support [structured logger `zap`](https://github.com/uber-go/zap) in server-side.
-- Add [`embed.Config.LogLevel`](https://github.com/etcd-io/etcd/pull/10947).
-- Rename `embed.Config.SnapCount` field to [`embed.Config.SnapshotCount`](https://github.com/etcd-io/etcd/pull/9745), to be consistent with the flag name `etcd --snapshot-count`.
-- Rename [**`embed.Config.LogOutput`** to **`embed.Config.LogOutputs`**](https://github.com/etcd-io/etcd/pull/9624) to support multiple log outputs.
-- Change [**`embed.Config.LogOutputs`** type from `string` to `[]string`](https://github.com/etcd-io/etcd/pull/9579) to support multiple log outputs.
-- Add [`embed.Config.BackendBatchLimit`](https://github.com/etcd-io/etcd/pull/10283) field.
-- Add [`embed.Config.BackendBatchInterval`](https://github.com/etcd-io/etcd/pull/10283) field.
-- Make [`embed.DefaultEnableV2` `false` default](https://github.com/etcd-io/etcd/pull/10935).
-
-### Package `pkg/adt`
-
-- Change [`pkg/adt.IntervalTree` from `struct` to `interface`](https://github.com/etcd-io/etcd/pull/10959).
- - See [`pkg/adt` README](https://github.com/etcd-io/etcd/tree/master/pkg/adt) and [`pkg/adt` godoc](https://godoc.org/go.etcd.io/etcd/pkg/adt).
-- Improve [`pkg/adt.IntervalTree` test coverage](https://github.com/etcd-io/etcd/pull/10959).
- - See [`pkg/adt` README](https://github.com/etcd-io/etcd/tree/master/pkg/adt) and [`pkg/adt` godoc](https://godoc.org/go.etcd.io/etcd/pkg/adt).
-- Fix [Red-Black tree to maintain black-height property](https://github.com/etcd-io/etcd/pull/10978).
- - Previously, delete operation violates [black-height property](https://github.com/etcd-io/etcd/issues/10965).
-
-### Package `integration`
-
-- Add [`CLUSTER_DEBUG` to enable test cluster logging](https://github.com/etcd-io/etcd/pull/9678).
- - Deprecated `capnslog` in integration tests.
-
-### client v3
-
-- Add [`MemberAddAsLearner`](https://github.com/etcd-io/etcd/pull/10725) to `Clientv3.Cluster` interface. This API is used to add a learner member to etcd cluster.
-- Add [`MemberPromote`](https://github.com/etcd-io/etcd/pull/10727) to `Clientv3.Cluster` interface. This API is used to promote a learner member in etcd cluster.
-- Client may receive [`rpctypes.ErrLeaderChanged`](https://github.com/etcd-io/etcd/pull/10094) from server.
- - Now linearizable requests with read index would fail fast when there is a leadership change, instead of waiting until context timeout.
-- Add [`WithFragment` `OpOption`](https://github.com/etcd-io/etcd/pull/9291) to support [watch events fragmentation](https://github.com/etcd-io/etcd/issues/9294) when the total size of events exceeds `etcd --max-request-bytes` flag value plus gRPC-overhead 512 bytes.
- - Watch fragmentation is disabled by default.
- - 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 (...)"`.
-- Add [`Watcher.RequestProgress` method](https://github.com/etcd-io/etcd/pull/9869).
- - 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.
-- Fix [lease keepalive interval updates when response queue is full](https://github.com/etcd-io/etcd/pull/9952).
- - If `<-chan *clientv3LeaseKeepAliveResponse` from `clientv3.Lease.KeepAlive` was never consumed or channel is full, client was [sending keepalive request every 500ms](https://github.com/etcd-io/etcd/issues/9911) instead of expected rate of every "TTL / 3" duration.
-- Change [snapshot file permissions](https://github.com/etcd-io/etcd/pull/9977): On Linux, the snapshot file changes from readable by all (mode 0644) to readable by the user only (mode 0600).
-- Client may choose to send keepalive pings to server using [`PermitWithoutStream`](https://github.com/etcd-io/etcd/pull/10146).
- - By setting `PermitWithoutStream` to true, client can send keepalive pings to server without any active streams(RPCs). In other words, it allows sending keepalive pings with unary or simple RPC calls.
- - `PermitWithoutStream` is set to false by default.
-- Fix logic on [release lock key if cancelled](https://github.com/etcd-io/etcd/pull/10153) in `clientv3/concurrency` package.
-- Fix [`(*Client).Endpoints()` method race condition](https://github.com/etcd-io/etcd/pull/10595).
-- Deprecated [`grpc.ErrClientConnClosing`](https://github.com/etcd-io/etcd/pull/10981).
- - `clientv3` and `proxy/grpcproxy` now does not return `grpc.ErrClientConnClosing`.
- - `grpc.ErrClientConnClosing` has been [deprecated in gRPC >= 1.10](https://github.com/grpc/grpc-go/pull/1854).
- - Use `clientv3.IsConnCanceled(error)` or `google.golang.org/grpc/status.FromError(error)` instead.
-
-### etcdctl v3
-
-- Make [`ETCDCTL_API=3 etcdctl` default](https://github.com/etcd-io/etcd/issues/9600).
- - Now, `etcdctl set foo bar` must be `ETCDCTL_API=2 etcdctl set foo bar`.
- - Now, `ETCDCTL_API=3 etcdctl put foo bar` could be just `etcdctl put foo bar`.
-- Add [`etcdctl member add --learner` and `etcdctl member promote`](https://github.com/etcd-io/etcd/pull/10725) to add and promote raft learner member in etcd cluster.
-- Add [`etcdctl --password`](https://github.com/etcd-io/etcd/pull/9730) flag.
- - To support [`:` character in user name](https://github.com/etcd-io/etcd/issues/9691).
- - e.g. `etcdctl --user user --password password get foo`
-- Add [`etcdctl user add --new-user-password`](https://github.com/etcd-io/etcd/pull/9730) flag.
-- Add [`etcdctl check datascale`](https://github.com/etcd-io/etcd/pull/9185) command.
-- Add [`etcdctl check datascale --auto-compact, --auto-defrag`](https://github.com/etcd-io/etcd/pull/9351) flags.
-- Add [`etcdctl check perf --auto-compact, --auto-defrag`](https://github.com/etcd-io/etcd/pull/9330) flags.
-- Add [`etcdctl defrag --cluster`](https://github.com/etcd-io/etcd/pull/9390) flag.
-- Add ["raft applied index" field to `endpoint status`](https://github.com/etcd-io/etcd/pull/9176).
-- Add ["errors" field to `endpoint status`](https://github.com/etcd-io/etcd/pull/9206).
-- Add [`etcdctl endpoint health --write-out` support](https://github.com/etcd-io/etcd/pull/9540).
- - Previously, [`etcdctl endpoint health --write-out json` did not work](https://github.com/etcd-io/etcd/issues/9532).
-- Add [missing newline in `etcdctl endpoint health`](https://github.com/etcd-io/etcd/pull/10793).
-- Fix [`etcdctl watch [key] [range_end] -- [exec-command…]`](https://github.com/etcd-io/etcd/pull/9688) parsing.
- - Previously, `ETCDCTL_API=3 etcdctl watch foo -- echo watch event received` panicked.
-- Fix [`etcdctl move-leader` command for TLS-enabled endpoints](https://github.com/etcd-io/etcd/pull/9807).
-- Add [`progress` command to `etcdctl watch --interactive`](https://github.com/etcd-io/etcd/pull/9869).
- - 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.
-- Add [timeout](https://github.com/etcd-io/etcd/pull/10301) to `etcdctl snapshot
- save`.
- - User can specify timeout of `etcdctl snapshot save` command using flag `--command-timeout`.
- - Fix etcdctl to [strip out insecure endpoints from DNS SRV records when using discovery](https://github.com/etcd-io/etcd/pull/10443)
-
-### gRPC proxy
-
-- Fix [etcd server panic from restore operation](https://github.com/etcd-io/etcd/pull/9775).
- - 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.
- - Especially, gRPC proxy was affected, since it detects a leader loss with a key `"proxy-namespace__lostleader"` and a watch revision `"int64(math.MaxInt64 - 2)"`.
- - Now, this server-side panic has been fixed.
-- Fix [memory leak in cache layer](https://github.com/etcd-io/etcd/pull/10327).
-- Change [gRPC proxy to expose etcd server endpoint /metrics](https://github.com/etcd-io/etcd/pull/10618).
- - The metrics that were exposed via the proxy were not etcd server members but instead the proxy itself.
-
-### gRPC gateway
-
-- Replace [gRPC gateway](https://github.com/grpc-ecosystem/grpc-gateway) endpoint `/v3beta` with [`/v3`](https://github.com/etcd-io/etcd/pull/9298).
- - Deprecated [`/v3alpha`](https://github.com/etcd-io/etcd/pull/9298).
- - To deprecate [`/v3beta`](https://github.com/etcd-io/etcd/issues/9189) in v3.5.
- - In v3.4, `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` still works as a fallback to `curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'`, but `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` won't work in v3.5. Use `curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` instead.
-- Add API endpoints [`/{v3beta,v3}/lease/leases, /{v3beta,v3}/lease/revoke, /{v3beta,v3}/lease/timetolive`](https://github.com/etcd-io/etcd/pull/9450).
- - To deprecate [`/{v3beta,v3}/kv/lease/leases, /{v3beta,v3}/kv/lease/revoke, /{v3beta,v3}/kv/lease/timetolive`](https://github.com/etcd-io/etcd/issues/9430) in v3.5.
-- Support [`etcd --cors`](https://github.com/etcd-io/etcd/pull/9490) in v3 HTTP requests (gRPC gateway).
-
-### Package `raft`
-
-- Fix [deadlock during PreVote migration process](https://github.com/etcd-io/etcd/pull/8525).
-- Add [`raft.ErrProposalDropped`](https://github.com/etcd-io/etcd/pull/9067).
- - Now [`(r *raft) Step` returns `raft.ErrProposalDropped`](https://github.com/etcd-io/etcd/pull/9137) if a proposal has been ignored.
- - e.g. a node is removed from cluster, or [`raftpb.MsgProp` arrives at current leader while there is an ongoing leadership transfer](https://github.com/etcd-io/etcd/issues/8975).
-- Improve [Raft `becomeLeader` and `stepLeader`](https://github.com/etcd-io/etcd/pull/9073) by keeping track of latest `pb.EntryConfChange` index.
- - Previously record `pendingConf` boolean field scanning the entire tail of the log, which can delay hearbeat send.
-- Fix [missing learner nodes on `(n *node) ApplyConfChange`](https://github.com/etcd-io/etcd/pull/9116).
-- Add [`raft.Config.MaxUncommittedEntriesSize`](https://github.com/etcd-io/etcd/pull/10167) to limit the total size of the uncommitted entries in bytes.
- - Once exceeded, raft returns `raft.ErrProposalDropped` error.
- - Prevent [unbounded Raft log growth](https://github.com/cockroachdb/cockroach/issues/27772).
- - There was a bug in [PR#10167](https://github.com/etcd-io/etcd/pull/10167) but fixed via [PR#10199](https://github.com/etcd-io/etcd/pull/10199).
-- Add [`raft.Ready.CommittedEntries` pagination using `raft.Config.MaxSizePerMsg`](https://github.com/etcd-io/etcd/pull/9982).
- - This prevents out-of-memory errors if the raft log has become very large and commits all at once.
- - Fix [correctness bug in CommittedEntries pagination](https://github.com/etcd-io/etcd/pull/10063).
-- Optimize [message send flow control](https://github.com/etcd-io/etcd/pull/9985).
- - Leader now sends more append entries if it has more non-empty entries to send after updating flow control information.
- - Now, Raft allows multiple in-flight append messages.
-- Optimize [memory allocation when boxing slice in `maybeCommit`](https://github.com/etcd-io/etcd/pull/10679).
- - By boxing a heap-allocated slice header instead of the slice header on the stack, we can avoid an allocation when passing through the sort.Interface interface.
-- Avoid [memory allocation in Raft entry `String` method](https://github.com/etcd-io/etcd/pull/10680).
-- Avoid [multiple memory allocations when merging stable and unstable log](https://github.com/etcd-io/etcd/pull/10684).
-- Extract [progress tracking into own component](https://github.com/etcd-io/etcd/pull/10683).
- - Add [package `raft/tracker`](https://github.com/etcd-io/etcd/pull/10807).
- - Optimize [string representation of `Progress`](https://github.com/etcd-io/etcd/pull/10882).
-- Make [relationship between `node` and `RawNode` explicit](https://github.com/etcd-io/etcd/pull/10803).
-- Prevent [learners from becoming leader](https://github.com/etcd-io/etcd/pull/10822).
-- Add [package `raft/quorum` to reason about committed indexes as well as vote outcomes for both majority and joint quorums](https://github.com/etcd-io/etcd/pull/10779).
- - Bundle [Voters and Learner into `raft/tracker.Config` struct](https://github.com/etcd-io/etcd/pull/10865).
-- Use [membership sets in progress tracking](https://github.com/etcd-io/etcd/pull/10779).
-- Implement [joint quorum computation](https://github.com/etcd-io/etcd/pull/10779).
-- Refactor [`raft/node.go` to centralize configuration change application](https://github.com/etcd-io/etcd/pull/10865).
-- Allow [voter to become learner through snapshot](https://github.com/etcd-io/etcd/pull/10864).
-- Add [package `raft/confchange` to internally support joint consensus](https://github.com/etcd-io/etcd/pull/10779).
-- Use [`RawNode` for node's event loop](https://github.com/etcd-io/etcd/pull/10892).
-- Add [`RawNode.Bootstrap` method](https://github.com/etcd-io/etcd/pull/10892).
-- Add [`raftpb.ConfChangeV2` to use joint quorums](https://github.com/etcd-io/etcd/pull/10914).
- - `raftpb.ConfChange` continues to work as today: it allows carrying out a single configuration change. A `pb.ConfChange` proposal gets added to the Raft log as such and is thus also observed by the app during Ready handling, and fed back to ApplyConfChange.
- - `raftpb.ConfChangeV2` allows joint configuration changes but will continue to carry out configuration changes in "one phase" (i.e. without ever entering a joint config) when this is possible.
- - `raftpb.ConfChangeV2` messages initiate configuration changes. They support both the simple "one at a time" membership change protocol and full Joint Consensus allowing for arbitrary changes in membership.
-- Change [`raftpb.ConfState.Nodes` to `raftpb.ConfState.Voters`](https://github.com/etcd-io/etcd/pull/10914).
-- Allow [learners to vote, but still learners do not count in quorum](https://github.com/etcd-io/etcd/pull/10998).
- - necessary in the situation in which a learner has been promoted (i.e. is now a voter) but has not learned about this yet.
-- Fix [restoring joint consensus](https://github.com/etcd-io/etcd/pull/11003).
-- Visit [`Progress` in stable order](https://github.com/etcd-io/etcd/pull/11004).
-- Proactively [probe newly added followers](https://github.com/etcd-io/etcd/pull/11037).
- - The general expectation in `tracker.Progress.Next == c.LastIndex` is that the follower has no log at all (and will thus likely need a snapshot), though the app may have applied a snapshot out of band before adding the replica (thus making the first index the better choice).
- - Previously, when the leader applied a new configuration that added voters, it would not immediately probe these voters, delaying when they would be caught up.
-
-### Package `wal`
-
-- Add [`Verify` function to perform corruption check on WAL contents](https://github.com/etcd-io/etcd/pull/10603).
-- Fix [`wal` directory cleanup on creation failures](https://github.com/etcd-io/etcd/pull/10689).
-
-### Tooling
-
-- Add [`etcd-dump-logs --entry-type`](https://github.com/etcd-io/etcd/pull/9628) flag to support WAL log filtering by entry type.
-- Add [`etcd-dump-logs --stream-decoder`](https://github.com/etcd-io/etcd/pull/9790) flag to support custom decoder.
-- Add [`SHA256SUMS`](https://github.com/etcd-io/etcd/pull/11087) file to release assets.
- - etcd maintainers are a distributed team, this change allows for releases to be cut and validation provided without requiring a signing key.
-
-### Go
-
-- Require [*Go 1.12+*](https://github.com/etcd-io/etcd/pull/10045).
-- Compile with [*Go 1.12.9*](https://golang.org/doc/devel/release.html#go1.12) including [*Go 1.12.8*](https://groups.google.com/d/msg/golang-announce/65QixT3tcmg/DrFiG6vvCwAJ) security fixes.
-
-### Dockerfile
-
-- [Rebase etcd image from Alpine to Debian](https://github.com/etcd-io/etcd/pull/10805) to improve security and maintenance effort for etcd release.
-
-
-
diff --git a/etcd-fix/CHANGELOG-3.5.md b/etcd-fix/CHANGELOG-3.5.md
deleted file mode 100644
index 7c72d42..0000000
--- a/etcd-fix/CHANGELOG-3.5.md
+++ /dev/null
@@ -1,255 +0,0 @@
-
-
-Previous change logs can be found at [CHANGELOG-3.4](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.4.md).
-
-
-The minimum recommended etcd versions to run in **production** are 3.2.28+, 3.3.18+, and 3.4.2+.
-
-
-
-
-
-## v3.5.0 (2020 TBD)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0...v3.5.0) and [v3.5 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_5.md) for any breaking changes.
-
-- [v3.5.0](https://github.com/etcd-io/etcd/releases/tag/v3.5.0) (2020 TBD), see [code changes](https://github.com/etcd-io/etcd/compare/v3.5.0-rc.1...v3.5.0).
-- [v3.5.0-rc.1](https://github.com/etcd-io/etcd/releases/tag/v3.5.0-rc.1) (2020 TBD), see [code changes](https://github.com/etcd-io/etcd/compare/v3.5.0-rc.0...v3.5.0-rc.1).
-- [v3.5.0-rc.0](https://github.com/etcd-io/etcd/releases/tag/v3.5.0-rc.0) (2020 TBD), see [code changes](https://github.com/etcd-io/etcd/compare/v3.4.0...v3.5.0-rc.0).
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v3.5 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_5.md).**
-
-### Breaking Changes
-
-- `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](https://github.com/golang/go/wiki/Modules) conventions
-- `go.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`.
-- `go.etcd.io/client' package got migrated to 'go.etcd.io/client/v2'.
-- Changed behavior of clienv3 API [MemberList](https://github.com/etcd-io/etcd/pull/11639).
- - 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.
-- [gRPC gateway](https://github.com/grpc-ecosystem/grpc-gateway) only supports [`/v3`](TODO) endpoint.
- - Deprecated [`/v3beta`](https://github.com/etcd-io/etcd/pull/9298).
- - `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.
-- **`etcd --experimental-enable-v2v3` flag has been deprecated.** Use **`etcd --enable-v2v3`** instead.
- - Change [`etcd --experimental-enable-v2v3`](TODO) flag to `etcd --enable-v2v3`; v2 storage emulation is now stable.
-- **`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 [`embed.Config.Debug`](https://github.com/etcd-io/etcd/pull/10947).
-- **`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, [every single log write will fail](https://github.com/etcd-io/etcd/pull/9729) 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 `etcd_debugging_mvcc_db_total_size_in_bytes` Prometheus metric. Use `etcd_mvcc_db_total_size_in_bytes` instead.
-- Deprecated `etcd_debugging_mvcc_put_total` Prometheus metric. Use `etcd_mvcc_put_total` instead.
-- Deprecated `etcd_debugging_mvcc_delete_total` Prometheus metric. Use `etcd_mvcc_delete_total` instead.
-- Deprecated `etcd_debugging_mvcc_txn_total` Prometheus metric. Use `etcd_mvcc_txn_total` instead.
-- Deprecated `etcd_debugging_mvcc_range_total` Prometheus metric. Use `etcd_mvcc_range_total` instead.
-- Master branch `/version` outputs `3.5.0-pre`, instead of `3.4.0+git`.
-- Changed `proxy` package function signature to [support structured logger](https://github.com/etcd-io/etcd/pull/11614).
- - 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 [support structured logger](https://github.com/etcd-io/etcd/pull/11616).
- - 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`.
-
-### `etcdctl`
-
-- Make sure [save snapshot downloads checksum for integrity checks](https://github.com/etcd-io/etcd/pull/11896).
-
-### Security
-
-- Add [`TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256` and `TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256` to `etcd --cipher-suites`](https://github.com/etcd-io/etcd/pull/11864).
-- Changed [the format of WAL entries related to auth for not keeping password as a plain text](https://github.com/etcd-io/etcd/pull/11943).
-- Add third party [Security Audit Report](https://github.com/etcd-io/etcd/pull/12201).
-- A [log warning](https://github.com/etcd-io/etcd/pull/12242) is added when etcd use any existing directory that has a permission different than 700 on Linux and 777 on Windows.
-
-### Metrics, Monitoring
-
-See [List of metrics](https://github.com/etcd-io/etcd/tree/master/Documentation/metrics) for all metrics per release.
-
-Note that any `etcd_debugging_*` metrics are experimental and subject to change.
-
-- Deprecated `etcd_debugging_mvcc_db_total_size_in_bytes` Prometheus metric. Use `etcd_mvcc_db_total_size_in_bytes` instead.
-- Deprecated `etcd_debugging_mvcc_put_total` Prometheus metric. Use `etcd_mvcc_put_total` instead.
-- Deprecated `etcd_debugging_mvcc_delete_total` Prometheus metric. Use `etcd_mvcc_delete_total` instead.
-- Deprecated `etcd_debugging_mvcc_txn_total` Prometheus metric. Use `etcd_mvcc_txn_total` instead.
-- Deprecated `etcd_debugging_mvcc_range_total` Prometheus metric. Use `etcd_mvcc_range_total` instead.
-- Add [`etcd_debugging_mvcc_current_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-- Add [`etcd_debugging_mvcc_compact_revision`](https://github.com/etcd-io/etcd/pull/11126) Prometheus metric.
-- Change [`etcd_cluster_version`](https://github.com/etcd-io/etcd/pull/11254) Prometheus metrics to include only major and minor version.
-- Add [`etcd_debugging_mvcc_total_put_size_in_bytes`](https://github.com/etcd-io/etcd/pull/11374) Prometheus metric.
-- Add [`etcd_server_client_requests_total` with `"type"` and `"client_api_version"` labels](https://github.com/etcd-io/etcd/pull/11687).
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-- Add [`etcd_debugging_auth_revision`](https://github.com/etcd-io/etcd/commit/f14d2a087f7b0fd6f7980b95b5e0b945109c95f3).
-- Add [`os_fd_used` and `os_fd_limit` to monitor current OS file descriptors](https://github.com/etcd-io/etcd/pull/12214).
-
-### etcd server
-
-- [`etcd --enable-v2v3`](TODO) flag is now stable.
- - `etcd --experimental-enable-v2v3` has been deprecated.
- - Added [more v2v3 integration tests](https://github.com/etcd-io/etcd/pull/9634).
- - `etcd --enable-v2=true --enable-v2v3=''` by default, to enable v2 API server that is backed by **v2 store**.
- - `etcd --enable-v2=true --enable-v2v3=/aaa` to enable v2 API server that is backed by **v3 storage**.
- - `etcd --enable-v2=false --enable-v2v3=''` to disable v2 API server.
- - `etcd --enable-v2=false --enable-v2v3=/aaa` to disable v2 API server. TODO: error?
- - Add [`TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256` and `TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256` to `etcd --cipher-suites`](https://github.com/etcd-io/etcd/pull/11864).
- - Automatically [create parent directory if it does not exist](https://github.com/etcd-io/etcd/pull/9626) (fix [issue#9609](https://github.com/etcd-io/etcd/issues/9609)).
- - 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 [rollback/downgrade](TODO).
-- Deprecate v2 apply on cluster version. [Use v3 request to set cluster version and recover cluster version from v3 backend](https://github.com/etcd-io/etcd/pull/11427).
-- [Fix corruption bug in defrag](https://github.com/etcd-io/etcd/pull/11613).
-- Fix [quorum protection logic when promoting a learner](https://github.com/etcd-io/etcd/pull/11640).
-- Improve [peer corruption checker](https://github.com/etcd-io/etcd/pull/11621) to work when peer mTLS is enabled.
-- Log [`[CLIENT-PORT]/health` check in server side](https://github.com/etcd-io/etcd/pull/11704).
-- Improve [compaction performance when latest index is greater than 1-million](https://github.com/etcd-io/etcd/pull/11734).
-- [Refactor consistentindex](https://github.com/etcd-io/etcd/pull/11699).
-- [Add log when etcdserver failed to apply command](https://github.com/etcd-io/etcd/pull/11670).
-- Improve [count-only range performance](https://github.com/etcd-io/etcd/pull/11771).
-- Remove [redundant storage restore operation to shorten the startup time](https://github.com/etcd-io/etcd/pull/11779).
- - With 40 million key test data,it can shorten the startup time from 5 min to 2.5 min.
-- [Fix deadlock bug in mvcc](https://github.com/etcd-io/etcd/pull/11817).
-- Fix [inconsistency between WAL and server snapshot](https://github.com/etcd-io/etcd/pull/11888).
- - 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 [missing CRC checksum check in WAL validate method otherwise causes panic](https://github.com/etcd-io/etcd/pull/11924).
- - See https://github.com/etcd-io/etcd/issues/11918.
-- Improve logging around snapshot send and receive.
-- [Push down RangeOptions.limit argv into index tree to reduce memory overhead](https://github.com/etcd-io/etcd/pull/11990).
-- Add [reason field for /health response](https://github.com/etcd-io/etcd/pull/11983).
-- Add [`--unsafe-no-fsync`](https://github.com/etcd-io/etcd/pull/11946) 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 [etcd --auth-token-ttl](https://github.com/etcd-io/etcd/pull/11980) flag to customize `simpleTokenTTL` settings.
-- Improve [`runtime.FDUsage` call pattern to reduce objects malloc of Memory Usage and CPU Usage](https://github.com/etcd-io/etcd/pull/11986).
-- Improve [mvcc.watchResponse channel Memory Usage](https://github.com/etcd-io/etcd/pull/11987).
-- Log [expensive request info in UnaryInterceptor](https://github.com/etcd-io/etcd/pull/12086).
-- [Fix invalid Go type in etcdserverpb](https://github.com/etcd-io/etcd/pull/12000).
-- [Improve healthcheck by using v3 range request and its corresponding timeout](https://github.com/etcd-io/etcd/pull/12195).
-- Add [`etcd --experimental-watch-progress-notify-interval`](https://github.com/etcd-io/etcd/pull/12216) flag to make watch progress notify interval configurable.
-- Fix [server panic in slow writes warnings](https://github.com/etcd-io/etcd/issues/12197).
- - Fixed via [PR#12238](https://github.com/etcd-io/etcd/pull/12238).
-- [Fix server panic](https://github.com/etcd-io/etcd/pull/12288) when force-new-cluster flag is enabled in a cluster which had learner node.
-- Add [`--self-signed-cert-validity`](https://github.com/etcd-io/etcd/pull/12429) 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.
-
-### Package `runtime`
-
-- Optimize [`runtime.FDUsage` by removing unnecessary sorting](https://github.com/etcd-io/etcd/pull/12214).
-
-### Package `embed`
-
-- Remove [`embed.Config.Debug`](https://github.com/etcd-io/etcd/pull/10947).
- - Use `embed.Config.LogLevel` instead.
-- Add [`embed.Config.ZapLoggerBuilder`](https://github.com/etcd-io/etcd/pull/11147) to allow creating a custom zap logger.
-- Replace [global `*zap.Logger` with etcd server logger object](https://github.com/etcd-io/etcd/pull/12212).
-
-### Package `clientv3`
-
-- Remove [excessive watch cancel logging messages](https://github.com/etcd-io/etcd/pull/12187).
- - See [kubernetes/kubernetes#93450](https://github.com/kubernetes/kubernetes/issues/93450).
-- Add [`TryLock`](https://github.com/etcd-io/etcd/pull/11104) 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 [client balancer failover against multiple endpoints](https://github.com/etcd-io/etcd/pull/11184).
- - Fix [`"kube-apiserver: failover on multi-member etcd cluster fails certificate check on DNS mismatch"`](https://github.com/kubernetes/kubernetes/issues/83028).
-- Fix [IPv6 endpoint parsing in client](https://github.com/etcd-io/etcd/pull/11211).
- - Fix ["1.16: etcd client does not parse IPv6 addresses correctly when members are joining" (kubernetes#83550)](https://github.com/kubernetes/kubernetes/issues/83550).
-- Fix [errors caused by grpc changing balancer/resolver API](https://github.com/etcd-io/etcd/pull/11564). This change is compatible with grpc >= [v1.26.0](https://github.com/grpc/grpc-go/releases/tag/v1.26.0), but is not compatible with < v1.26.0 version.
-- Use [ServerName as the authority](https://github.com/etcd-io/etcd/pull/11574) after bumping to grpc v1.26.0. Remove workaround in [#11184](https://github.com/etcd-io/etcd/pull/11184).
-- Fix [`"hasleader"` metadata embedding](https://github.com/etcd-io/etcd/pull/11687).
- - Previously, `clientv3.WithRequireLeader(ctx)` was overwriting existing context keys.
-- Fix [watch leak caused by lazy cancellation](https://github.com/etcd-io/etcd/pull/11850). 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 [save snapshot downloads checksum for integrity checks](https://github.com/etcd-io/etcd/pull/11896).
-- Fix [auth token invalid after watch reconnects](https://github.com/etcd-io/etcd/pull/12264). Get AuthToken automatically when clientConn is ready.
-- Improve [clientv3:get AuthToken gracefully without extra connection](https://github.com/etcd-io/etcd/pull/12165).
-
-### Package `lease`
-
-- Fix [memory leak in follower nodes](https://github.com/etcd-io/etcd/pull/11731).
- - https://github.com/etcd-io/etcd/issues/11495
- - https://github.com/etcd-io/etcd/issues/11730
-- Make sure [grant/revoke won't be applied repeatedly after restarting etcd](https://github.com/etcd-io/etcd/pull/11935).
-
-### Package `wal`
-
-- Add [`etcd_wal_write_bytes_total`](https://github.com/etcd-io/etcd/pull/11738).
-- Handle [out-of-range slice bound in `ReadAll` and entry limit in `decodeRecord`](https://github.com/etcd-io/etcd/pull/11793).
-
-### etcdctl v3
-
-- Fix `etcdctl member add` command to prevent potential timeout. ([PR#11194](https://github.com/etcd-io/etcd/pull/11194) and [PR#11638](https://github.com/etcd-io/etcd/pull/11638))
-- Add [`etcdctl watch --progress-notify`](https://github.com/etcd-io/etcd/pull/11462) flag.
-- Add [`etcdctl auth status`](https://github.com/etcd-io/etcd/pull/11536) command to check if authentication is enabled
-- Add [`etcdctl get --count-only`](https://github.com/etcd-io/etcd/pull/11743) flag for output type `fields`.
-- Add [`etcdctl member list -w=json --hex`](https://github.com/etcd-io/etcd/pull/11812) flag to print memberListResponse in hex format json.
-
-### gRPC gateway
-
-- [gRPC gateway](https://github.com/grpc-ecosystem/grpc-gateway) only supports [`/v3`](TODO) endpoint.
- - Deprecated [`/v3beta`](https://github.com/etcd-io/etcd/pull/9298).
- - `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.
-
-### gRPC Proxy
-
-- Fix [`panic on error`](https://github.com/etcd-io/etcd/pull/11694) for metrics handler.
-- Add [gRPC keepalive related flags](https://github.com/etcd-io/etcd/pull/11711) `grpc-keepalive-min-time`, `grpc-keepalive-interval` and `grpc-keepalive-timeout`.
-- [Fix grpc watch proxy hangs when failed to cancel a watcher](https://github.com/etcd-io/etcd/pull/12030) .
-- Add [metrics handler for grpcproxy self](https://github.com/etcd-io/etcd/pull/12107).
-- Add [health handler for grpcproxy self](https://github.com/etcd-io/etcd/pull/12114).
-
-### Auth
-
-- Fix [NoPassword check when adding user through GRPC gateway](https://github.com/etcd-io/etcd/pull/11418) ([issue#11414](https://github.com/etcd-io/etcd/issues/11414))
-- Fix bug where [some auth related messages are logged at wrong level](https://github.com/etcd-io/etcd/pull/11586)
-- [Fix a data corruption bug by saving consistent index](https://github.com/etcd-io/etcd/pull/11652).
-- [Improve checkPassword performance](https://github.com/etcd-io/etcd/pull/11735).
-- [Add authRevision field in AuthStatus](https://github.com/etcd-io/etcd/pull/11659).
-
-### API
-
-- Add [`/v3/auth/status`](https://github.com/etcd-io/etcd/pull/11536) endpoint to check if authentication is enabled
-- [Add `Linearizable` field to `etcdserverpb.MemberListRequest`](https://github.com/etcd-io/etcd/pull/11639).
-
-### Package `netutil`
-
-- Remove [`netutil.DropPort/RecoverPort/SetLatency/RemoveLatency`](https://github.com/etcd-io/etcd/pull/12491).
- - 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.
-
-### `tools/etcd-dump-metrics`
-
-- Implement [input validation to prevent arbitrary shell invocation](https://github.com/etcd-io/etcd/pull/12491).
-
-### Dependency
-
-- Upgrade [`google.golang.org/grpc`](https://github.com/grpc/grpc-go/releases) from [**`v1.23.0`**](https://github.com/grpc/grpc-go/releases/tag/v1.23.0) to [**`v1.26.0`**](https://github.com/grpc/grpc-go/releases/tag/v1.26.0).
-- Upgrade [`go.uber.org/zap`](https://github.com/uber-go/zap/releases) from [**`v1.14.1`**](https://github.com/uber-go/zap/releases/tag/v1.14.1) to [**`v1.15.0`**](https://github.com/uber-go/zap/releases/tag/v1.15.0).
-
-### Release
-
-- Add s390x build support ([PR#11548](https://github.com/etcd-io/etcd/pull/11548) and [PR#11358](https://github.com/etcd-io/etcd/pull/11358))
-
-### Go
-
-- Require [*Go 1.15+*](https://github.com/etcd-io/etcd/pull/11110).
-- Compile with [*Go 1.15*](https://golang.org/doc/devel/release.html#go1.15)
-- etcd uses go [modules](https://github.com/etcd-io/etcd/pull/12279) (instead of vendor dir) to track dependencies.
-
-### Project Governance
-
-- The etcd team has added, a well defined and openly discussed, project [governance](https://github.com/etcd-io/etcd/pull/11175).
-
-
-
-
diff --git a/etcd-fix/CHANGELOG-4.0.md b/etcd-fix/CHANGELOG-4.0.md
deleted file mode 100644
index f423a3e..0000000
--- a/etcd-fix/CHANGELOG-4.0.md
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-Previous change logs can be found at [CHANGELOG-3.x](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.x.md).
-
-
-The minimum recommended etcd versions to run in **production** are 3.2.28+, 3.3.18+, and 3.4.2+.
-
-
-
-
-
-## v4.0.0 (TBD)
-
-See [code changes](https://github.com/etcd-io/etcd/compare/v3.5.0...v4.0.0) and [v4.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_4_0.md) for any breaking changes.
-
-**Again, before running upgrades from any previous release, please make sure to read change logs below and [v4.0 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_4_0.md).**
-
-### Breaking Changes
-
-- [Secure etcd by default](https://github.com/etcd-io/etcd/issues/9475)?
-- Change `/health` endpoint output.
- - Previously, `{"health":"true"}`.
- - Now, `{"health":true}`.
- - Breaks [Kubernetes `kubectl get componentstatuses` command](https://github.com/kubernetes/kubernetes/issues/58240).
-- Deprecate [`etcd --proxy*`](TODO) flags; **no more v2 proxy**.
-- Deprecate [v2 storage backend](https://github.com/etcd-io/etcd/issues/9232); **no more v2 store**.
- - v2 API is still supported via [v2 emulation](TODO).
-- Deprecate [`etcdctl backup`](TODO) command.
-- `clientv3.Client.KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error)` is now [`clientv4.Client.KeepAlive(ctx context.Context, id LeaseID) <-chan *LeaseKeepAliveResponse`](TODO).
- - Similar to `Watch`, [`KeepAlive` does not return errors](https://github.com/etcd-io/etcd/issues/7488).
- - If there's an unknown server error, kill all open channels and create a new stream on the next `KeepAlive` call.
-- Rename `github.com/coreos/client` to `github.com/coreos/clientv2`.
-- [`etcd --experimental-initial-corrupt-check`](TODO) has been deprecated.
- - Use [`etcd --initial-corrupt-check`](TODO) instead.
-- [`etcd --experimental-corrupt-check-time`](TODO) has been deprecated.
- - Use [`etcd --corrupt-check-time`](TODO) instead.
-- Enable TLS 1.13, deprecate TLS cipher suites.
-
-### etcd server
-
-- [`etcd --initial-corrupt-check`](TODO) flag is now stable (`etcd --experimental-initial-corrupt-check` has been deprecated).
- - `etcd --initial-corrupt-check=true` by default, to check cluster database hashes before serving client/peer traffic.
-- [`etcd --corrupt-check-time`](TODO) flag is now stable (`etcd --experimental-corrupt-check-time` has been deprecated).
- - `etcd --corrupt-check-time=12h` by default, to check cluster database hashes for every 12-hour.
-- Enable TLS 1.13, deprecate TLS cipher suites.
-
-### Go
-
-- Require [*Go 2*](https://blog.golang.org/go2draft).
-
-
-
-
diff --git a/etcd-fix/CONTRIBUTING.md b/etcd-fix/CONTRIBUTING.md
deleted file mode 100644
index 69b8191..0000000
--- a/etcd-fix/CONTRIBUTING.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# How to contribute
-
-etcd is Apache 2.0 licensed and accepts contributions via GitHub pull requests. This document outlines some of the conventions on commit message formatting, contact points for developers, and other resources to help get contributions into etcd.
-
-# Email and chat
-
-- Email: [etcd-dev](https://groups.google.com/forum/?hl=en#!forum/etcd-dev)
-- IRC: #[etcd](irc://irc.freenode.org:6667/#etcd) IRC channel on freenode.org
-- Slack: [#etcd](https://kubernetes.slack.com/messages/C3HD8ARJ5/details/)
-
-## Getting started
-
-- Fork the repository on GitHub
-- Read the README.md for build instructions
-
-## Reporting bugs and creating issues
-
-Reporting bugs is one of the best ways to contribute. However, a good bug report has some very specific qualities, so please read over our short document on [reporting bugs](https://github.com/etcd-io/etcd/blob/master/Documentation/reporting-bugs.md) before submitting a bug report. This document might contain links to known issues, another good reason to take a look there before reporting a bug.
-
-## Contribution flow
-
-This is a rough outline of what a contributor's workflow looks like:
-
-- Create a topic branch from where to base the contribution. This is usually master.
-- Make commits of logical units.
-- Make sure commit messages are in the proper format (see below).
-- Push changes in a topic branch to a personal fork of the repository.
-- Submit a pull request to etcd-io/etcd.
-- The PR must receive a LGTM from two maintainers found in the MAINTAINERS file.
-
-Thanks for contributing!
-
-### Code style
-
-The coding style suggested by the Golang community is used in etcd. See the [style doc](https://github.com/golang/go/wiki/CodeReviewComments) for details.
-
-Please follow this style to make etcd easy to review, maintain and develop.
-
-### Format of the commit message
-
-We follow a rough convention for commit messages that is designed to answer two
-questions: what changed and why. The subject line should feature the what and
-the body of the commit should describe the why.
-
-```
-etcdserver: add grpc interceptor to log info on incoming requests
-
-To improve debuggability of etcd v3. Added a grpc interceptor to log
-info on incoming requests to etcd server. The log output includes
-remote client info, request content (with value field redacted), request
-handling latency, response size, etc. Uses zap logger if available,
-otherwise uses capnslog.
-
-Fixes #38
-```
-
-The format can be described more formally as follows:
-
-```
-:
-
-
-
-
-```
-
-The first line is the subject and should be no longer than 70 characters, the second
-line is always blank, and other lines should be wrapped at 80 characters. This allows
-the message to be easier to read on GitHub as well as in various git tools.
-
-### Pull request across multiple files and packages
-
-If multiple files in a package are changed in a pull request for example:
-
-```
-etcdserver/config.go
-etcdserver/corrupt.go
-```
-
-At the end of the review process if multiple commits exist for a single package they
-should be squashed/rebased into a single commit before being merged.
-
-```
-etcdserver:
-[..]
-```
-
-If a pull request spans many packages these commits should be squashed/rebased into a single
-commit using message with a more generic `*:` prefix.
-
-```
-*:
-[..]
-```
diff --git a/etcd-fix/DCO b/etcd-fix/DCO
deleted file mode 100644
index 716561d..0000000
--- a/etcd-fix/DCO
+++ /dev/null
@@ -1,36 +0,0 @@
-Developer Certificate of Origin
-Version 1.1
-
-Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
-660 York Street, Suite 102,
-San Francisco, CA 94110 USA
-
-Everyone is permitted to copy and distribute verbatim copies of this
-license document, but changing it is not allowed.
-
-
-Developer's Certificate of Origin 1.1
-
-By making a contribution to this project, I certify that:
-
-(a) The contribution was created in whole or in part by me and I
- have the right to submit it under the open source license
- indicated in the file; or
-
-(b) The contribution is based upon previous work that, to the best
- of my knowledge, is covered under an appropriate open source
- license and I have the right under that license to submit that
- work with modifications, whether created in whole or in part
- by me, under the same open source license (unless I am
- permitted to submit under a different license), as indicated
- in the file; or
-
-(c) The contribution was provided directly to me by some other
- person who certified (a), (b) or (c) and I have not modified
- it.
-
-(d) I understand and agree that this project and the contribution
- are public and that a record of the contribution (including all
- personal information I submit with it, including my sign-off) is
- maintained indefinitely and may be redistributed consistent with
- this project or the open source license(s) involved.
diff --git a/etcd-fix/Dockerfile-release b/etcd-fix/Dockerfile-release
deleted file mode 100644
index f638c69..0000000
--- a/etcd-fix/Dockerfile-release
+++ /dev/null
@@ -1,17 +0,0 @@
-FROM us.gcr.io/k8s-artifacts-prod/build-image/debian-base:v2.1.0
-
-ADD etcd /usr/local/bin/
-ADD etcdctl /usr/local/bin/
-RUN mkdir -p /var/etcd/
-RUN mkdir -p /var/lib/etcd/
-
-# Alpine Linux doesn't use pam, which means that there is no /etc/nsswitch.conf,
-# but Golang relies on /etc/nsswitch.conf to check the order of DNS resolving
-# (see https://github.com/golang/go/commit/9dee7771f561cf6aee081c0af6658cc81fac3918)
-# To fix this we just create /etc/nsswitch.conf and add the following line:
-RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf
-
-EXPOSE 2379 2380
-
-# Define default command.
-CMD ["/usr/local/bin/etcd"]
diff --git a/etcd-fix/Dockerfile-release.arm64 b/etcd-fix/Dockerfile-release.arm64
deleted file mode 100644
index 4f1f634..0000000
--- a/etcd-fix/Dockerfile-release.arm64
+++ /dev/null
@@ -1,11 +0,0 @@
-FROM us.gcr.io/k8s-artifacts-prod/build-image/debian-base-arm64:v2.1.0
-
-ADD etcd /usr/local/bin/
-ADD etcdctl /usr/local/bin/
-ADD var/etcd /var/etcd
-ADD var/lib/etcd /var/lib/etcd
-
-EXPOSE 2379 2380
-
-# Define default command.
-CMD ["/usr/local/bin/etcd"]
diff --git a/etcd-fix/Dockerfile-release.ppc64le b/etcd-fix/Dockerfile-release.ppc64le
deleted file mode 100644
index 864758c..0000000
--- a/etcd-fix/Dockerfile-release.ppc64le
+++ /dev/null
@@ -1,11 +0,0 @@
-FROM us.gcr.io/k8s-artifacts-prod/build-image/debian-base-ppc64le:v2.1.0
-
-ADD etcd /usr/local/bin/
-ADD etcdctl /usr/local/bin/
-ADD var/etcd /var/etcd
-ADD var/lib/etcd /var/lib/etcd
-
-EXPOSE 2379 2380
-
-# Define default command.
-CMD ["/usr/local/bin/etcd"]
diff --git a/etcd-fix/Dockerfile-release.s390x b/etcd-fix/Dockerfile-release.s390x
deleted file mode 100644
index d31601e..0000000
--- a/etcd-fix/Dockerfile-release.s390x
+++ /dev/null
@@ -1,11 +0,0 @@
-FROM us.gcr.io/k8s-artifacts-prod/build-image/debian-base-s390x:v2.1.0
-
-ADD etcd /usr/local/bin/
-ADD etcdctl /usr/local/bin/
-ADD var/etcd /var/etcd
-ADD var/lib/etcd /var/lib/etcd
-
-EXPOSE 2379 2380
-
-# Define default command.
-CMD ["/usr/local/bin/etcd"]
diff --git a/etcd-fix/Documentation/README.md b/etcd-fix/Documentation/README.md
deleted file mode 100644
index 18fa776..0000000
--- a/etcd-fix/Documentation/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# The etcd documentation
-
-etcd is a distributed key-value store designed to reliably and quickly preserve and provide access to critical data. It enables reliable distributed coordination through distributed locking, leader elections, and write barriers. An etcd cluster is intended for high availability and permanent data storage and retrieval.
-
-Please note that the files in this directory are *source files* for the built and rendered documentation that can be viewed at [etcd.io/docs](https://etcd.io/docs).
\ No newline at end of file
diff --git a/etcd-fix/Documentation/_index.md b/etcd-fix/Documentation/_index.md
deleted file mode 100644
index cdf3f07..0000000
--- a/etcd-fix/Documentation/_index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: etcd version ___
-weight: 1000
----
-
-These docs cover everything from setting up and running an etcd cluster to using etcd in applications. Improvements to these docs are encouraged through [pull requests](https://help.github.com/en/articles/about-pull-requests) to the [etcd project](https://github.com/etcd-io/etcd) on GitHub.
diff --git a/etcd-fix/Documentation/benchmarks/README.md b/etcd-fix/Documentation/benchmarks/README.md
deleted file mode 100644
index 897112f..0000000
--- a/etcd-fix/Documentation/benchmarks/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Benchmarks
-
-etcd benchmarks will be published regularly and tracked for each release below:
-
-- [etcd v2.1.0-alpha][2.1]
-- [etcd v2.2.0-rc][2.2]
-- [etcd v3 demo][3.0]
-
-# Memory Usage Benchmarks
-
-It records expected memory usage in different scenarios.
-
-- [etcd v2.2.0-rc][2.2-mem]
-
-[2.1]: etcd-2-1-0-alpha-benchmarks.md
-[2.2]: etcd-2-2-0-rc-benchmarks.md
-[2.2-mem]: etcd-2-2-0-rc-memory-benchmarks.md
-[3.0]: etcd-3-demo-benchmarks.md
diff --git a/etcd-fix/Documentation/benchmarks/_index.md b/etcd-fix/Documentation/benchmarks/_index.md
deleted file mode 100644
index 0ba7d85..0000000
--- a/etcd-fix/Documentation/benchmarks/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Benchmarks
-weight: 5000
----
diff --git a/etcd-fix/Documentation/benchmarks/etcd-2-1-0-alpha-benchmarks.md b/etcd-fix/Documentation/benchmarks/etcd-2-1-0-alpha-benchmarks.md
deleted file mode 100644
index 7f2e4a3..0000000
--- a/etcd-fix/Documentation/benchmarks/etcd-2-1-0-alpha-benchmarks.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: Benchmarking etcd v2.1.0
----
-
-## Physical machines
-
-GCE n1-highcpu-2 machine type
-
-- 1x dedicated local SSD mounted under /var/lib/etcd
-- 1x dedicated slow disk for the OS
-- 1.8 GB memory
-- 2x CPUs
-- etcd version 2.1.0 alpha
-
-## etcd Cluster
-
-3 etcd members, each runs on a single machine
-
-## Testing
-
-Bootstrap another machine and use the [hey HTTP benchmark tool][hey] to send requests to each etcd member. Check the [benchmark hacking guide][hack-benchmark] for detailed instructions.
-
-## Performance
-
-### reading one single key
-
-| key size in bytes | number of clients | target etcd server | read QPS | 90th Percentile Latency (ms) |
-|-------------------|-------------------|--------------------|----------|---------------|
-| 64 | 1 | leader only | 1534 | 0.7 |
-| 64 | 64 | leader only | 10125 | 9.1 |
-| 64 | 256 | leader only | 13892 | 27.1 |
-| 256 | 1 | leader only | 1530 | 0.8 |
-| 256 | 64 | leader only | 10106 | 10.1 |
-| 256 | 256 | leader only | 14667 | 27.0 |
-| 64 | 64 | all servers | 24200 | 3.9 |
-| 64 | 256 | all servers | 33300 | 11.8 |
-| 256 | 64 | all servers | 24800 | 3.9 |
-| 256 | 256 | all servers | 33000 | 11.5 |
-
-### writing one single key
-
-| key size in bytes | number of clients | target etcd server | write QPS | 90th Percentile Latency (ms) |
-|-------------------|-------------------|--------------------|-----------|---------------|
-| 64 | 1 | leader only | 60 | 21.4 |
-| 64 | 64 | leader only | 1742 | 46.8 |
-| 64 | 256 | leader only | 3982 | 90.5 |
-| 256 | 1 | leader only | 58 | 20.3 |
-| 256 | 64 | leader only | 1770 | 47.8 |
-| 256 | 256 | leader only | 4157 | 105.3 |
-| 64 | 64 | all servers | 1028 | 123.4 |
-| 64 | 256 | all servers | 3260 | 123.8 |
-| 256 | 64 | all servers | 1033 | 121.5 |
-| 256 | 256 | all servers | 3061 | 119.3 |
-
-[hey]: https://github.com/rakyll/hey
-[hack-benchmark]: https://github.com/coreos/etcd/tree/master/hack/benchmark
diff --git a/etcd-fix/Documentation/benchmarks/etcd-2-2-0-benchmarks.md b/etcd-fix/Documentation/benchmarks/etcd-2-2-0-benchmarks.md
deleted file mode 100644
index 6aae359..0000000
--- a/etcd-fix/Documentation/benchmarks/etcd-2-2-0-benchmarks.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: Benchmarking etcd v2.2.0
----
-
-## Physical Machines
-
-GCE n1-highcpu-2 machine type
-
-- 1x dedicated local SSD mounted as etcd data directory
-- 1x dedicated slow disk for the OS
-- 1.8 GB memory
-- 2x CPUs
-
-## etcd Cluster
-
-3 etcd 2.2.0 members, each runs on a single machine.
-
-Detailed versions:
-
-```
-etcd Version: 2.2.0
-Git SHA: e4561dd
-Go Version: go1.5
-Go OS/Arch: linux/amd64
-```
-
-## Testing
-
-Bootstrap another machine, outside of the etcd cluster, and run the [`hey` HTTP benchmark tool](https://github.com/rakyll/hey) with a connection reuse patch to send requests to each etcd cluster member. See the [benchmark instructions](../../hack/benchmark/) for the patch and the steps to reproduce our procedures.
-
-The performance is calculated through results of 100 benchmark rounds.
-
-## Performance
-
-### Single Key Read Performance
-
-| key size in bytes | number of clients | target etcd server | average read QPS | read QPS stddev | average 90th Percentile Latency (ms) | latency stddev |
-|-------------------|-------------------|--------------------|------------------|-----------------|--------------------------------------|----------------|
-| 64 | 1 | leader only | 2303 | 200 | 0.49 | 0.06 |
-| 64 | 64 | leader only | 15048 | 685 | 7.60 | 0.46 |
-| 64 | 256 | leader only | 14508 | 434 | 29.76 | 1.05 |
-| 256 | 1 | leader only | 2162 | 214 | 0.52 | 0.06 |
-| 256 | 64 | leader only | 14789 | 792 | 7.69| 0.48 |
-| 256 | 256 | leader only | 14424 | 512 | 29.92 | 1.42 |
-| 64 | 64 | all servers | 45752 | 2048 | 2.47 | 0.14 |
-| 64 | 256 | all servers | 46592 | 1273 | 10.14 | 0.59 |
-| 256 | 64 | all servers | 45332 | 1847 | 2.48| 0.12 |
-| 256 | 256 | all servers | 46485 | 1340 | 10.18 | 0.74 |
-
-### Single Key Write Performance
-
-| key size in bytes | number of clients | target etcd server | average write QPS | write QPS stddev | average 90th Percentile Latency (ms) | latency stddev |
-|-------------------|-------------------|--------------------|------------------|-----------------|--------------------------------------|----------------|
-| 64 | 1 | leader only | 55 | 4 | 24.51 | 13.26 |
-| 64 | 64 | leader only | 2139 | 125 | 35.23 | 3.40 |
-| 64 | 256 | leader only | 4581 | 581 | 70.53 | 10.22 |
-| 256 | 1 | leader only | 56 | 4 | 22.37| 4.33 |
-| 256 | 64 | leader only | 2052 | 151 | 36.83 | 4.20 |
-| 256 | 256 | leader only | 4442 | 560 | 71.59 | 10.03 |
-| 64 | 64 | all servers | 1625 | 85 | 58.51 | 5.14 |
-| 64 | 256 | all servers | 4461 | 298 | 89.47 | 36.48 |
-| 256 | 64 | all servers | 1599 | 94 | 60.11| 6.43 |
-| 256 | 256 | all servers | 4315 | 193 | 88.98 | 7.01 |
-
-## Performance Changes
-
-- Because etcd now records metrics for each API call, read QPS performance seems to see a minor decrease in most scenarios. This minimal performance impact was judged a reasonable investment for the breadth of monitoring and debugging information returned.
-
-- Write QPS to cluster leaders seems to be increased by a small margin. This is because the main loop and entry apply loops were decoupled in the etcd raft logic, eliminating several blocks between them.
-
-- Write QPS to all members seems to be increased by a significant margin, because followers now receive the latest commit index sooner, and commit proposals more quickly.
diff --git a/etcd-fix/Documentation/benchmarks/etcd-2-2-0-rc-benchmarks.md b/etcd-fix/Documentation/benchmarks/etcd-2-2-0-rc-benchmarks.md
deleted file mode 100644
index df32510..0000000
--- a/etcd-fix/Documentation/benchmarks/etcd-2-2-0-rc-benchmarks.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: Benchmarking etcd v2.2.0-rc
----
-
-## Physical machine
-
-GCE n1-highcpu-2 machine type
-
-- 1x dedicated local SSD mounted under /var/lib/etcd
-- 1x dedicated slow disk for the OS
-- 1.8 GB memory
-- 2x CPUs
-
-## etcd Cluster
-
-3 etcd 2.2.0-rc members, each runs on a single machine.
-
-Detailed versions:
-
-```
-etcd Version: 2.2.0-alpha.1+git
-Git SHA: 59a5a7e
-Go Version: go1.4.2
-Go OS/Arch: linux/amd64
-```
-
-Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd's commit head is at [c7146bd5][c7146bd5], which is the same as the one that we use in [etcd 2.1 benchmark][etcd-2.1-benchmark].
-
-## Testing
-
-Bootstrap another machine and use the [hey HTTP benchmark tool][hey] to send requests to each etcd member. Check the [benchmark hacking guide][hack-benchmark] for detailed instructions.
-
-## Performance
-
-### reading one single key
-
-| key size in bytes | number of clients | target etcd server | read QPS | 90th Percentile Latency (ms) |
-|-------------------|-------------------|--------------------|----------|---------------|
-| 64 | 1 | leader only | 2804 (-5%) | 0.4 (+0%) |
-| 64 | 64 | leader only | 17816 (+0%) | 5.7 (-6%) |
-| 64 | 256 | leader only | 18667 (-6%) | 20.4 (+2%) |
-| 256 | 1 | leader only | 2181 (-15%) | 0.5 (+25%) |
-| 256 | 64 | leader only | 17435 (-7%) | 6.0 (+9%) |
-| 256 | 256 | leader only | 18180 (-8%) | 21.3 (+3%) |
-| 64 | 64 | all servers | 46965 (-4%) | 2.1 (+0%) |
-| 64 | 256 | all servers | 55286 (-6%) | 7.4 (+6%) |
-| 256 | 64 | all servers | 46603 (-6%) | 2.1 (+5%) |
-| 256 | 256 | all servers | 55291 (-6%) | 7.3 (+4%) |
-
-### writing one single key
-
-| key size in bytes | number of clients | target etcd server | write QPS | 90th Percentile Latency (ms) |
-|-------------------|-------------------|--------------------|-----------|---------------|
-| 64 | 1 | leader only | 76 (+22%) | 19.4 (-15%) |
-| 64 | 64 | leader only | 2461 (+45%) | 31.8 (-32%) |
-| 64 | 256 | leader only | 4275 (+1%) | 69.6 (-10%) |
-| 256 | 1 | leader only | 64 (+20%) | 16.7 (-30%) |
-| 256 | 64 | leader only | 2385 (+30%) | 31.5 (-19%) |
-| 256 | 256 | leader only | 4353 (-3%) | 74.0 (+9%) |
-| 64 | 64 | all servers | 2005 (+81%) | 49.8 (-55%) |
-| 64 | 256 | all servers | 4868 (+35%) | 81.5 (-40%) |
-| 256 | 64 | all servers | 1925 (+72%) | 47.7 (-59%) |
-| 256 | 256 | all servers | 4975 (+36%) | 70.3 (-36%) |
-
-### performance changes explanation
-
-- read QPS in most scenarios is decreased by 5~8%. The reason is that etcd records store metrics for each store operation. The metrics is important for monitoring and debugging, so this is acceptable.
-
-- write QPS to leader is increased by 20~30%. This is because we decouple raft main loop and entry apply loop, which avoids them blocking each other.
-
-- write QPS to all servers is increased by 30~80% because follower could receive latest commit index earlier and commit proposals faster.
-
-[hey]: https://github.com/rakyll/hey
-[c7146bd5]: https://github.com/coreos/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144
-[etcd-2.1-benchmark]: etcd-2-1-0-alpha-benchmarks.md
-[hack-benchmark]: ../../hack/benchmark/
diff --git a/etcd-fix/Documentation/benchmarks/etcd-2-2-0-rc-memory-benchmarks.md b/etcd-fix/Documentation/benchmarks/etcd-2-2-0-rc-memory-benchmarks.md
deleted file mode 100644
index 7244c69..0000000
--- a/etcd-fix/Documentation/benchmarks/etcd-2-2-0-rc-memory-benchmarks.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: Benchmarking etcd v2.2.0-rc-memory
----
-
-## Physical machine
-
-GCE n1-standard-2 machine type
-
-- 1x dedicated local SSD mounted under /var/lib/etcd
-- 1x dedicated slow disk for the OS
-- 7.5 GB memory
-- 2x CPUs
-
-## etcd
-
-```
-etcd Version: 2.2.0-rc.0+git
-Git SHA: 103cb5c
-Go Version: go1.5
-Go OS/Arch: linux/amd64
-```
-
-## Testing
-
-Start 3-member etcd cluster, each of which uses 2 cores.
-
-The length of key name is always 64 bytes, which is a reasonable length of average key bytes.
-
-## Memory Maximal Usage
-
-- etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.
-- `max RSS` is the maximal memory usage recorded in 3 runs.
-
-| value bytes | key number | data size(MB) | max RSS(MB) | max RSS/data rate on leader |
-|-------------|-------------|---------------|-------------|-----------------------------|
-| 128 | 50000 | 6 | 433 | 72x |
-| 128 | 100000 | 12 | 659 | 54x |
-| 128 | 200000 | 24 | 1466 | 61x |
-| 1024 | 50000 | 48 | 1253 | 26x |
-| 1024 | 100000 | 96 | 2344 | 24x |
-| 1024 | 200000 | 192 | 4361 | 22x |
-
-## Data Size Threshold
-
-- When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.
-- For most cases, the etcd cluster should work smoothly if it doesn't hit the threshold. If it doesn't work well due to insufficient resources, decrease its data size.
-
-| value bytes | key number limitation | suggested data size threshold(MB) | consumed RSS(MB) |
-|-------------|-----------------------|-----------------------------------|------------------|
-| 128 | 400K | 48 | 2400 |
-| 1024 | 300K | 292 | 6500 |
diff --git a/etcd-fix/Documentation/benchmarks/etcd-3-demo-benchmarks.md b/etcd-fix/Documentation/benchmarks/etcd-3-demo-benchmarks.md
deleted file mode 100644
index 13ed2fe..0000000
--- a/etcd-fix/Documentation/benchmarks/etcd-3-demo-benchmarks.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: Benchmarking etcd v3
----
-
-## Physical machines
-
-GCE n1-highcpu-2 machine type
-
-- 1x dedicated local SSD mounted under /var/lib/etcd
-- 1x dedicated slow disk for the OS
-- 1.8 GB memory
-- 2x CPUs
-- etcd version 2.2.0
-
-## etcd Cluster
-
-1 etcd member running in v3 demo mode
-
-## Testing
-
-Use [etcd v3 benchmark tool][etcd-v3-benchmark].
-
-## Performance
-
-### reading one single key
-
-| key size in bytes | number of clients | read QPS | 90th Percentile Latency (ms) |
-|-------------------|-------------------|----------|---------------|
-| 256 | 1 | 2716 | 0.4 |
-| 256 | 64 | 16623 | 6.1 |
-| 256 | 256 | 16622 | 21.7 |
-
-The performance is nearly the same as the one with empty server handler.
-
-### reading one single key after putting
-
-| key size in bytes | number of clients | read QPS | 90th Percentile Latency (ms) |
-|-------------------|-------------------|----------|---------------|
-| 256 | 1 | 2269 | 0.5 |
-| 256 | 64 | 13582 | 8.6 |
-| 256 | 256 | 13262 | 47.5 |
-
-The performance with empty server handler is not affected by one put. So the
-performance downgrade should be caused by storage package.
-
-[etcd-v3-benchmark]: ../../tools/benchmark/
diff --git a/etcd-fix/Documentation/benchmarks/etcd-3-watch-memory-benchmark.md b/etcd-fix/Documentation/benchmarks/etcd-3-watch-memory-benchmark.md
deleted file mode 100644
index 226e10d..0000000
--- a/etcd-fix/Documentation/benchmarks/etcd-3-watch-memory-benchmark.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: Watch Memory Usage Benchmark
----
-
-*NOTE*: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.
-
-A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd's overall usage, and is therefore the focus of current and future optimizations.
-
-
-Three related components of etcd watch consume physical memory: each `grpc.Conn`, each watch stream, and each instance of the watching activity. `grpc.Conn` maintains the actual TCP connection and other gRPC connection state. Each `grpc.Conn` consumes O(10kb) of memory, and might have multiple watch streams attached.
-
-Each watch stream is an independent HTTP2 connection which consumes another O(10kb) of memory.
-Multiple watchings might share one watch stream.
-
-Watching is the actual struct that tracks the changes on the key-value store. Each watching should only consume < O(1kb).
-
-```
- +-------+
- | watch |
- +---------> | foo |
- | +-------+
- +------+-----+
- | stream |
- +--------------> | |
- | +------+-----+ +-------+
- | | | watch |
- | +---------> | bar |
-+-----+------+ +-------+
-| | +------------+
-| conn +-------> | stream |
-| | | |
-+-----+------+ +------------+
- |
- |
- |
- | +------------+
- +--------------> | stream |
- | |
- +------------+
-```
-
-The theoretical memory consumption of watch can be approximated with the formula:
-`memory = c1 * number_of_conn + c2 * avg_number_of_stream_per_conn + c3 * avg_number_of_watch_stream`
-
-## Testing Environment
-
-etcd version
-- git head https://github.com/coreos/etcd/commit/185097ffaa627b909007e772c175e8fefac17af3
-
-GCE n1-standard-2 machine type
-- 7.5 GB memory
-- 2x CPUs
-
-## Overall memory usage
-
-The overall memory usage captures how much [RSS][rss] etcd consumes with the client watchers. While the result may vary by as much as 10%, it is still meaningful, since the goal is to learn about the rough memory usage and the pattern of allocations.
-
-With the benchmark result, we can calculate roughly that `c1 = 17kb`, `c2 = 18kb` and `c3 = 350bytes`. So each additional client connection consumes 17kb of memory and each additional stream consumes 18kb of memory, and each additional watching only cause 350bytes. A single etcd server can maintain millions of watchings with a few GB of memory in normal case.
-
-
-| clients | streams per client | watchings per stream | total watching | memory usage |
-|---------|---------|-----------|----------------|--------------|
-| 1k | 1 | 1 | 1k | 50MB |
-| 2k | 1 | 1 | 2k | 90MB |
-| 5k | 1 | 1 | 5k | 200MB |
-| 1k | 10 | 1 | 10k | 217MB |
-| 2k | 10 | 1 | 20k | 417MB |
-| 5k | 10 | 1 | 50k | 980MB |
-| 1k | 50 | 1 | 50k | 1001MB |
-| 2k | 50 | 1 | 100k | 1960MB |
-| 5k | 50 | 1 | 250k | 4700MB |
-| 1k | 50 | 10 | 500k | 1171MB |
-| 2k | 50 | 10 | 1M | 2371MB |
-| 5k | 50 | 10 | 2.5M | 5710MB |
-| 1k | 50 | 100 | 5M | 2380MB |
-| 2k | 50 | 100 | 10M | 4672MB |
-| 5k | 50 | 100 | 25M | *OOM* |
-
-[rss]: https://en.wikipedia.org/wiki/Resident_set_size
diff --git a/etcd-fix/Documentation/benchmarks/etcd-storage-memory-benchmark.md b/etcd-fix/Documentation/benchmarks/etcd-storage-memory-benchmark.md
deleted file mode 100644
index 034f622..0000000
--- a/etcd-fix/Documentation/benchmarks/etcd-storage-memory-benchmark.md
+++ /dev/null
@@ -1,100 +0,0 @@
----
-title: Storage Memory Usage Benchmark
----
-
-
-Two components of etcd storage consume physical memory. The etcd process allocates an *in-memory index* to speed key lookup. The process's *page cache*, managed by the operating system, stores recently-accessed data from disk for quick re-use.
-
-The in-memory index holds all the keys in a [B-tree][btree] data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:
-
-`N * (c1 + avg_key_size) + N * (avg_versions_of_key) * (c2 + size_of_pointer)`
-
-where `c1` is the key metadata overhead and `c2` is the version metadata overhead.
-
-The graph shows the detailed structure of the in-memory index B-tree.
-
-```
-
-
- In mem index
-
- +------------+
- | key || ... |
- +--------------+ | || |
- | | +------------+
- | | | v1 || ... |
- | disk <----------------| || | Tree Node
- | | +------------+
- | | | v2 || ... |
- | <----------------+ || |
- | | +------------+
- +--------------+ +-----+ | | |
- | | | | |
- | +------------+
- |
- |
- ^
- ------+
- | ... |
- | |
- +-----+
- | ... | Tree Node
- | |
- +-----+
- | ... |
- | |
- ------+
-```
-
-[Page cache memory][pagecache] is managed by the operating system and is not covered in detail in this document.
-
-## Testing Environment
-
-etcd version
-- git head https://github.com/coreos/etcd/commit/776e9fb7be7eee5e6b58ab977c8887b4fe4d48db
-
-GCE n1-standard-2 machine type
-
-- 7.5 GB memory
-- 2x CPUs
-
-## In-memory index memory usage
-
-In this test, we only benchmark the memory usage of the in-memory index. The goal is to find `c1` and `c2` mentioned above and to understand the hard limit of memory consumption of the storage.
-
-We calculate the memory usage consumption via the Go runtime.ReadMemStats. We calculate the total allocated bytes difference before creating the index and after creating the index. It cannot perfectly reflect the memory usage of the in-memory index itself but can show the rough consumption pattern.
-
-| N | versions | key size | memory usage |
-|------|----------|----------|--------------|
-| 100K | 1 | 64bytes | 22MB |
-| 100K | 5 | 64bytes | 39MB |
-| 1M | 1 | 64bytes | 218MB |
-| 1M | 5 | 64bytes | 432MB |
-| 100K | 1 | 256bytes | 41MB |
-| 100K | 5 | 256bytes | 65MB |
-| 1M | 1 | 256bytes | 409MB |
-| 1M | 5 | 256bytes | 506MB |
-
-
-Based on the result, we can calculate `c1=120bytes`, `c2=30bytes`. We only need two sets of data to calculate `c1` and `c2`, since they are the only unknown variable in the formula. The `c1=120bytes` and `c2=30bytes` are the average value of the 4 sets of `c1` and `c2` we calculated. The key metadata overhead is still relatively nontrivial (50%) for small key-value pairs. However, this is a significant improvement over the old store, which had at least 1000% overhead.
-
-## Overall memory usage
-
-The overall memory usage captures how much RSS etcd consumes with the storage. The value size should have very little impact on the overall memory usage of etcd, since we keep values on disk and only retain hot values in memory, managed by the OS page cache.
-
-| N | versions | key size | value size | memory usage |
-|------|----------|----------|------------|--------------|
-| 100K | 1 | 64bytes | 256bytes | 40MB |
-| 100K | 5 | 64bytes | 256bytes | 89MB |
-| 1M | 1 | 64bytes | 256bytes | 470MB |
-| 1M | 5 | 64bytes | 256bytes | 880MB |
-| 100K | 1 | 64bytes | 1KB | 102MB |
-| 100K | 5 | 64bytes | 1KB | 164MB |
-| 1M | 1 | 64bytes | 1KB | 587MB |
-| 1M | 5 | 64bytes | 1KB | 836MB |
-
-Based on the result, we know the value size does not significantly impact the memory consumption. There is some minor increase due to more data held in the OS page cache.
-
-[btree]: https://en.wikipedia.org/wiki/B-tree
-[pagecache]: https://en.wikipedia.org/wiki/Page_cache
-
diff --git a/etcd-fix/Documentation/branch-management.md b/etcd-fix/Documentation/branch-management.md
deleted file mode 100644
index 842ca34..0000000
--- a/etcd-fix/Documentation/branch-management.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Branch management
-weight: 1
----
-
-## Guide
-
-* New development occurs on the [master branch][master].
-* Master branch should always have a green build!
-* Backwards-compatible bug fixes should target the master branch and subsequently be ported to stable branches.
-* Once the master branch is ready for release, it will be tagged and become the new stable branch.
-
-The etcd team has adopted a *rolling release model* and supports two stable versions of etcd.
-
-### Master branch
-
-The `master` branch is our development branch. All new features land here first.
-
-To try new and experimental features, pull `master` and play with it. Note that `master` may not be stable because new features may introduce bugs.
-
-Before the release of the next stable version, feature PRs will be frozen. A [release manager](./dev-internal/release.md#release-management) will be assigned to major/minor version and will lead the etcd community in test, bug-fix and documentation of the release for one to two weeks.
-
-### Stable branches
-
-All branches with prefix `release-` are considered _stable_ branches.
-
-After every minor release (http://semver.org/), we will have a new stable branch for that release, managed by a [patch release manager](./dev-internal/release.md#release-management). We will keep fixing the backwards-compatible bugs for the latest two stable releases. A _patch_ release to each supported release branch, incorporating any bug fixes, will be once every two weeks, given any patches.
-
-[master]: https://github.com/coreos/etcd/tree/master
diff --git a/etcd-fix/Documentation/demo.md b/etcd-fix/Documentation/demo.md
deleted file mode 100644
index 3babec6..0000000
--- a/etcd-fix/Documentation/demo.md
+++ /dev/null
@@ -1,462 +0,0 @@
----
-title: Demo
-weight: 1
----
-
-This series of examples shows the basic procedures for working with an etcd cluster.
-
-## Set up a cluster
-
-![01_etcd_clustering_2016050601](https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif)
-
-On each etcd node, specify the cluster members:
-
-```shell
-TOKEN=token-01
-CLUSTER_STATE=new
-NAME_1=machine-1
-NAME_2=machine-2
-NAME_3=machine-3
-HOST_1=10.240.0.17
-HOST_2=10.240.0.18
-HOST_3=10.240.0.19
-CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
-```
-
-Run this on each machine:
-
-```shell
-# For machine 1
-THIS_NAME=${NAME_1}
-THIS_IP=${HOST_1}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-
-# For machine 2
-THIS_NAME=${NAME_2}
-THIS_IP=${HOST_2}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-
-# For machine 3
-THIS_NAME=${NAME_3}
-THIS_IP=${HOST_3}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-```
-
-Or use our public discovery service:
-
-```shell
-curl https://discovery.etcd.io/new?size=3
-https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92
-
-# grab this token
-TOKEN=token-01
-CLUSTER_STATE=new
-NAME_1=machine-1
-NAME_2=machine-2
-NAME_3=machine-3
-HOST_1=10.240.0.17
-HOST_2=10.240.0.18
-HOST_3=10.240.0.19
-DISCOVERY=https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92
-
-THIS_NAME=${NAME_1}
-THIS_IP=${HOST_1}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
- --discovery ${DISCOVERY} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-
-THIS_NAME=${NAME_2}
-THIS_IP=${HOST_2}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
- --discovery ${DISCOVERY} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-
-THIS_NAME=${NAME_3}
-THIS_IP=${HOST_3}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
- --discovery ${DISCOVERY} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-```
-
-Now etcd is ready! To connect to etcd with etcdctl:
-
-```shell
-export ETCDCTL_API=3
-HOST_1=10.240.0.17
-HOST_2=10.240.0.18
-HOST_3=10.240.0.19
-ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379
-
-etcdctl --endpoints=$ENDPOINTS member list
-```
-
-
-## Access etcd
-
-![02_etcdctl_access_etcd_2016051001](https://storage.googleapis.com/etcd/demo/02_etcdctl_access_etcd_2016051001.gif)
-
-`put` command to write:
-
-```shell
-etcdctl --endpoints=$ENDPOINTS put foo "Hello World!"
-```
-
-`get` to read from etcd:
-
-```shell
-etcdctl --endpoints=$ENDPOINTS get foo
-etcdctl --endpoints=$ENDPOINTS --write-out="json" get foo
-```
-
-
-## Get by prefix
-
-![03_etcdctl_get_by_prefix_2016050501](https://storage.googleapis.com/etcd/demo/03_etcdctl_get_by_prefix_2016050501.gif)
-
-```shell
-etcdctl --endpoints=$ENDPOINTS put web1 value1
-etcdctl --endpoints=$ENDPOINTS put web2 value2
-etcdctl --endpoints=$ENDPOINTS put web3 value3
-
-etcdctl --endpoints=$ENDPOINTS get web --prefix
-```
-
-
-## Delete
-
-![04_etcdctl_delete_2016050601](https://storage.googleapis.com/etcd/demo/04_etcdctl_delete_2016050601.gif)
-
-```shell
-etcdctl --endpoints=$ENDPOINTS put key myvalue
-etcdctl --endpoints=$ENDPOINTS del key
-
-etcdctl --endpoints=$ENDPOINTS put k1 value1
-etcdctl --endpoints=$ENDPOINTS put k2 value2
-etcdctl --endpoints=$ENDPOINTS del k --prefix
-```
-
-
-## Transactional write
-
-`txn` to wrap multiple requests into one transaction:
-
-![05_etcdctl_transaction_2016050501](https://storage.googleapis.com/etcd/demo/05_etcdctl_transaction_2016050501.gif)
-
-```shell
-etcdctl --endpoints=$ENDPOINTS put user1 bad
-etcdctl --endpoints=$ENDPOINTS txn --interactive
-
-compares:
-value("user1") = "bad"
-
-success requests (get, put, delete):
-del user1
-
-failure requests (get, put, delete):
-put user1 good
-```
-
-
-## Watch
-
-`watch` to get notified of future changes:
-
-![06_etcdctl_watch_2016050501](https://storage.googleapis.com/etcd/demo/06_etcdctl_watch_2016050501.gif)
-
-```shell
-etcdctl --endpoints=$ENDPOINTS watch stock1
-etcdctl --endpoints=$ENDPOINTS put stock1 1000
-
-etcdctl --endpoints=$ENDPOINTS watch stock --prefix
-etcdctl --endpoints=$ENDPOINTS put stock1 10
-etcdctl --endpoints=$ENDPOINTS put stock2 20
-```
-
-
-## Lease
-
-`lease` to write with TTL:
-
-
-![07_etcdctl_lease_2016050501](https://storage.googleapis.com/etcd/demo/07_etcdctl_lease_2016050501.gif)
-
-```shell
-etcdctl --endpoints=$ENDPOINTS lease grant 300
-# lease 2be7547fbc6a5afa granted with TTL(300s)
-
-etcdctl --endpoints=$ENDPOINTS put sample value --lease=2be7547fbc6a5afa
-etcdctl --endpoints=$ENDPOINTS get sample
-
-etcdctl --endpoints=$ENDPOINTS lease keep-alive 2be7547fbc6a5afa
-etcdctl --endpoints=$ENDPOINTS lease revoke 2be7547fbc6a5afa
-# or after 300 seconds
-etcdctl --endpoints=$ENDPOINTS get sample
-```
-
-
-## Distributed locks
-
-`lock` for distributed lock:
-
-![08_etcdctl_lock_2016050501](https://storage.googleapis.com/etcd/demo/08_etcdctl_lock_2016050501.gif)
-
-```shell
-etcdctl --endpoints=$ENDPOINTS lock mutex1
-
-# another client with the same name blocks
-etcdctl --endpoints=$ENDPOINTS lock mutex1
-```
-
-
-## Elections
-
-`elect` for leader election:
-
-![09_etcdctl_elect_2016050501](https://storage.googleapis.com/etcd/demo/09_etcdctl_elect_2016050501.gif)
-
-```shell
-etcdctl --endpoints=$ENDPOINTS elect one p1
-
-# another client with the same name blocks
-etcdctl --endpoints=$ENDPOINTS elect one p2
-```
-
-
-## Cluster status
-
-Specify the initial cluster configuration for each machine:
-
-![10_etcdctl_endpoint_2016050501](https://storage.googleapis.com/etcd/demo/10_etcdctl_endpoint_2016050501.gif)
-
-```shell
-etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status
-
-+------------------+------------------+---------+---------+-----------+-----------+------------+
-| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
-+------------------+------------------+---------+---------+-----------+-----------+------------+
-| 10.240.0.17:2379 | 4917a7ab173fabe7 | 3.0.0 | 45 kB | true | 4 | 16726 |
-| 10.240.0.18:2379 | 59796ba9cd1bcd72 | 3.0.0 | 45 kB | false | 4 | 16726 |
-| 10.240.0.19:2379 | 94df724b66343e6c | 3.0.0 | 45 kB | false | 4 | 16726 |
-+------------------+------------------+---------+---------+-----------+-----------+------------+
-```
-
-```shell
-etcdctl --endpoints=$ENDPOINTS endpoint health
-
-10.240.0.17:2379 is healthy: successfully committed proposal: took = 3.345431ms
-10.240.0.19:2379 is healthy: successfully committed proposal: took = 3.767967ms
-10.240.0.18:2379 is healthy: successfully committed proposal: took = 4.025451ms
-```
-
-
-## Snapshot
-
-`snapshot` to save point-in-time snapshot of etcd database:
-
-![11_etcdctl_snapshot_2016051001](https://storage.googleapis.com/etcd/demo/11_etcdctl_snapshot_2016051001.gif)
-
-Snapshot can only be requested from one etcd node, so `--endpoints` flag should contain only one endpoint.
-
-```shell
-ENDPOINTS=$HOST_1:2379
-etcdctl --endpoints=$ENDPOINTS snapshot save my.db
-
-Snapshot saved at my.db
-```
-
-```shell
-etcdctl --write-out=table --endpoints=$ENDPOINTS snapshot status my.db
-
-+---------+----------+------------+------------+
-| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
-+---------+----------+------------+------------+
-| c55e8b8 | 9 | 13 | 25 kB |
-+---------+----------+------------+------------+
-```
-
-
-## Migrate
-
-`migrate` to transform etcd v2 to v3 data:
-
-![12_etcdctl_migrate_2016061602](https://storage.googleapis.com/etcd/demo/12_etcdctl_migrate_2016061602.gif)
-
-
-```shell
-# write key in etcd version 2 store
-export ETCDCTL_API=2
-etcdctl --endpoints=http://$ENDPOINT set foo bar
-
-# read key in etcd v2
-etcdctl --endpoints=$ENDPOINTS --output="json" get foo
-
-# stop etcd node to migrate, one by one
-
-# migrate v2 data
-export ETCDCTL_API=3
-etcdctl --endpoints=$ENDPOINT migrate --data-dir="default.etcd" --wal-dir="default.etcd/member/wal"
-
-# restart etcd node after migrate, one by one
-
-# confirm that the key got migrated
-etcdctl --endpoints=$ENDPOINTS get /foo
-```
-
-
-## Member
-
-`member` to add,remove,update membership:
-
-![13_etcdctl_member_2016062301](https://storage.googleapis.com/etcd/demo/13_etcdctl_member_2016062301.gif)
-
-```shell
-# For each machine
-TOKEN=my-etcd-token-1
-CLUSTER_STATE=new
-NAME_1=etcd-node-1
-NAME_2=etcd-node-2
-NAME_3=etcd-node-3
-HOST_1=10.240.0.13
-HOST_2=10.240.0.14
-HOST_3=10.240.0.15
-CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
-
-# For node 1
-THIS_NAME=${NAME_1}
-THIS_IP=${HOST_1}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 \
- --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 \
- --listen-client-urls http://${THIS_IP}:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} \
- --initial-cluster-token ${TOKEN}
-
-# For node 2
-THIS_NAME=${NAME_2}
-THIS_IP=${HOST_2}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 \
- --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 \
- --listen-client-urls http://${THIS_IP}:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} \
- --initial-cluster-token ${TOKEN}
-
-# For node 3
-THIS_NAME=${NAME_3}
-THIS_IP=${HOST_3}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 \
- --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 \
- --listen-client-urls http://${THIS_IP}:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} \
- --initial-cluster-token ${TOKEN}
-```
-
-Then replace a member with `member remove` and `member add` commands:
-
-```shell
-# get member ID
-export ETCDCTL_API=3
-HOST_1=10.240.0.13
-HOST_2=10.240.0.14
-HOST_3=10.240.0.15
-etcdctl --endpoints=${HOST_1}:2379,${HOST_2}:2379,${HOST_3}:2379 member list
-
-# remove the member
-MEMBER_ID=278c654c9a6dfd3b
-etcdctl --endpoints=${HOST_1}:2379,${HOST_2}:2379,${HOST_3}:2379 \
- member remove ${MEMBER_ID}
-
-# add a new member (node 4)
-export ETCDCTL_API=3
-NAME_1=etcd-node-1
-NAME_2=etcd-node-2
-NAME_4=etcd-node-4
-HOST_1=10.240.0.13
-HOST_2=10.240.0.14
-HOST_4=10.240.0.16 # new member
-etcdctl --endpoints=${HOST_1}:2379,${HOST_2}:2379 \
- member add ${NAME_4} \
- --peer-urls=http://${HOST_4}:2380
-```
-
-Next, start the new member with `--initial-cluster-state existing` flag:
-
-```shell
-# [WARNING] If the new member starts from the same disk space,
-# make sure to remove the data directory of the old member
-#
-# restart with 'existing' flag
-TOKEN=my-etcd-token-1
-CLUSTER_STATE=existing
-NAME_1=etcd-node-1
-NAME_2=etcd-node-2
-NAME_4=etcd-node-4
-HOST_1=10.240.0.13
-HOST_2=10.240.0.14
-HOST_4=10.240.0.16 # new member
-CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_4}=http://${HOST_4}:2380
-
-THIS_NAME=${NAME_4}
-THIS_IP=${HOST_4}
-etcd --data-dir=data.etcd --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 \
- --listen-peer-urls http://${THIS_IP}:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 \
- --listen-client-urls http://${THIS_IP}:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} \
- --initial-cluster-token ${TOKEN}
-```
-
-
-## Auth
-
-`auth`,`user`,`role` for authentication:
-
-![14_etcdctl_auth_2016062301](https://storage.googleapis.com/etcd/demo/14_etcdctl_auth_2016062301.gif)
-
-```shell
-export ETCDCTL_API=3
-ENDPOINTS=localhost:2379
-
-etcdctl --endpoints=${ENDPOINTS} role add root
-etcdctl --endpoints=${ENDPOINTS} role grant-permission root readwrite foo
-etcdctl --endpoints=${ENDPOINTS} role get root
-
-etcdctl --endpoints=${ENDPOINTS} user add root
-etcdctl --endpoints=${ENDPOINTS} user grant-role root root
-etcdctl --endpoints=${ENDPOINTS} user get root
-
-etcdctl --endpoints=${ENDPOINTS} auth enable
-# now all client requests go through auth
-
-etcdctl --endpoints=${ENDPOINTS} --user=root:123 put foo bar
-etcdctl --endpoints=${ENDPOINTS} get foo
-etcdctl --endpoints=${ENDPOINTS} --user=root:123 get foo
-etcdctl --endpoints=${ENDPOINTS} --user=root:123 get foo1
-```
diff --git a/etcd-fix/Documentation/dev-guide/_index.md b/etcd-fix/Documentation/dev-guide/_index.md
deleted file mode 100644
index ecb479d..0000000
--- a/etcd-fix/Documentation/dev-guide/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Developer guide
-weight: 3000
----
diff --git a/etcd-fix/Documentation/dev-guide/api_concurrency_reference_v3.md b/etcd-fix/Documentation/dev-guide/api_concurrency_reference_v3.md
deleted file mode 100644
index 3ea9d4a..0000000
--- a/etcd-fix/Documentation/dev-guide/api_concurrency_reference_v3.md
+++ /dev/null
@@ -1,168 +0,0 @@
-### etcd concurrency API Reference
-
-
-This is a generated documentation. Please read the proto files for more.
-
-
-##### service `Lock` (etcdserver/api/v3lock/v3lockpb/v3lock.proto)
-
-The lock service exposes client-side locking facilities as a gRPC interface.
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| Lock | LockRequest | LockResponse | Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires. |
-| Unlock | UnlockRequest | UnlockResponse | Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock. |
-
-
-
-##### message `LockRequest` (etcdserver/api/v3lock/v3lockpb/v3lock.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the identifier for the distributed shared lock to be acquired. | bytes |
-| lease | lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquisition; locking twice with the same lease is a no-op. | int64 |
-
-
-
-##### message `LockResponse` (etcdserver/api/v3lock/v3lockpb/v3lock.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | etcdserverpb.ResponseHeader |
-| key | key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior. | bytes |
-
-
-
-##### message `UnlockRequest` (etcdserver/api/v3lock/v3lockpb/v3lock.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| key | key is the lock ownership key granted by Lock. | bytes |
-
-
-
-##### message `UnlockResponse` (etcdserver/api/v3lock/v3lockpb/v3lock.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | etcdserverpb.ResponseHeader |
-
-
-
-##### service `Election` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-The election service exposes client-side election facilities as a gRPC interface.
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| Campaign | CampaignRequest | CampaignResponse | Campaign waits to acquire leadership in an election, returning a LeaderKey representing the leadership if successful. The LeaderKey can then be used to issue new values on the election, transactionally guard API requests on leadership still being held, and resign from the election. |
-| Proclaim | ProclaimRequest | ProclaimResponse | Proclaim updates the leader's posted value with a new value. |
-| Leader | LeaderRequest | LeaderResponse | Leader returns the current election proclamation, if any. |
-| Observe | LeaderRequest | LeaderResponse | Observe streams election proclamations in-order as made by the election's elected leaders. |
-| Resign | ResignRequest | ResignResponse | Resign releases election leadership so other campaigners may acquire leadership on the election. |
-
-
-
-##### message `CampaignRequest` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the election's identifier for the campaign. | bytes |
-| lease | lease is the ID of the lease attached to leadership of the election. If the lease expires or is revoked before resigning leadership, then the leadership is transferred to the next campaigner, if any. | int64 |
-| value | value is the initial proclaimed value set when the campaigner wins the election. | bytes |
-
-
-
-##### message `CampaignResponse` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | etcdserverpb.ResponseHeader |
-| leader | leader describes the resources used for holding leadereship of the election. | LeaderKey |
-
-
-
-##### message `LeaderKey` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the election identifier that correponds to the leadership key. | bytes |
-| key | key is an opaque key representing the ownership of the election. If the key is deleted, then leadership is lost. | bytes |
-| rev | rev is the creation revision of the key. It can be used to test for ownership of an election during transactions by testing the key's creation revision matches rev. | int64 |
-| lease | lease is the lease ID of the election leader. | int64 |
-
-
-
-##### message `LeaderRequest` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the election identifier for the leadership information. | bytes |
-
-
-
-##### message `LeaderResponse` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | etcdserverpb.ResponseHeader |
-| kv | kv is the key-value pair representing the latest leader update. | mvccpb.KeyValue |
-
-
-
-##### message `ProclaimRequest` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| leader | leader is the leadership hold on the election. | LeaderKey |
-| value | value is an update meant to overwrite the leader's current value. | bytes |
-
-
-
-##### message `ProclaimResponse` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | etcdserverpb.ResponseHeader |
-
-
-
-##### message `ResignRequest` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| leader | leader is the leadership to relinquish by resignation. | LeaderKey |
-
-
-
-##### message `ResignResponse` (etcdserver/api/v3election/v3electionpb/v3election.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | etcdserverpb.ResponseHeader |
-
-
-
-##### message `Event` (api/mvccpb/kv.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| type | type is the kind of event. If type is a PUT, it indicates new data has been stored to the key. If type is a DELETE, it indicates the key was deleted. | EventType |
-| kv | kv holds the KeyValue for the event. A PUT event contains current kv pair. A PUT event with kv.Version=1 indicates the creation of a key. A DELETE/EXPIRE event contains the deleted key with its modification revision set to the revision of deletion. | KeyValue |
-| prev_kv | prev_kv holds the key-value pair before the event happens. | KeyValue |
-
-
-
-##### message `KeyValue` (api/mvccpb/kv.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| key | key is the key in bytes. An empty key is not allowed. | bytes |
-| create_revision | create_revision is the revision of last creation on this key. | int64 |
-| mod_revision | mod_revision is the revision of last modification on this key. | int64 |
-| version | version is the version of the key. A deletion resets the version to zero and any modification of the key increases its version. | int64 |
-| value | value is the value held by the key, in bytes. | bytes |
-| lease | lease is the ID of the lease that attached to key. When the attached lease expires, the key will be deleted. If lease is 0, then no lease is attached to the key. | int64 |
-
-
-
diff --git a/etcd-fix/Documentation/dev-guide/api_grpc_gateway.md b/etcd-fix/Documentation/dev-guide/api_grpc_gateway.md
deleted file mode 100644
index 5dab248..0000000
--- a/etcd-fix/Documentation/dev-guide/api_grpc_gateway.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-title: Why gRPC gateway
----
-
-etcd v3 uses [gRPC][grpc] for its messaging protocol. The etcd project includes a gRPC-based [Go client][go-client] and a command line utility, [etcdctl][etcdctl], for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON [gRPC gateway][grpc-gateway]. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.
-
-## Using gRPC gateway
-
-The gateway accepts a [JSON mapping][json-mapping] for etcd's [protocol buffer][api-ref] message definitions. Note that `key` and `value` fields are defined as byte arrays and therefore must be base64 encoded in JSON. The following examples use `curl`, but any HTTP/JSON client should work all the same.
-
-### Notes
-
-gRPC gateway endpoint has changed since etcd v3.3:
-
-- etcd v3.2 or before uses only `[CLIENT-URL]/v3alpha/*`.
-- etcd v3.3 uses `[CLIENT-URL]/v3beta/*` while keeping `[CLIENT-URL]/v3alpha/*`.
-- etcd v3.4 uses `[CLIENT-URL]/v3/*` while keeping `[CLIENT-URL]/v3beta/*`.
- - **`[CLIENT-URL]/v3alpha/*` is deprecated**.
-- etcd v3.5 or later uses only `[CLIENT-URL]/v3/*`.
- - **`[CLIENT-URL]/v3beta/*` is deprecated**.
-
-gRPC-gateway does not support authentication using TLS Common Name.
-
-### Put and get keys
-
-Use the `/v3/kv/range` and `/v3/kv/put` services to read and write keys:
-
-```bash
-</dev/null 2>&1
-# {"result":{"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"2"},"events":[{"kv":{"key":"Zm9v","create_revision":"2","mod_revision":"2","version":"1","value":"YmFy"}}]}}
-```
-
-### Transactions
-
-Issue a transaction with `/v3/kv/txn`:
-
-```bash
-# target CREATE
-curl -L http://localhost:2379/v3/kv/txn \
- -X POST \
- -d '{"compare":[{"target":"CREATE","key":"Zm9v","createRevision":"2"}],"success":[{"requestPut":{"key":"Zm9v","value":"YmFy"}}]}'
-# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"3","raft_term":"2"},"succeeded":true,"responses":[{"response_put":{"header":{"revision":"3"}}}]}
-```
-
-```bash
-# target VERSION
-curl -L http://localhost:2379/v3/kv/txn \
- -X POST \
- -d '{"compare":[{"version":"4","result":"EQUAL","target":"VERSION","key":"Zm9v"}],"success":[{"requestRange":{"key":"Zm9v"}}]}'
-# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"6","raft_term":"3"},"succeeded":true,"responses":[{"response_range":{"header":{"revision":"6"},"kvs":[{"key":"Zm9v","create_revision":"2","mod_revision":"6","version":"4","value":"YmF6"}],"count":"1"}}]}
-```
-
-### Authentication
-
-Set up authentication with the `/v3/auth` service:
-
-```bash
-# create root user
-curl -L http://localhost:2379/v3/auth/user/add \
- -X POST -d '{"name": "root", "password": "pass"}'
-# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
-
-# create root role
-curl -L http://localhost:2379/v3/auth/role/add \
- -X POST -d '{"name": "root"}'
-# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
-
-# grant root role
-curl -L http://localhost:2379/v3/auth/user/grant \
- -X POST -d '{"user": "root", "role": "root"}'
-# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
-
-# enable auth
-curl -L http://localhost:2379/v3/auth/enable -X POST -d '{}'
-# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
-```
-
-Authenticate with etcd for an authentication token using `/v3/auth/authenticate`:
-
-```bash
-# get the auth token for the root user
-curl -L http://localhost:2379/v3/auth/authenticate \
- -X POST -d '{"name": "root", "password": "pass"}'
-# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"},"token":"sssvIpwfnLAcWAQH.9"}
-```
-
-Set the `Authorization` header to the authentication token to fetch a key using authentication credentials:
-
-```bash
-curl -L http://localhost:2379/v3/kv/put \
- -H 'Authorization: sssvIpwfnLAcWAQH.9' \
- -X POST -d '{"key": "Zm9v", "value": "YmFy"}'
-# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"2","raft_term":"2"}}
-```
-
-## Swagger
-
-Generated [Swagger][swagger] API definitions can be found at [rpc.swagger.json][swagger-doc].
-
-[api-ref]: ./api_reference_v3.md
-[go-client]: https://github.com/coreos/etcd/tree/master/clientv3
-[etcdctl]: https://github.com/coreos/etcd/tree/master/etcdctl
-[grpc]: https://www.grpc.io/
-[grpc-gateway]: https://github.com/grpc-ecosystem/grpc-gateway
-[json-mapping]: https://developers.google.com/protocol-buffers/docs/proto3#json
-[swagger]: http://swagger.io/
-[swagger-doc]: apispec/swagger/rpc.swagger.json
diff --git a/etcd-fix/Documentation/dev-guide/api_reference_v3.md b/etcd-fix/Documentation/dev-guide/api_reference_v3.md
deleted file mode 100644
index e272585..0000000
--- a/etcd-fix/Documentation/dev-guide/api_reference_v3.md
+++ /dev/null
@@ -1,1056 +0,0 @@
-### etcd API Reference
-
-
-This is a generated documentation. Please read the proto files for more.
-
-
-##### service `Auth` (api/etcdserverpb/rpc.proto)
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| AuthEnable | AuthEnableRequest | AuthEnableResponse | AuthEnable enables authentication. |
-| AuthDisable | AuthDisableRequest | AuthDisableResponse | AuthDisable disables authentication. |
-| AuthStatus | AuthStatusRequest | AuthStatusResponse | AuthStatus displays authentication status. |
-| Authenticate | AuthenticateRequest | AuthenticateResponse | Authenticate processes an authenticate request. |
-| UserAdd | AuthUserAddRequest | AuthUserAddResponse | UserAdd adds a new user. User name cannot be empty. |
-| UserGet | AuthUserGetRequest | AuthUserGetResponse | UserGet gets detailed user information. |
-| UserList | AuthUserListRequest | AuthUserListResponse | UserList gets a list of all users. |
-| UserDelete | AuthUserDeleteRequest | AuthUserDeleteResponse | UserDelete deletes a specified user. |
-| UserChangePassword | AuthUserChangePasswordRequest | AuthUserChangePasswordResponse | UserChangePassword changes the password of a specified user. |
-| UserGrantRole | AuthUserGrantRoleRequest | AuthUserGrantRoleResponse | UserGrant grants a role to a specified user. |
-| UserRevokeRole | AuthUserRevokeRoleRequest | AuthUserRevokeRoleResponse | UserRevokeRole revokes a role of specified user. |
-| RoleAdd | AuthRoleAddRequest | AuthRoleAddResponse | RoleAdd adds a new role. Role name cannot be empty. |
-| RoleGet | AuthRoleGetRequest | AuthRoleGetResponse | RoleGet gets detailed role information. |
-| RoleList | AuthRoleListRequest | AuthRoleListResponse | RoleList gets lists of all roles. |
-| RoleDelete | AuthRoleDeleteRequest | AuthRoleDeleteResponse | RoleDelete deletes a specified role. |
-| RoleGrantPermission | AuthRoleGrantPermissionRequest | AuthRoleGrantPermissionResponse | RoleGrantPermission grants a permission of a specified key or range to a specified role. |
-| RoleRevokePermission | AuthRoleRevokePermissionRequest | AuthRoleRevokePermissionResponse | RoleRevokePermission revokes a key or range permission of a specified role. |
-
-
-
-##### service `Cluster` (api/etcdserverpb/rpc.proto)
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| MemberAdd | MemberAddRequest | MemberAddResponse | MemberAdd adds a member into the cluster. |
-| MemberRemove | MemberRemoveRequest | MemberRemoveResponse | MemberRemove removes an existing member from the cluster. |
-| MemberUpdate | MemberUpdateRequest | MemberUpdateResponse | MemberUpdate updates the member configuration. |
-| MemberList | MemberListRequest | MemberListResponse | MemberList lists all the members in the cluster. |
-| MemberPromote | MemberPromoteRequest | MemberPromoteResponse | MemberPromote promotes a member from raft learner (non-voting) to raft voting member. |
-
-
-
-##### service `KV` (api/etcdserverpb/rpc.proto)
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| Range | RangeRequest | RangeResponse | Range gets the keys in the range from the key-value store. |
-| Put | PutRequest | PutResponse | Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history. |
-| DeleteRange | DeleteRangeRequest | DeleteRangeResponse | DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key. |
-| Txn | TxnRequest | TxnResponse | Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn. |
-| Compact | CompactionRequest | CompactionResponse | Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely. |
-
-
-
-##### service `Lease` (api/etcdserverpb/rpc.proto)
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| LeaseGrant | LeaseGrantRequest | LeaseGrantResponse | LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history. |
-| LeaseRevoke | LeaseRevokeRequest | LeaseRevokeResponse | LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. |
-| LeaseKeepAlive | LeaseKeepAliveRequest | LeaseKeepAliveResponse | LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client. |
-| LeaseTimeToLive | LeaseTimeToLiveRequest | LeaseTimeToLiveResponse | LeaseTimeToLive retrieves lease information. |
-| LeaseLeases | LeaseLeasesRequest | LeaseLeasesResponse | LeaseLeases lists all existing leases. |
-
-
-
-##### service `Maintenance` (api/etcdserverpb/rpc.proto)
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| Alarm | AlarmRequest | AlarmResponse | Alarm activates, deactivates, and queries alarms regarding cluster health. |
-| Status | StatusRequest | StatusResponse | Status gets the status of the member. |
-| Defragment | DefragmentRequest | DefragmentResponse | Defragment defragments a member's backend database to recover storage space. |
-| Hash | HashRequest | HashResponse | Hash computes the hash of whole backend keyspace, including key, lease, and other buckets in storage. This is designed for testing ONLY! Do not rely on this in production with ongoing transactions, since Hash operation does not hold MVCC locks. Use "HashKV" API instead for "key" bucket consistency checks. |
-| HashKV | HashKVRequest | HashKVResponse | HashKV computes the hash of all MVCC keys up to a given revision. It only iterates "key" bucket in backend storage. |
-| Snapshot | SnapshotRequest | SnapshotResponse | Snapshot sends a snapshot of the entire backend from a member over a stream to a client. |
-| MoveLeader | MoveLeaderRequest | MoveLeaderResponse | MoveLeader requests current leader node to transfer its leadership to transferee. |
-| Downgrade | DowngradeRequest | DowngradeResponse | Downgrade requests downgrade, cancel downgrade on the cluster version. |
-
-
-
-##### service `Watch` (api/etcdserverpb/rpc.proto)
-
-| Method | Request Type | Response Type | Description |
-| ------ | ------------ | ------------- | ----------- |
-| Watch | WatchRequest | WatchResponse | Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision. |
-
-
-
-##### message `AlarmMember` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| memberID | memberID is the ID of the member associated with the raised alarm. | uint64 |
-| alarm | alarm is the type of alarm which has been raised. | AlarmType |
-
-
-
-##### message `AlarmRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| action | action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm. | AlarmAction |
-| memberID | memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members. | uint64 |
-| alarm | alarm is the type of alarm to consider for this request. | AlarmType |
-
-
-
-##### message `AlarmResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| alarms | alarms is a list of alarms associated with the alarm request. | (slice of) AlarmMember |
-
-
-
-##### message `AuthDisableRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `AuthDisableResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthEnableRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `AuthEnableResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthRoleAddRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the name of the role to add to the authentication system. | string |
-
-
-
-##### message `AuthRoleAddResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthRoleDeleteRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| role | | string |
-
-
-
-##### message `AuthRoleDeleteResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthRoleGetRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| role | | string |
-
-
-
-##### message `AuthRoleGetResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| perm | | (slice of) authpb.Permission |
-
-
-
-##### message `AuthRoleGrantPermissionRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the name of the role which will be granted the permission. | string |
-| perm | perm is the permission to grant to the role. | authpb.Permission |
-
-
-
-##### message `AuthRoleGrantPermissionResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthRoleListRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `AuthRoleListResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| roles | | (slice of) string |
-
-
-
-##### message `AuthRoleRevokePermissionRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| role | | string |
-| key | | bytes |
-| range_end | | bytes |
-
-
-
-##### message `AuthRoleRevokePermissionResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthStatusRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `AuthStatusResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| enabled | | bool |
-| authRevision | authRevision is the current revision of auth store | uint64 |
-
-
-
-##### message `AuthUserAddRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | | string |
-| password | | string |
-| options | | authpb.UserAddOptions |
-| hashedPassword | | string |
-
-
-
-##### message `AuthUserAddResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthUserChangePasswordRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the name of the user whose password is being changed. | string |
-| password | password is the new password for the user. Note that this field will be removed in the API layer. | string |
-| hashedPassword | hashedPassword is the new password for the user. Note that this field will be initialized in the API layer. | string |
-
-
-
-##### message `AuthUserChangePasswordResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthUserDeleteRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | name is the name of the user to delete. | string |
-
-
-
-##### message `AuthUserDeleteResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthUserGetRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | | string |
-
-
-
-##### message `AuthUserGetResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| roles | | (slice of) string |
-
-
-
-##### message `AuthUserGrantRoleRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| user | user is the name of the user which should be granted a given role. | string |
-| role | role is the name of the role to grant to the user. | string |
-
-
-
-##### message `AuthUserGrantRoleResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthUserListRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `AuthUserListResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| users | | (slice of) string |
-
-
-
-##### message `AuthUserRevokeRoleRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | | string |
-| role | | string |
-
-
-
-##### message `AuthUserRevokeRoleResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `AuthenticateRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | | string |
-| password | | string |
-
-
-
-##### message `AuthenticateResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| token | token is an authorized token that can be used in succeeding RPCs | string |
-
-
-
-##### message `CompactionRequest` (api/etcdserverpb/rpc.proto)
-
-CompactionRequest compacts the key-value store up to a given revision. All superseded keys with a revision less than the compaction revision will be removed.
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| revision | revision is the key-value store revision for the compaction operation. | int64 |
-| physical | physical is set so the RPC will wait until the compaction is physically applied to the local database such that compacted entries are totally removed from the backend database. | bool |
-
-
-
-##### message `CompactionResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `Compare` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| result | result is logical comparison operation for this comparison. | CompareResult |
-| target | target is the key-value field to inspect for the comparison. | CompareTarget |
-| key | key is the subject key for the comparison operation. | bytes |
-| target_union | | oneof |
-| version | version is the version of the given key | int64 |
-| create_revision | create_revision is the creation revision of the given key | int64 |
-| mod_revision | mod_revision is the last modified revision of the given key. | int64 |
-| value | value is the value of the given key, in bytes. | bytes |
-| lease | lease is the lease id of the given key. | int64 |
-| range_end | range_end compares the given target to all keys in the range [key, range_end). See RangeRequest for more details on key ranges. | bytes |
-
-
-
-##### message `DefragmentRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `DefragmentResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `DeleteRangeRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| key | key is the first key to delete in the range. | bytes |
-| range_end | range_end is the key following the last key to delete for the range [key, range_end). If range_end is not given, the range is defined to contain only the key argument. If range_end is one bit larger than the given key, then the range is all the keys with the prefix (the given key). If range_end is '\0', the range is all keys greater than or equal to the key argument. | bytes |
-| prev_kv | If prev_kv is set, etcd gets the previous key-value pairs before deleting it. The previous key-value pairs will be returned in the delete response. | bool |
-
-
-
-##### message `DeleteRangeResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| deleted | deleted is the number of keys deleted by the delete range request. | int64 |
-| prev_kvs | if prev_kv is set in the request, the previous key-value pairs will be returned. | (slice of) mvccpb.KeyValue |
-
-
-
-##### message `DowngradeRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| action | action is the kind of downgrade request to issue. The action may VALIDATE the target version, DOWNGRADE the cluster version, or CANCEL the current downgrading job. | DowngradeAction |
-| version | version is the target version to downgrade. | string |
-
-
-
-##### message `DowngradeResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| version | version is the current cluster version. | string |
-
-
-
-##### message `HashKVRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| revision | revision is the key-value store revision for the hash operation. | int64 |
-
-
-
-##### message `HashKVResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| hash | hash is the hash value computed from the responding member's MVCC keys up to a given revision. | uint32 |
-| compact_revision | compact_revision is the compacted revision of key-value store when hash begins. | int64 |
-
-
-
-##### message `HashRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `HashResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| hash | hash is the hash value computed from the responding member's KV's backend. | uint32 |
-
-
-
-##### message `LeaseCheckpoint` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the lease ID to checkpoint. | int64 |
-| remaining_TTL | Remaining_TTL is the remaining time until expiry of the lease. | int64 |
-
-
-
-##### message `LeaseCheckpointRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| checkpoints | | (slice of) LeaseCheckpoint |
-
-
-
-##### message `LeaseCheckpointResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `LeaseGrantRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| TTL | TTL is the advisory time-to-live in seconds. Expired lease will return -1. | int64 |
-| ID | ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID. | int64 |
-
-
-
-##### message `LeaseGrantResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| ID | ID is the lease ID for the granted lease. | int64 |
-| TTL | TTL is the server chosen lease time-to-live in seconds. | int64 |
-| error | | string |
-
-
-
-##### message `LeaseKeepAliveRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the lease ID for the lease to keep alive. | int64 |
-
-
-
-##### message `LeaseKeepAliveResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| ID | ID is the lease ID from the keep alive request. | int64 |
-| TTL | TTL is the new time-to-live for the lease. | int64 |
-
-
-
-##### message `LeaseLeasesRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `LeaseLeasesResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| leases | | (slice of) LeaseStatus |
-
-
-
-##### message `LeaseRevokeRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted. | int64 |
-
-
-
-##### message `LeaseRevokeResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `LeaseStatus` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | | int64 |
-
-
-
-##### message `LeaseTimeToLiveRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the lease ID for the lease. | int64 |
-| keys | keys is true to query all the keys attached to this lease. | bool |
-
-
-
-##### message `LeaseTimeToLiveResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| ID | ID is the lease ID from the keep alive request. | int64 |
-| TTL | TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. | int64 |
-| grantedTTL | GrantedTTL is the initial granted time in seconds upon lease creation/renewal. | int64 |
-| keys | Keys is the list of keys attached to this lease. | (slice of) bytes |
-
-
-
-##### message `Member` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the member ID for this member. | uint64 |
-| name | name is the human-readable name of the member. If the member is not started, the name will be an empty string. | string |
-| peerURLs | peerURLs is the list of URLs the member exposes to the cluster for communication. | (slice of) string |
-| clientURLs | clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. | (slice of) string |
-| isLearner | isLearner indicates if the member is raft learner. | bool |
-
-
-
-##### message `MemberAddRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| peerURLs | peerURLs is the list of URLs the added member will use to communicate with the cluster. | (slice of) string |
-| isLearner | isLearner indicates if the added member is raft learner. | bool |
-
-
-
-##### message `MemberAddResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| member | member is the member information for the added member. | Member |
-| members | members is a list of all members after adding the new member. | (slice of) Member |
-
-
-
-##### message `MemberListRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| linearizable | | bool |
-
-
-
-##### message `MemberListResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| members | members is a list of all members associated with the cluster. | (slice of) Member |
-
-
-
-##### message `MemberPromoteRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the member ID of the member to promote. | uint64 |
-
-
-
-##### message `MemberPromoteResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| members | members is a list of all members after promoting the member. | (slice of) Member |
-
-
-
-##### message `MemberRemoveRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the member ID of the member to remove. | uint64 |
-
-
-
-##### message `MemberRemoveResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| members | members is a list of all members after removing the member. | (slice of) Member |
-
-
-
-##### message `MemberUpdateRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | ID is the member ID of the member to update. | uint64 |
-| peerURLs | peerURLs is the new list of URLs the member will use to communicate with the cluster. | (slice of) string |
-
-
-
-##### message `MemberUpdateResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| members | members is a list of all members after updating the member. | (slice of) Member |
-
-
-
-##### message `MoveLeaderRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| targetID | targetID is the node ID for the new leader. | uint64 |
-
-
-
-##### message `MoveLeaderResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-
-
-
-##### message `PutRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| key | key is the key, in bytes, to put into the key-value store. | bytes |
-| value | value is the value, in bytes, to associate with the key in the key-value store. | bytes |
-| lease | lease is the lease ID to associate with the key in the key-value store. A lease value of 0 indicates no lease. | int64 |
-| prev_kv | If prev_kv is set, etcd gets the previous key-value pair before changing it. The previous key-value pair will be returned in the put response. | bool |
-| ignore_value | If ignore_value is set, etcd updates the key using its current value. Returns an error if the key does not exist. | bool |
-| ignore_lease | If ignore_lease is set, etcd updates the key using its current lease. Returns an error if the key does not exist. | bool |
-
-
-
-##### message `PutResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| prev_kv | if prev_kv is set in the request, the previous key-value pair will be returned. | mvccpb.KeyValue |
-
-
-
-##### message `RangeRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| key | key is the first key for the range. If range_end is not given, the request only looks up key. | bytes |
-| range_end | range_end is the upper bound on the requested range [key, range_end). If range_end is '\0', the range is all keys >= key. If range_end is key plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"), then the range request gets all keys prefixed with key. If both key and range_end are '\0', then the range request returns all keys. | bytes |
-| limit | limit is a limit on the number of keys returned for the request. When limit is set to 0, it is treated as no limit. | int64 |
-| revision | revision is the point-in-time of the key-value store to use for the range. If revision is less or equal to zero, the range is over the newest key-value store. If the revision has been compacted, ErrCompacted is returned as a response. | int64 |
-| sort_order | sort_order is the order for returned sorted results. | SortOrder |
-| sort_target | sort_target is the key-value field to use for sorting. | SortTarget |
-| serializable | serializable sets the range request to use serializable member-local reads. Range requests are linearizable by default; linearizable requests have higher latency and lower throughput than serializable requests but reflect the current consensus of the cluster. For better performance, in exchange for possible stale reads, a serializable range request is served locally without needing to reach consensus with other nodes in the cluster. | bool |
-| keys_only | keys_only when set returns only the keys and not the values. | bool |
-| count_only | count_only when set returns only the count of the keys in the range. | bool |
-| min_mod_revision | min_mod_revision is the lower bound for returned key mod revisions; all keys with lesser mod revisions will be filtered away. | int64 |
-| max_mod_revision | max_mod_revision is the upper bound for returned key mod revisions; all keys with greater mod revisions will be filtered away. | int64 |
-| min_create_revision | min_create_revision is the lower bound for returned key create revisions; all keys with lesser create revisions will be filtered away. | int64 |
-| max_create_revision | max_create_revision is the upper bound for returned key create revisions; all keys with greater create revisions will be filtered away. | int64 |
-
-
-
-##### message `RangeResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| kvs | kvs is the list of key-value pairs matched by the range request. kvs is empty when count is requested. | (slice of) mvccpb.KeyValue |
-| more | more indicates if there are more keys to return in the requested range. | bool |
-| count | count is set to the number of keys within the range when requested. | int64 |
-
-
-
-##### message `RequestOp` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| request | request is a union of request types accepted by a transaction. | oneof |
-| request_range | | RangeRequest |
-| request_put | | PutRequest |
-| request_delete_range | | DeleteRangeRequest |
-| request_txn | | TxnRequest |
-
-
-
-##### message `ResponseHeader` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| cluster_id | cluster_id is the ID of the cluster which sent the response. | uint64 |
-| member_id | member_id is the ID of the member which sent the response. | uint64 |
-| revision | revision is the key-value store revision when the request was applied. For watch progress responses, the header.revision indicates progress. All future events recieved in this stream are guaranteed to have a higher revision number than the header.revision number. | int64 |
-| raft_term | raft_term is the raft term when the request was applied. | uint64 |
-
-
-
-##### message `ResponseOp` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| response | response is a union of response types returned by a transaction. | oneof |
-| response_range | | RangeResponse |
-| response_put | | PutResponse |
-| response_delete_range | | DeleteRangeResponse |
-| response_txn | | TxnResponse |
-
-
-
-##### message `SnapshotRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `SnapshotResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | header has the current key-value store information. The first header in the snapshot stream indicates the point in time of the snapshot. | ResponseHeader |
-| remaining_bytes | remaining_bytes is the number of blob bytes to be sent after this message | uint64 |
-| blob | blob contains the next chunk of the snapshot in the snapshot stream. | bytes |
-
-
-
-##### message `StatusRequest` (api/etcdserverpb/rpc.proto)
-
-Empty field.
-
-
-
-##### message `StatusResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| version | version is the cluster protocol version used by the responding member. | string |
-| dbSize | dbSize is the size of the backend database physically allocated, in bytes, of the responding member. | int64 |
-| leader | leader is the member ID which the responding member believes is the current leader. | uint64 |
-| raftIndex | raftIndex is the current raft committed index of the responding member. | uint64 |
-| raftTerm | raftTerm is the current raft term of the responding member. | uint64 |
-| raftAppliedIndex | raftAppliedIndex is the current raft applied index of the responding member. | uint64 |
-| errors | errors contains alarm/health information and status. | (slice of) string |
-| dbSizeInUse | dbSizeInUse is the size of the backend database logically in use, in bytes, of the responding member. | int64 |
-| isLearner | isLearner indicates if the member is raft learner. | bool |
-
-
-
-##### message `TxnRequest` (api/etcdserverpb/rpc.proto)
-
-From google paxosdb paper: Our implementation hinges around a powerful primitive which we call MultiOp. All other database operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically and consists of three components: 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check for the absence or presence of a value, or compare with a given value. Two different tests in the guard may apply to the same or different entries in the database. All tests in the guard are applied and MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise it executes f op (see item 3 below). 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or lookup operation, and applies to a single database entry. Two different operations in the list may apply to the same or different entries in the database. These operations are executed if guard evaluates to true. 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false.
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| compare | compare is a list of predicates representing a conjunction of terms. If the comparisons succeed, then the success requests will be processed in order, and the response will contain their respective responses in order. If the comparisons fail, then the failure requests will be processed in order, and the response will contain their respective responses in order. | (slice of) Compare |
-| success | success is a list of requests which will be applied when compare evaluates to true. | (slice of) RequestOp |
-| failure | failure is a list of requests which will be applied when compare evaluates to false. | (slice of) RequestOp |
-
-
-
-##### message `TxnResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| succeeded | succeeded is set to true if the compare evaluated to true or false otherwise. | bool |
-| responses | responses is a list of responses corresponding to the results from applying success if succeeded is true or failure if succeeded is false. | (slice of) ResponseOp |
-
-
-
-##### message `WatchCancelRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| watch_id | watch_id is the watcher id to cancel so that no more events are transmitted. | int64 |
-
-
-
-##### message `WatchCreateRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| key | key is the key to register for watching. | bytes |
-| range_end | range_end is the end of the range [key, range_end) to watch. If range_end is not given, only the key argument is watched. If range_end is equal to '\0', all keys greater than or equal to the key argument are watched. If the range_end is one bit larger than the given key, then all keys with the prefix (the given key) will be watched. | bytes |
-| start_revision | start_revision is an optional revision to watch from (inclusive). No start_revision is "now". | int64 |
-| progress_notify | progress_notify is set so that the etcd server will periodically send a WatchResponse with no events to the new watcher if there are no recent events. It is useful when clients wish to recover a disconnected watcher starting from a recent known revision. The etcd server may decide how often it will send notifications based on current load. | bool |
-| filters | filters filter the events at server side before it sends back to the watcher. | (slice of) FilterType |
-| prev_kv | If prev_kv is set, created watcher gets the previous KV before the event happens. If the previous KV is already compacted, nothing will be returned. | bool |
-| watch_id | If watch_id is provided and non-zero, it will be assigned to this watcher. Since creating a watcher in etcd is not a synchronous operation, this can be used ensure that ordering is correct when creating multiple watchers on the same stream. Creating a watcher with an ID already in use on the stream will cause an error to be returned. | int64 |
-| fragment | fragment enables splitting large revisions into multiple watch responses. | bool |
-
-
-
-##### message `WatchProgressRequest` (api/etcdserverpb/rpc.proto)
-
-Requests the a watch stream progress status be sent in the watch response stream as soon as possible.
-
-Empty field.
-
-
-
-##### message `WatchRequest` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| request_union | request_union is a request to either create a new watcher or cancel an existing watcher. | oneof |
-| create_request | | WatchCreateRequest |
-| cancel_request | | WatchCancelRequest |
-| progress_request | | WatchProgressRequest |
-
-
-
-##### message `WatchResponse` (api/etcdserverpb/rpc.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| header | | ResponseHeader |
-| watch_id | watch_id is the ID of the watcher that corresponds to the response. | int64 |
-| created | created is set to true if the response is for a create watch request. The client should record the watch_id and expect to receive events for the created watcher from the same stream. All events sent to the created watcher will attach with the same watch_id. | bool |
-| canceled | canceled is set to true if the response is for a cancel watch request. No further events will be sent to the canceled watcher. | bool |
-| compact_revision | compact_revision is set to the minimum index if a watcher tries to watch at a compacted index. This happens when creating a watcher at a compacted revision or the watcher cannot catch up with the progress of the key-value store. The client should treat the watcher as canceled and should not try to create any watcher with the same start_revision again. | int64 |
-| cancel_reason | cancel_reason indicates the reason for canceling the watcher. | string |
-| fragment | framgment is true if large watch response was split over multiple responses. | bool |
-| events | | (slice of) mvccpb.Event |
-
-
-
-##### message `Event` (api/mvccpb/kv.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| type | type is the kind of event. If type is a PUT, it indicates new data has been stored to the key. If type is a DELETE, it indicates the key was deleted. | EventType |
-| kv | kv holds the KeyValue for the event. A PUT event contains current kv pair. A PUT event with kv.Version=1 indicates the creation of a key. A DELETE/EXPIRE event contains the deleted key with its modification revision set to the revision of deletion. | KeyValue |
-| prev_kv | prev_kv holds the key-value pair before the event happens. | KeyValue |
-
-
-
-##### message `KeyValue` (api/mvccpb/kv.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| key | key is the key in bytes. An empty key is not allowed. | bytes |
-| create_revision | create_revision is the revision of last creation on this key. | int64 |
-| mod_revision | mod_revision is the revision of last modification on this key. | int64 |
-| version | version is the version of the key. A deletion resets the version to zero and any modification of the key increases its version. | int64 |
-| value | value is the value held by the key, in bytes. | bytes |
-| lease | lease is the ID of the lease that attached to key. When the attached lease expires, the key will be deleted. If lease is 0, then no lease is attached to the key. | int64 |
-
-
-
-##### message `Lease` (lease/leasepb/lease.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| ID | | int64 |
-| TTL | | int64 |
-| RemainingTTL | | int64 |
-
-
-
-##### message `LeaseInternalRequest` (lease/leasepb/lease.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| LeaseTimeToLiveRequest | | etcdserverpb.LeaseTimeToLiveRequest |
-
-
-
-##### message `LeaseInternalResponse` (lease/leasepb/lease.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| LeaseTimeToLiveResponse | | etcdserverpb.LeaseTimeToLiveResponse |
-
-
-
-##### message `Permission` (api/authpb/auth.proto)
-
-Permission is a single entity
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| permType | | Type |
-| key | | bytes |
-| range_end | | bytes |
-
-
-
-##### message `Role` (api/authpb/auth.proto)
-
-Role is a single entry in the bucket authRoles
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | | bytes |
-| keyPermission | | (slice of) Permission |
-
-
-
-##### message `User` (api/authpb/auth.proto)
-
-User is a single entry in the bucket authUsers
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| name | | bytes |
-| password | | bytes |
-| roles | | (slice of) string |
-| options | | UserAddOptions |
-
-
-
-##### message `UserAddOptions` (api/authpb/auth.proto)
-
-| Field | Description | Type |
-| ----- | ----------- | ---- |
-| no_password | | bool |
-
-
-
diff --git a/etcd-fix/Documentation/dev-guide/apispec/swagger/rpc.swagger.json b/etcd-fix/Documentation/dev-guide/apispec/swagger/rpc.swagger.json
deleted file mode 100644
index cea9c9d..0000000
--- a/etcd-fix/Documentation/dev-guide/apispec/swagger/rpc.swagger.json
+++ /dev/null
@@ -1,3064 +0,0 @@
-{
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "swagger": "2.0",
- "info": {
- "title": "api/etcdserverpb/rpc.proto",
- "version": "version not set"
- },
- "paths": {
- "/v3/auth/authenticate": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "Authenticate processes an authenticate request.",
- "operationId": "Auth_Authenticate",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthenticateRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthenticateResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/disable": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "AuthDisable disables authentication.",
- "operationId": "Auth_AuthDisable",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthDisableRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthDisableResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/enable": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "AuthEnable enables authentication.",
- "operationId": "Auth_AuthEnable",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthEnableRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthEnableResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/role/add": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "RoleAdd adds a new role. Role name cannot be empty.",
- "operationId": "Auth_RoleAdd",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleAddRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleAddResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/role/delete": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "RoleDelete deletes a specified role.",
- "operationId": "Auth_RoleDelete",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleDeleteRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleDeleteResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/role/get": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "RoleGet gets detailed role information.",
- "operationId": "Auth_RoleGet",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleGetRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleGetResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/role/grant": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "RoleGrantPermission grants a permission of a specified key or range to a specified role.",
- "operationId": "Auth_RoleGrantPermission",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleGrantPermissionRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleGrantPermissionResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/role/list": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "RoleList gets lists of all roles.",
- "operationId": "Auth_RoleList",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleListRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleListResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/role/revoke": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "RoleRevokePermission revokes a key or range permission of a specified role.",
- "operationId": "Auth_RoleRevokePermission",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleRevokePermissionRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthRoleRevokePermissionResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/status": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "AuthStatus displays authentication status.",
- "operationId": "Auth_AuthStatus",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthStatusRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthStatusResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/user/add": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "UserAdd adds a new user. User name cannot be empty.",
- "operationId": "Auth_UserAdd",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserAddRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserAddResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/user/changepw": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "UserChangePassword changes the password of a specified user.",
- "operationId": "Auth_UserChangePassword",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserChangePasswordRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserChangePasswordResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/user/delete": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "UserDelete deletes a specified user.",
- "operationId": "Auth_UserDelete",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserDeleteRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserDeleteResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/user/get": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "UserGet gets detailed user information.",
- "operationId": "Auth_UserGet",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserGetRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserGetResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/user/grant": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "UserGrant grants a role to a specified user.",
- "operationId": "Auth_UserGrantRole",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserGrantRoleRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserGrantRoleResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/user/list": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "UserList gets a list of all users.",
- "operationId": "Auth_UserList",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserListRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserListResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/auth/user/revoke": {
- "post": {
- "tags": [
- "Auth"
- ],
- "summary": "UserRevokeRole revokes a role of specified user.",
- "operationId": "Auth_UserRevokeRole",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserRevokeRoleRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAuthUserRevokeRoleResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/cluster/member/add": {
- "post": {
- "tags": [
- "Cluster"
- ],
- "summary": "MemberAdd adds a member into the cluster.",
- "operationId": "Cluster_MemberAdd",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberAddRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberAddResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/cluster/member/list": {
- "post": {
- "tags": [
- "Cluster"
- ],
- "summary": "MemberList lists all the members in the cluster.",
- "operationId": "Cluster_MemberList",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberListRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberListResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/cluster/member/promote": {
- "post": {
- "tags": [
- "Cluster"
- ],
- "summary": "MemberPromote promotes a member from raft learner (non-voting) to raft voting member.",
- "operationId": "Cluster_MemberPromote",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberPromoteRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberPromoteResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/cluster/member/remove": {
- "post": {
- "tags": [
- "Cluster"
- ],
- "summary": "MemberRemove removes an existing member from the cluster.",
- "operationId": "Cluster_MemberRemove",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberRemoveRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberRemoveResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/cluster/member/update": {
- "post": {
- "tags": [
- "Cluster"
- ],
- "summary": "MemberUpdate updates the member configuration.",
- "operationId": "Cluster_MemberUpdate",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberUpdateRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbMemberUpdateResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/compaction": {
- "post": {
- "tags": [
- "KV"
- ],
- "summary": "Compact compacts the event history in the etcd key-value store. The key-value\nstore should be periodically compacted or the event history will continue to grow\nindefinitely.",
- "operationId": "KV_Compact",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbCompactionRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbCompactionResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/deleterange": {
- "post": {
- "tags": [
- "KV"
- ],
- "summary": "DeleteRange deletes the given range from the key-value store.\nA delete request increments the revision of the key-value store\nand generates a delete event in the event history for every deleted key.",
- "operationId": "KV_DeleteRange",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbDeleteRangeRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbDeleteRangeResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/lease/leases": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseLeases lists all existing leases.",
- "operationId": "Lease_LeaseLeases2",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseLeasesRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseLeasesResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/lease/revoke": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.",
- "operationId": "Lease_LeaseRevoke2",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseRevokeRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseRevokeResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/lease/timetolive": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseTimeToLive retrieves lease information.",
- "operationId": "Lease_LeaseTimeToLive2",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseTimeToLiveRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseTimeToLiveResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/put": {
- "post": {
- "tags": [
- "KV"
- ],
- "summary": "Put puts the given key into the key-value store.\nA put request increments the revision of the key-value store\nand generates one event in the event history.",
- "operationId": "KV_Put",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbPutRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbPutResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/range": {
- "post": {
- "tags": [
- "KV"
- ],
- "summary": "Range gets the keys in the range from the key-value store.",
- "operationId": "KV_Range",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbRangeRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbRangeResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/kv/txn": {
- "post": {
- "tags": [
- "KV"
- ],
- "summary": "Txn processes multiple requests in a single transaction.\nA txn request increments the revision of the key-value store\nand generates events with the same revision for every completed request.\nIt is not allowed to modify the same key several times within one txn.",
- "operationId": "KV_Txn",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbTxnRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbTxnResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/lease/grant": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseGrant creates a lease which expires if the server does not receive a keepAlive\nwithin a given time to live period. All keys attached to the lease will be expired and\ndeleted if the lease expires. Each expired key generates a delete event in the event history.",
- "operationId": "Lease_LeaseGrant",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseGrantRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseGrantResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/lease/keepalive": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client\nto the server and streaming keep alive responses from the server to the client.",
- "operationId": "Lease_LeaseKeepAlive",
- "parameters": [
- {
- "description": " (streaming inputs)",
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseKeepAliveRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.(streaming responses)",
- "schema": {
- "type": "object",
- "title": "Stream result of etcdserverpbLeaseKeepAliveResponse",
- "properties": {
- "error": {
- "$ref": "#/definitions/runtimeStreamError"
- },
- "result": {
- "$ref": "#/definitions/etcdserverpbLeaseKeepAliveResponse"
- }
- }
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/lease/leases": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseLeases lists all existing leases.",
- "operationId": "Lease_LeaseLeases",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseLeasesRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseLeasesResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/lease/revoke": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.",
- "operationId": "Lease_LeaseRevoke",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseRevokeRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseRevokeResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/lease/timetolive": {
- "post": {
- "tags": [
- "Lease"
- ],
- "summary": "LeaseTimeToLive retrieves lease information.",
- "operationId": "Lease_LeaseTimeToLive",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseTimeToLiveRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbLeaseTimeToLiveResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/maintenance/alarm": {
- "post": {
- "tags": [
- "Maintenance"
- ],
- "summary": "Alarm activates, deactivates, and queries alarms regarding cluster health.",
- "operationId": "Maintenance_Alarm",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbAlarmRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbAlarmResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/maintenance/defragment": {
- "post": {
- "tags": [
- "Maintenance"
- ],
- "summary": "Defragment defragments a member's backend database to recover storage space.",
- "operationId": "Maintenance_Defragment",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbDefragmentRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbDefragmentResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/maintenance/downgrade": {
- "post": {
- "tags": [
- "Maintenance"
- ],
- "summary": "Downgrade requests downgrade, cancel downgrade on the cluster version.",
- "operationId": "Maintenance_Downgrade",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbDowngradeRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbDowngradeResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/maintenance/hash": {
- "post": {
- "tags": [
- "Maintenance"
- ],
- "summary": "HashKV computes the hash of all MVCC keys up to a given revision.\nIt only iterates \"key\" bucket in backend storage.",
- "operationId": "Maintenance_HashKV",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbHashKVRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbHashKVResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/maintenance/snapshot": {
- "post": {
- "tags": [
- "Maintenance"
- ],
- "summary": "Snapshot sends a snapshot of the entire backend from a member over a stream to a client.",
- "operationId": "Maintenance_Snapshot",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbSnapshotRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.(streaming responses)",
- "schema": {
- "type": "object",
- "title": "Stream result of etcdserverpbSnapshotResponse",
- "properties": {
- "error": {
- "$ref": "#/definitions/runtimeStreamError"
- },
- "result": {
- "$ref": "#/definitions/etcdserverpbSnapshotResponse"
- }
- }
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/maintenance/status": {
- "post": {
- "tags": [
- "Maintenance"
- ],
- "summary": "Status gets the status of the member.",
- "operationId": "Maintenance_Status",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbStatusRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbStatusResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/maintenance/transfer-leadership": {
- "post": {
- "tags": [
- "Maintenance"
- ],
- "summary": "MoveLeader requests current leader node to transfer its leadership to transferee.",
- "operationId": "Maintenance_MoveLeader",
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbMoveLeaderRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/etcdserverpbMoveLeaderResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- },
- "/v3/watch": {
- "post": {
- "tags": [
- "Watch"
- ],
- "summary": "Watch watches for events happening or that have happened. Both input and output\nare streams; the input stream is for creating and canceling watchers and the output\nstream sends events. One watch RPC can watch on multiple key ranges, streaming events\nfor several watches at once. The entire event history can be watched starting from the\nlast compaction revision.",
- "operationId": "Watch_Watch",
- "parameters": [
- {
- "description": " (streaming inputs)",
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/etcdserverpbWatchRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A successful response.(streaming responses)",
- "schema": {
- "type": "object",
- "title": "Stream result of etcdserverpbWatchResponse",
- "properties": {
- "error": {
- "$ref": "#/definitions/runtimeStreamError"
- },
- "result": {
- "$ref": "#/definitions/etcdserverpbWatchResponse"
- }
- }
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- }
- }
- }
- },
- "definitions": {
- "AlarmRequestAlarmAction": {
- "type": "string",
- "default": "GET",
- "enum": [
- "GET",
- "ACTIVATE",
- "DEACTIVATE"
- ]
- },
- "CompareCompareResult": {
- "type": "string",
- "default": "EQUAL",
- "enum": [
- "EQUAL",
- "GREATER",
- "LESS",
- "NOT_EQUAL"
- ]
- },
- "CompareCompareTarget": {
- "type": "string",
- "default": "VERSION",
- "enum": [
- "VERSION",
- "CREATE",
- "MOD",
- "VALUE",
- "LEASE"
- ]
- },
- "DowngradeRequestDowngradeAction": {
- "type": "string",
- "default": "VALIDATE",
- "enum": [
- "VALIDATE",
- "ENABLE",
- "CANCEL"
- ]
- },
- "EventEventType": {
- "type": "string",
- "default": "PUT",
- "enum": [
- "PUT",
- "DELETE"
- ]
- },
- "RangeRequestSortOrder": {
- "type": "string",
- "default": "NONE",
- "enum": [
- "NONE",
- "ASCEND",
- "DESCEND"
- ]
- },
- "RangeRequestSortTarget": {
- "type": "string",
- "default": "KEY",
- "enum": [
- "KEY",
- "VERSION",
- "CREATE",
- "MOD",
- "VALUE"
- ]
- },
- "WatchCreateRequestFilterType": {
- "description": " - NOPUT: filter out put event.\n - NODELETE: filter out delete event.",
- "type": "string",
- "default": "NOPUT",
- "enum": [
- "NOPUT",
- "NODELETE"
- ]
- },
- "authpbPermission": {
- "type": "object",
- "title": "Permission is a single entity",
- "properties": {
- "key": {
- "type": "string",
- "format": "byte"
- },
- "permType": {
- "$ref": "#/definitions/authpbPermissionType"
- },
- "range_end": {
- "type": "string",
- "format": "byte"
- }
- }
- },
- "authpbPermissionType": {
- "type": "string",
- "default": "READ",
- "enum": [
- "READ",
- "WRITE",
- "READWRITE"
- ]
- },
- "authpbUserAddOptions": {
- "type": "object",
- "properties": {
- "no_password": {
- "type": "boolean",
- "format": "boolean"
- }
- }
- },
- "etcdserverpbAlarmMember": {
- "type": "object",
- "properties": {
- "alarm": {
- "description": "alarm is the type of alarm which has been raised.",
- "$ref": "#/definitions/etcdserverpbAlarmType"
- },
- "memberID": {
- "description": "memberID is the ID of the member associated with the raised alarm.",
- "type": "string",
- "format": "uint64"
- }
- }
- },
- "etcdserverpbAlarmRequest": {
- "type": "object",
- "properties": {
- "action": {
- "description": "action is the kind of alarm request to issue. The action\nmay GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a\nraised alarm.",
- "$ref": "#/definitions/AlarmRequestAlarmAction"
- },
- "alarm": {
- "description": "alarm is the type of alarm to consider for this request.",
- "$ref": "#/definitions/etcdserverpbAlarmType"
- },
- "memberID": {
- "description": "memberID is the ID of the member associated with the alarm. If memberID is 0, the\nalarm request covers all members.",
- "type": "string",
- "format": "uint64"
- }
- }
- },
- "etcdserverpbAlarmResponse": {
- "type": "object",
- "properties": {
- "alarms": {
- "description": "alarms is a list of alarms associated with the alarm request.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbAlarmMember"
- }
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAlarmType": {
- "type": "string",
- "default": "NONE",
- "enum": [
- "NONE",
- "NOSPACE",
- "CORRUPT"
- ]
- },
- "etcdserverpbAuthDisableRequest": {
- "type": "object"
- },
- "etcdserverpbAuthDisableResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthEnableRequest": {
- "type": "object"
- },
- "etcdserverpbAuthEnableResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthRoleAddRequest": {
- "type": "object",
- "properties": {
- "name": {
- "description": "name is the name of the role to add to the authentication system.",
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthRoleAddResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthRoleDeleteRequest": {
- "type": "object",
- "properties": {
- "role": {
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthRoleDeleteResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthRoleGetRequest": {
- "type": "object",
- "properties": {
- "role": {
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthRoleGetResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "perm": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/authpbPermission"
- }
- }
- }
- },
- "etcdserverpbAuthRoleGrantPermissionRequest": {
- "type": "object",
- "properties": {
- "name": {
- "description": "name is the name of the role which will be granted the permission.",
- "type": "string"
- },
- "perm": {
- "description": "perm is the permission to grant to the role.",
- "$ref": "#/definitions/authpbPermission"
- }
- }
- },
- "etcdserverpbAuthRoleGrantPermissionResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthRoleListRequest": {
- "type": "object"
- },
- "etcdserverpbAuthRoleListResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "roles": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- "etcdserverpbAuthRoleRevokePermissionRequest": {
- "type": "object",
- "properties": {
- "key": {
- "type": "string",
- "format": "byte"
- },
- "range_end": {
- "type": "string",
- "format": "byte"
- },
- "role": {
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthRoleRevokePermissionResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthStatusRequest": {
- "type": "object"
- },
- "etcdserverpbAuthStatusResponse": {
- "type": "object",
- "properties": {
- "authRevision": {
- "type": "string",
- "format": "uint64",
- "title": "authRevision is the current revision of auth store"
- },
- "enabled": {
- "type": "boolean",
- "format": "boolean"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthUserAddRequest": {
- "type": "object",
- "properties": {
- "hashedPassword": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "options": {
- "$ref": "#/definitions/authpbUserAddOptions"
- },
- "password": {
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthUserAddResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthUserChangePasswordRequest": {
- "type": "object",
- "properties": {
- "hashedPassword": {
- "description": "hashedPassword is the new password for the user. Note that this field will be initialized in the API layer.",
- "type": "string"
- },
- "name": {
- "description": "name is the name of the user whose password is being changed.",
- "type": "string"
- },
- "password": {
- "description": "password is the new password for the user. Note that this field will be removed in the API layer.",
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthUserChangePasswordResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthUserDeleteRequest": {
- "type": "object",
- "properties": {
- "name": {
- "description": "name is the name of the user to delete.",
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthUserDeleteResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthUserGetRequest": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthUserGetResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "roles": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- "etcdserverpbAuthUserGrantRoleRequest": {
- "type": "object",
- "properties": {
- "role": {
- "description": "role is the name of the role to grant to the user.",
- "type": "string"
- },
- "user": {
- "description": "user is the name of the user which should be granted a given role.",
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthUserGrantRoleResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthUserListRequest": {
- "type": "object"
- },
- "etcdserverpbAuthUserListResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "users": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- "etcdserverpbAuthUserRevokeRoleRequest": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "role": {
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthUserRevokeRoleResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbAuthenticateRequest": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "password": {
- "type": "string"
- }
- }
- },
- "etcdserverpbAuthenticateResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "token": {
- "type": "string",
- "title": "token is an authorized token that can be used in succeeding RPCs"
- }
- }
- },
- "etcdserverpbCompactionRequest": {
- "description": "CompactionRequest compacts the key-value store up to a given revision. All superseded keys\nwith a revision less than the compaction revision will be removed.",
- "type": "object",
- "properties": {
- "physical": {
- "description": "physical is set so the RPC will wait until the compaction is physically\napplied to the local database such that compacted entries are totally\nremoved from the backend database.",
- "type": "boolean",
- "format": "boolean"
- },
- "revision": {
- "description": "revision is the key-value store revision for the compaction operation.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbCompactionResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbCompare": {
- "type": "object",
- "properties": {
- "create_revision": {
- "type": "string",
- "format": "int64",
- "title": "create_revision is the creation revision of the given key"
- },
- "key": {
- "description": "key is the subject key for the comparison operation.",
- "type": "string",
- "format": "byte"
- },
- "lease": {
- "description": "lease is the lease id of the given key.",
- "type": "string",
- "format": "int64"
- },
- "mod_revision": {
- "description": "mod_revision is the last modified revision of the given key.",
- "type": "string",
- "format": "int64"
- },
- "range_end": {
- "description": "range_end compares the given target to all keys in the range [key, range_end).\nSee RangeRequest for more details on key ranges.",
- "type": "string",
- "format": "byte"
- },
- "result": {
- "description": "result is logical comparison operation for this comparison.",
- "$ref": "#/definitions/CompareCompareResult"
- },
- "target": {
- "description": "target is the key-value field to inspect for the comparison.",
- "$ref": "#/definitions/CompareCompareTarget"
- },
- "value": {
- "description": "value is the value of the given key, in bytes.",
- "type": "string",
- "format": "byte"
- },
- "version": {
- "type": "string",
- "format": "int64",
- "title": "version is the version of the given key"
- }
- }
- },
- "etcdserverpbDefragmentRequest": {
- "type": "object"
- },
- "etcdserverpbDefragmentResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbDeleteRangeRequest": {
- "type": "object",
- "properties": {
- "key": {
- "description": "key is the first key to delete in the range.",
- "type": "string",
- "format": "byte"
- },
- "prev_kv": {
- "description": "If prev_kv is set, etcd gets the previous key-value pairs before deleting it.\nThe previous key-value pairs will be returned in the delete response.",
- "type": "boolean",
- "format": "boolean"
- },
- "range_end": {
- "description": "range_end is the key following the last key to delete for the range [key, range_end).\nIf range_end is not given, the range is defined to contain only the key argument.\nIf range_end is one bit larger than the given key, then the range is all the keys\nwith the prefix (the given key).\nIf range_end is '\\0', the range is all keys greater than or equal to the key argument.",
- "type": "string",
- "format": "byte"
- }
- }
- },
- "etcdserverpbDeleteRangeResponse": {
- "type": "object",
- "properties": {
- "deleted": {
- "description": "deleted is the number of keys deleted by the delete range request.",
- "type": "string",
- "format": "int64"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "prev_kvs": {
- "description": "if prev_kv is set in the request, the previous key-value pairs will be returned.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/mvccpbKeyValue"
- }
- }
- }
- },
- "etcdserverpbDowngradeRequest": {
- "type": "object",
- "properties": {
- "action": {
- "description": "action is the kind of downgrade request to issue. The action may\nVALIDATE the target version, DOWNGRADE the cluster version,\nor CANCEL the current downgrading job.",
- "$ref": "#/definitions/DowngradeRequestDowngradeAction"
- },
- "version": {
- "description": "version is the target version to downgrade.",
- "type": "string"
- }
- }
- },
- "etcdserverpbDowngradeResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "version": {
- "description": "version is the current cluster version.",
- "type": "string"
- }
- }
- },
- "etcdserverpbHashKVRequest": {
- "type": "object",
- "properties": {
- "revision": {
- "description": "revision is the key-value store revision for the hash operation.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbHashKVResponse": {
- "type": "object",
- "properties": {
- "compact_revision": {
- "description": "compact_revision is the compacted revision of key-value store when hash begins.",
- "type": "string",
- "format": "int64"
- },
- "hash": {
- "description": "hash is the hash value computed from the responding member's MVCC keys up to a given revision.",
- "type": "integer",
- "format": "int64"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbHashRequest": {
- "type": "object"
- },
- "etcdserverpbHashResponse": {
- "type": "object",
- "properties": {
- "hash": {
- "description": "hash is the hash value computed from the responding member's KV's backend.",
- "type": "integer",
- "format": "int64"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbLeaseGrantRequest": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID.",
- "type": "string",
- "format": "int64"
- },
- "TTL": {
- "description": "TTL is the advisory time-to-live in seconds. Expired lease will return -1.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbLeaseGrantResponse": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the lease ID for the granted lease.",
- "type": "string",
- "format": "int64"
- },
- "TTL": {
- "description": "TTL is the server chosen lease time-to-live in seconds.",
- "type": "string",
- "format": "int64"
- },
- "error": {
- "type": "string"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbLeaseKeepAliveRequest": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the lease ID for the lease to keep alive.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbLeaseKeepAliveResponse": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the lease ID from the keep alive request.",
- "type": "string",
- "format": "int64"
- },
- "TTL": {
- "description": "TTL is the new time-to-live for the lease.",
- "type": "string",
- "format": "int64"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbLeaseLeasesRequest": {
- "type": "object"
- },
- "etcdserverpbLeaseLeasesResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "leases": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbLeaseStatus"
- }
- }
- }
- },
- "etcdserverpbLeaseRevokeRequest": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbLeaseRevokeResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbLeaseStatus": {
- "type": "object",
- "properties": {
- "ID": {
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbLeaseTimeToLiveRequest": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the lease ID for the lease.",
- "type": "string",
- "format": "int64"
- },
- "keys": {
- "description": "keys is true to query all the keys attached to this lease.",
- "type": "boolean",
- "format": "boolean"
- }
- }
- },
- "etcdserverpbLeaseTimeToLiveResponse": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the lease ID from the keep alive request.",
- "type": "string",
- "format": "int64"
- },
- "TTL": {
- "description": "TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds.",
- "type": "string",
- "format": "int64"
- },
- "grantedTTL": {
- "description": "GrantedTTL is the initial granted time in seconds upon lease creation/renewal.",
- "type": "string",
- "format": "int64"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "keys": {
- "description": "Keys is the list of keys attached to this lease.",
- "type": "array",
- "items": {
- "type": "string",
- "format": "byte"
- }
- }
- }
- },
- "etcdserverpbMember": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the member ID for this member.",
- "type": "string",
- "format": "uint64"
- },
- "clientURLs": {
- "description": "clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty.",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "isLearner": {
- "description": "isLearner indicates if the member is raft learner.",
- "type": "boolean",
- "format": "boolean"
- },
- "name": {
- "description": "name is the human-readable name of the member. If the member is not started, the name will be an empty string.",
- "type": "string"
- },
- "peerURLs": {
- "description": "peerURLs is the list of URLs the member exposes to the cluster for communication.",
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- "etcdserverpbMemberAddRequest": {
- "type": "object",
- "properties": {
- "isLearner": {
- "description": "isLearner indicates if the added member is raft learner.",
- "type": "boolean",
- "format": "boolean"
- },
- "peerURLs": {
- "description": "peerURLs is the list of URLs the added member will use to communicate with the cluster.",
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- "etcdserverpbMemberAddResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "member": {
- "description": "member is the member information for the added member.",
- "$ref": "#/definitions/etcdserverpbMember"
- },
- "members": {
- "description": "members is a list of all members after adding the new member.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbMember"
- }
- }
- }
- },
- "etcdserverpbMemberListRequest": {
- "type": "object",
- "properties": {
- "linearizable": {
- "type": "boolean",
- "format": "boolean"
- }
- }
- },
- "etcdserverpbMemberListResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "members": {
- "description": "members is a list of all members associated with the cluster.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbMember"
- }
- }
- }
- },
- "etcdserverpbMemberPromoteRequest": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the member ID of the member to promote.",
- "type": "string",
- "format": "uint64"
- }
- }
- },
- "etcdserverpbMemberPromoteResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "members": {
- "description": "members is a list of all members after promoting the member.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbMember"
- }
- }
- }
- },
- "etcdserverpbMemberRemoveRequest": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the member ID of the member to remove.",
- "type": "string",
- "format": "uint64"
- }
- }
- },
- "etcdserverpbMemberRemoveResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "members": {
- "description": "members is a list of all members after removing the member.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbMember"
- }
- }
- }
- },
- "etcdserverpbMemberUpdateRequest": {
- "type": "object",
- "properties": {
- "ID": {
- "description": "ID is the member ID of the member to update.",
- "type": "string",
- "format": "uint64"
- },
- "peerURLs": {
- "description": "peerURLs is the new list of URLs the member will use to communicate with the cluster.",
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- "etcdserverpbMemberUpdateResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "members": {
- "description": "members is a list of all members after updating the member.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbMember"
- }
- }
- }
- },
- "etcdserverpbMoveLeaderRequest": {
- "type": "object",
- "properties": {
- "targetID": {
- "description": "targetID is the node ID for the new leader.",
- "type": "string",
- "format": "uint64"
- }
- }
- },
- "etcdserverpbMoveLeaderResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "etcdserverpbPutRequest": {
- "type": "object",
- "properties": {
- "ignore_lease": {
- "description": "If ignore_lease is set, etcd updates the key using its current lease.\nReturns an error if the key does not exist.",
- "type": "boolean",
- "format": "boolean"
- },
- "ignore_value": {
- "description": "If ignore_value is set, etcd updates the key using its current value.\nReturns an error if the key does not exist.",
- "type": "boolean",
- "format": "boolean"
- },
- "key": {
- "description": "key is the key, in bytes, to put into the key-value store.",
- "type": "string",
- "format": "byte"
- },
- "lease": {
- "description": "lease is the lease ID to associate with the key in the key-value store. A lease\nvalue of 0 indicates no lease.",
- "type": "string",
- "format": "int64"
- },
- "prev_kv": {
- "description": "If prev_kv is set, etcd gets the previous key-value pair before changing it.\nThe previous key-value pair will be returned in the put response.",
- "type": "boolean",
- "format": "boolean"
- },
- "value": {
- "description": "value is the value, in bytes, to associate with the key in the key-value store.",
- "type": "string",
- "format": "byte"
- }
- }
- },
- "etcdserverpbPutResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "prev_kv": {
- "description": "if prev_kv is set in the request, the previous key-value pair will be returned.",
- "$ref": "#/definitions/mvccpbKeyValue"
- }
- }
- },
- "etcdserverpbRangeRequest": {
- "type": "object",
- "properties": {
- "count_only": {
- "description": "count_only when set returns only the count of the keys in the range.",
- "type": "boolean",
- "format": "boolean"
- },
- "key": {
- "description": "key is the first key for the range. If range_end is not given, the request only looks up key.",
- "type": "string",
- "format": "byte"
- },
- "keys_only": {
- "description": "keys_only when set returns only the keys and not the values.",
- "type": "boolean",
- "format": "boolean"
- },
- "limit": {
- "description": "limit is a limit on the number of keys returned for the request. When limit is set to 0,\nit is treated as no limit.",
- "type": "string",
- "format": "int64"
- },
- "max_create_revision": {
- "description": "max_create_revision is the upper bound for returned key create revisions; all keys with\ngreater create revisions will be filtered away.",
- "type": "string",
- "format": "int64"
- },
- "max_mod_revision": {
- "description": "max_mod_revision is the upper bound for returned key mod revisions; all keys with\ngreater mod revisions will be filtered away.",
- "type": "string",
- "format": "int64"
- },
- "min_create_revision": {
- "description": "min_create_revision is the lower bound for returned key create revisions; all keys with\nlesser create revisions will be filtered away.",
- "type": "string",
- "format": "int64"
- },
- "min_mod_revision": {
- "description": "min_mod_revision is the lower bound for returned key mod revisions; all keys with\nlesser mod revisions will be filtered away.",
- "type": "string",
- "format": "int64"
- },
- "range_end": {
- "description": "range_end is the upper bound on the requested range [key, range_end).\nIf range_end is '\\0', the range is all keys \u003e= key.\nIf range_end is key plus one (e.g., \"aa\"+1 == \"ab\", \"a\\xff\"+1 == \"b\"),\nthen the range request gets all keys prefixed with key.\nIf both key and range_end are '\\0', then the range request returns all keys.",
- "type": "string",
- "format": "byte"
- },
- "revision": {
- "description": "revision is the point-in-time of the key-value store to use for the range.\nIf revision is less or equal to zero, the range is over the newest key-value store.\nIf the revision has been compacted, ErrCompacted is returned as a response.",
- "type": "string",
- "format": "int64"
- },
- "serializable": {
- "description": "serializable sets the range request to use serializable member-local reads.\nRange requests are linearizable by default; linearizable requests have higher\nlatency and lower throughput than serializable requests but reflect the current\nconsensus of the cluster. For better performance, in exchange for possible stale reads,\na serializable range request is served locally without needing to reach consensus\nwith other nodes in the cluster.",
- "type": "boolean",
- "format": "boolean"
- },
- "sort_order": {
- "description": "sort_order is the order for returned sorted results.",
- "$ref": "#/definitions/RangeRequestSortOrder"
- },
- "sort_target": {
- "description": "sort_target is the key-value field to use for sorting.",
- "$ref": "#/definitions/RangeRequestSortTarget"
- }
- }
- },
- "etcdserverpbRangeResponse": {
- "type": "object",
- "properties": {
- "count": {
- "description": "count is set to the number of keys within the range when requested.",
- "type": "string",
- "format": "int64"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "kvs": {
- "description": "kvs is the list of key-value pairs matched by the range request.\nkvs is empty when count is requested.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/mvccpbKeyValue"
- }
- },
- "more": {
- "description": "more indicates if there are more keys to return in the requested range.",
- "type": "boolean",
- "format": "boolean"
- }
- }
- },
- "etcdserverpbRequestOp": {
- "type": "object",
- "properties": {
- "request_delete_range": {
- "$ref": "#/definitions/etcdserverpbDeleteRangeRequest"
- },
- "request_put": {
- "$ref": "#/definitions/etcdserverpbPutRequest"
- },
- "request_range": {
- "$ref": "#/definitions/etcdserverpbRangeRequest"
- },
- "request_txn": {
- "$ref": "#/definitions/etcdserverpbTxnRequest"
- }
- }
- },
- "etcdserverpbResponseHeader": {
- "type": "object",
- "properties": {
- "cluster_id": {
- "description": "cluster_id is the ID of the cluster which sent the response.",
- "type": "string",
- "format": "uint64"
- },
- "member_id": {
- "description": "member_id is the ID of the member which sent the response.",
- "type": "string",
- "format": "uint64"
- },
- "raft_term": {
- "description": "raft_term is the raft term when the request was applied.",
- "type": "string",
- "format": "uint64"
- },
- "revision": {
- "description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nrecieved in this stream are guaranteed to have a higher revision number than the\nheader.revision number.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbResponseOp": {
- "type": "object",
- "properties": {
- "response_delete_range": {
- "$ref": "#/definitions/etcdserverpbDeleteRangeResponse"
- },
- "response_put": {
- "$ref": "#/definitions/etcdserverpbPutResponse"
- },
- "response_range": {
- "$ref": "#/definitions/etcdserverpbRangeResponse"
- },
- "response_txn": {
- "$ref": "#/definitions/etcdserverpbTxnResponse"
- }
- }
- },
- "etcdserverpbSnapshotRequest": {
- "type": "object"
- },
- "etcdserverpbSnapshotResponse": {
- "type": "object",
- "properties": {
- "blob": {
- "description": "blob contains the next chunk of the snapshot in the snapshot stream.",
- "type": "string",
- "format": "byte"
- },
- "header": {
- "description": "header has the current key-value store information. The first header in the snapshot\nstream indicates the point in time of the snapshot.",
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "remaining_bytes": {
- "type": "string",
- "format": "uint64",
- "title": "remaining_bytes is the number of blob bytes to be sent after this message"
- }
- }
- },
- "etcdserverpbStatusRequest": {
- "type": "object"
- },
- "etcdserverpbStatusResponse": {
- "type": "object",
- "properties": {
- "dbSize": {
- "description": "dbSize is the size of the backend database physically allocated, in bytes, of the responding member.",
- "type": "string",
- "format": "int64"
- },
- "dbSizeInUse": {
- "description": "dbSizeInUse is the size of the backend database logically in use, in bytes, of the responding member.",
- "type": "string",
- "format": "int64"
- },
- "errors": {
- "description": "errors contains alarm/health information and status.",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "isLearner": {
- "description": "isLearner indicates if the member is raft learner.",
- "type": "boolean",
- "format": "boolean"
- },
- "leader": {
- "description": "leader is the member ID which the responding member believes is the current leader.",
- "type": "string",
- "format": "uint64"
- },
- "raftAppliedIndex": {
- "description": "raftAppliedIndex is the current raft applied index of the responding member.",
- "type": "string",
- "format": "uint64"
- },
- "raftIndex": {
- "description": "raftIndex is the current raft committed index of the responding member.",
- "type": "string",
- "format": "uint64"
- },
- "raftTerm": {
- "description": "raftTerm is the current raft term of the responding member.",
- "type": "string",
- "format": "uint64"
- },
- "version": {
- "description": "version is the cluster protocol version used by the responding member.",
- "type": "string"
- }
- }
- },
- "etcdserverpbTxnRequest": {
- "description": "From google paxosdb paper:\nOur implementation hinges around a powerful primitive which we call MultiOp. All other database\noperations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically\nand consists of three components:\n1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check\nfor the absence or presence of a value, or compare with a given value. Two different tests in the guard\nmay apply to the same or different entries in the database. All tests in the guard are applied and\nMultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise\nit executes f op (see item 3 below).\n2. A list of database operations called t op. Each operation in the list is either an insert, delete, or\nlookup operation, and applies to a single database entry. Two different operations in the list may apply\nto the same or different entries in the database. These operations are executed\nif guard evaluates to\ntrue.\n3. A list of database operations called f op. Like t op, but executed if guard evaluates to false.",
- "type": "object",
- "properties": {
- "compare": {
- "description": "compare is a list of predicates representing a conjunction of terms.\nIf the comparisons succeed, then the success requests will be processed in order,\nand the response will contain their respective responses in order.\nIf the comparisons fail, then the failure requests will be processed in order,\nand the response will contain their respective responses in order.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbCompare"
- }
- },
- "failure": {
- "description": "failure is a list of requests which will be applied when compare evaluates to false.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbRequestOp"
- }
- },
- "success": {
- "description": "success is a list of requests which will be applied when compare evaluates to true.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbRequestOp"
- }
- }
- }
- },
- "etcdserverpbTxnResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "responses": {
- "description": "responses is a list of responses corresponding to the results from applying\nsuccess if succeeded is true or failure if succeeded is false.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/etcdserverpbResponseOp"
- }
- },
- "succeeded": {
- "description": "succeeded is set to true if the compare evaluated to true or false otherwise.",
- "type": "boolean",
- "format": "boolean"
- }
- }
- },
- "etcdserverpbWatchCancelRequest": {
- "type": "object",
- "properties": {
- "watch_id": {
- "description": "watch_id is the watcher id to cancel so that no more events are transmitted.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbWatchCreateRequest": {
- "type": "object",
- "properties": {
- "filters": {
- "description": "filters filter the events at server side before it sends back to the watcher.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/WatchCreateRequestFilterType"
- }
- },
- "fragment": {
- "description": "fragment enables splitting large revisions into multiple watch responses.",
- "type": "boolean",
- "format": "boolean"
- },
- "key": {
- "description": "key is the key to register for watching.",
- "type": "string",
- "format": "byte"
- },
- "prev_kv": {
- "description": "If prev_kv is set, created watcher gets the previous KV before the event happens.\nIf the previous KV is already compacted, nothing will be returned.",
- "type": "boolean",
- "format": "boolean"
- },
- "progress_notify": {
- "description": "progress_notify is set so that the etcd server will periodically send a WatchResponse with\nno events to the new watcher if there are no recent events. It is useful when clients\nwish to recover a disconnected watcher starting from a recent known revision.\nThe etcd server may decide how often it will send notifications based on current load.",
- "type": "boolean",
- "format": "boolean"
- },
- "range_end": {
- "description": "range_end is the end of the range [key, range_end) to watch. If range_end is not given,\nonly the key argument is watched. If range_end is equal to '\\0', all keys greater than\nor equal to the key argument are watched.\nIf the range_end is one bit larger than the given key,\nthen all keys with the prefix (the given key) will be watched.",
- "type": "string",
- "format": "byte"
- },
- "start_revision": {
- "description": "start_revision is an optional revision to watch from (inclusive). No start_revision is \"now\".",
- "type": "string",
- "format": "int64"
- },
- "watch_id": {
- "description": "If watch_id is provided and non-zero, it will be assigned to this watcher.\nSince creating a watcher in etcd is not a synchronous operation,\nthis can be used ensure that ordering is correct when creating multiple\nwatchers on the same stream. Creating a watcher with an ID already in\nuse on the stream will cause an error to be returned.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "etcdserverpbWatchProgressRequest": {
- "description": "Requests the a watch stream progress status be sent in the watch response stream as soon as\npossible.",
- "type": "object"
- },
- "etcdserverpbWatchRequest": {
- "type": "object",
- "properties": {
- "cancel_request": {
- "$ref": "#/definitions/etcdserverpbWatchCancelRequest"
- },
- "create_request": {
- "$ref": "#/definitions/etcdserverpbWatchCreateRequest"
- },
- "progress_request": {
- "$ref": "#/definitions/etcdserverpbWatchProgressRequest"
- }
- }
- },
- "etcdserverpbWatchResponse": {
- "type": "object",
- "properties": {
- "cancel_reason": {
- "description": "cancel_reason indicates the reason for canceling the watcher.",
- "type": "string"
- },
- "canceled": {
- "description": "canceled is set to true if the response is for a cancel watch request.\nNo further events will be sent to the canceled watcher.",
- "type": "boolean",
- "format": "boolean"
- },
- "compact_revision": {
- "description": "compact_revision is set to the minimum index if a watcher tries to watch\nat a compacted index.\n\nThis happens when creating a watcher at a compacted revision or the watcher cannot\ncatch up with the progress of the key-value store.\n\nThe client should treat the watcher as canceled and should not try to create any\nwatcher with the same start_revision again.",
- "type": "string",
- "format": "int64"
- },
- "created": {
- "description": "created is set to true if the response is for a create watch request.\nThe client should record the watch_id and expect to receive events for\nthe created watcher from the same stream.\nAll events sent to the created watcher will attach with the same watch_id.",
- "type": "boolean",
- "format": "boolean"
- },
- "events": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/mvccpbEvent"
- }
- },
- "fragment": {
- "description": "framgment is true if large watch response was split over multiple responses.",
- "type": "boolean",
- "format": "boolean"
- },
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "watch_id": {
- "description": "watch_id is the ID of the watcher that corresponds to the response.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "mvccpbEvent": {
- "type": "object",
- "properties": {
- "kv": {
- "description": "kv holds the KeyValue for the event.\nA PUT event contains current kv pair.\nA PUT event with kv.Version=1 indicates the creation of a key.\nA DELETE/EXPIRE event contains the deleted key with\nits modification revision set to the revision of deletion.",
- "$ref": "#/definitions/mvccpbKeyValue"
- },
- "prev_kv": {
- "description": "prev_kv holds the key-value pair before the event happens.",
- "$ref": "#/definitions/mvccpbKeyValue"
- },
- "type": {
- "description": "type is the kind of event. If type is a PUT, it indicates\nnew data has been stored to the key. If type is a DELETE,\nit indicates the key was deleted.",
- "$ref": "#/definitions/EventEventType"
- }
- }
- },
- "mvccpbKeyValue": {
- "type": "object",
- "properties": {
- "create_revision": {
- "description": "create_revision is the revision of last creation on this key.",
- "type": "string",
- "format": "int64"
- },
- "key": {
- "description": "key is the key in bytes. An empty key is not allowed.",
- "type": "string",
- "format": "byte"
- },
- "lease": {
- "description": "lease is the ID of the lease that attached to key.\nWhen the attached lease expires, the key will be deleted.\nIf lease is 0, then no lease is attached to the key.",
- "type": "string",
- "format": "int64"
- },
- "mod_revision": {
- "description": "mod_revision is the revision of last modification on this key.",
- "type": "string",
- "format": "int64"
- },
- "value": {
- "description": "value is the value held by the key, in bytes.",
- "type": "string",
- "format": "byte"
- },
- "version": {
- "description": "version is the version of the key. A deletion resets\nthe version to zero and any modification of the key\nincreases its version.",
- "type": "string",
- "format": "int64"
- }
- }
- },
- "protobufAny": {
- "type": "object",
- "properties": {
- "type_url": {
- "type": "string"
- },
- "value": {
- "type": "string",
- "format": "byte"
- }
- }
- },
- "runtimeError": {
- "type": "object",
- "properties": {
- "code": {
- "type": "integer",
- "format": "int32"
- },
- "details": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/protobufAny"
- }
- },
- "error": {
- "type": "string"
- },
- "message": {
- "type": "string"
- }
- }
- },
- "runtimeStreamError": {
- "type": "object",
- "properties": {
- "details": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/protobufAny"
- }
- },
- "grpc_code": {
- "type": "integer",
- "format": "int32"
- },
- "http_code": {
- "type": "integer",
- "format": "int32"
- },
- "http_status": {
- "type": "string"
- },
- "message": {
- "type": "string"
- }
- }
- }
- },
- "securityDefinitions": {
- "ApiKey": {
- "type": "apiKey",
- "name": "Authorization",
- "in": "header"
- }
- },
- "security": [
- {
- "ApiKey": []
- }
- ]
-}
\ No newline at end of file
diff --git a/etcd-fix/Documentation/dev-guide/apispec/swagger/v3election.swagger.json b/etcd-fix/Documentation/dev-guide/apispec/swagger/v3election.swagger.json
deleted file mode 100644
index efd647a..0000000
--- a/etcd-fix/Documentation/dev-guide/apispec/swagger/v3election.swagger.json
+++ /dev/null
@@ -1,427 +0,0 @@
-{
- "swagger": "2.0",
- "info": {
- "title": "etcdserver/api/v3election/v3electionpb/v3election.proto",
- "version": "version not set"
- },
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "paths": {
- "/v3/election/campaign": {
- "post": {
- "summary": "Campaign waits to acquire leadership in an election, returning a LeaderKey\nrepresenting the leadership if successful. The LeaderKey can then be used\nto issue new values on the election, transactionally guard API requests on\nleadership still being held, and resign from the election.",
- "operationId": "Election_Campaign",
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/v3electionpbCampaignResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- },
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/v3electionpbCampaignRequest"
- }
- }
- ],
- "tags": [
- "Election"
- ]
- }
- },
- "/v3/election/leader": {
- "post": {
- "summary": "Leader returns the current election proclamation, if any.",
- "operationId": "Election_Leader",
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/v3electionpbLeaderResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- },
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/v3electionpbLeaderRequest"
- }
- }
- ],
- "tags": [
- "Election"
- ]
- }
- },
- "/v3/election/observe": {
- "post": {
- "summary": "Observe streams election proclamations in-order as made by the election's\nelected leaders.",
- "operationId": "Election_Observe",
- "responses": {
- "200": {
- "description": "A successful response.(streaming responses)",
- "schema": {
- "type": "object",
- "properties": {
- "result": {
- "$ref": "#/definitions/v3electionpbLeaderResponse"
- },
- "error": {
- "$ref": "#/definitions/runtimeStreamError"
- }
- },
- "title": "Stream result of v3electionpbLeaderResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- },
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/v3electionpbLeaderRequest"
- }
- }
- ],
- "tags": [
- "Election"
- ]
- }
- },
- "/v3/election/proclaim": {
- "post": {
- "summary": "Proclaim updates the leader's posted value with a new value.",
- "operationId": "Election_Proclaim",
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/v3electionpbProclaimResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- },
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/v3electionpbProclaimRequest"
- }
- }
- ],
- "tags": [
- "Election"
- ]
- }
- },
- "/v3/election/resign": {
- "post": {
- "summary": "Resign releases election leadership so other campaigners may acquire\nleadership on the election.",
- "operationId": "Election_Resign",
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/v3electionpbResignResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- },
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/v3electionpbResignRequest"
- }
- }
- ],
- "tags": [
- "Election"
- ]
- }
- }
- },
- "definitions": {
- "etcdserverpbResponseHeader": {
- "type": "object",
- "properties": {
- "cluster_id": {
- "type": "string",
- "format": "uint64",
- "description": "cluster_id is the ID of the cluster which sent the response."
- },
- "member_id": {
- "type": "string",
- "format": "uint64",
- "description": "member_id is the ID of the member which sent the response."
- },
- "revision": {
- "type": "string",
- "format": "int64",
- "description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nrecieved in this stream are guaranteed to have a higher revision number than the\nheader.revision number."
- },
- "raft_term": {
- "type": "string",
- "format": "uint64",
- "description": "raft_term is the raft term when the request was applied."
- }
- }
- },
- "mvccpbKeyValue": {
- "type": "object",
- "properties": {
- "key": {
- "type": "string",
- "format": "byte",
- "description": "key is the key in bytes. An empty key is not allowed."
- },
- "create_revision": {
- "type": "string",
- "format": "int64",
- "description": "create_revision is the revision of last creation on this key."
- },
- "mod_revision": {
- "type": "string",
- "format": "int64",
- "description": "mod_revision is the revision of last modification on this key."
- },
- "version": {
- "type": "string",
- "format": "int64",
- "description": "version is the version of the key. A deletion resets\nthe version to zero and any modification of the key\nincreases its version."
- },
- "value": {
- "type": "string",
- "format": "byte",
- "description": "value is the value held by the key, in bytes."
- },
- "lease": {
- "type": "string",
- "format": "int64",
- "description": "lease is the ID of the lease that attached to key.\nWhen the attached lease expires, the key will be deleted.\nIf lease is 0, then no lease is attached to the key."
- }
- }
- },
- "protobufAny": {
- "type": "object",
- "properties": {
- "type_url": {
- "type": "string"
- },
- "value": {
- "type": "string",
- "format": "byte"
- }
- }
- },
- "runtimeError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "string"
- },
- "code": {
- "type": "integer",
- "format": "int32"
- },
- "message": {
- "type": "string"
- },
- "details": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/protobufAny"
- }
- }
- }
- },
- "runtimeStreamError": {
- "type": "object",
- "properties": {
- "grpc_code": {
- "type": "integer",
- "format": "int32"
- },
- "http_code": {
- "type": "integer",
- "format": "int32"
- },
- "message": {
- "type": "string"
- },
- "http_status": {
- "type": "string"
- },
- "details": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/protobufAny"
- }
- }
- }
- },
- "v3electionpbCampaignRequest": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "format": "byte",
- "description": "name is the election's identifier for the campaign."
- },
- "lease": {
- "type": "string",
- "format": "int64",
- "description": "lease is the ID of the lease attached to leadership of the election. If the\nlease expires or is revoked before resigning leadership, then the\nleadership is transferred to the next campaigner, if any."
- },
- "value": {
- "type": "string",
- "format": "byte",
- "description": "value is the initial proclaimed value set when the campaigner wins the\nelection."
- }
- }
- },
- "v3electionpbCampaignResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "leader": {
- "$ref": "#/definitions/v3electionpbLeaderKey",
- "description": "leader describes the resources used for holding leadereship of the election."
- }
- }
- },
- "v3electionpbLeaderKey": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "format": "byte",
- "description": "name is the election identifier that correponds to the leadership key."
- },
- "key": {
- "type": "string",
- "format": "byte",
- "description": "key is an opaque key representing the ownership of the election. If the key\nis deleted, then leadership is lost."
- },
- "rev": {
- "type": "string",
- "format": "int64",
- "description": "rev is the creation revision of the key. It can be used to test for ownership\nof an election during transactions by testing the key's creation revision\nmatches rev."
- },
- "lease": {
- "type": "string",
- "format": "int64",
- "description": "lease is the lease ID of the election leader."
- }
- }
- },
- "v3electionpbLeaderRequest": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "format": "byte",
- "description": "name is the election identifier for the leadership information."
- }
- }
- },
- "v3electionpbLeaderResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "kv": {
- "$ref": "#/definitions/mvccpbKeyValue",
- "description": "kv is the key-value pair representing the latest leader update."
- }
- }
- },
- "v3electionpbProclaimRequest": {
- "type": "object",
- "properties": {
- "leader": {
- "$ref": "#/definitions/v3electionpbLeaderKey",
- "description": "leader is the leadership hold on the election."
- },
- "value": {
- "type": "string",
- "format": "byte",
- "description": "value is an update meant to overwrite the leader's current value."
- }
- }
- },
- "v3electionpbProclaimResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- },
- "v3electionpbResignRequest": {
- "type": "object",
- "properties": {
- "leader": {
- "$ref": "#/definitions/v3electionpbLeaderKey",
- "description": "leader is the leadership to relinquish by resignation."
- }
- }
- },
- "v3electionpbResignResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- }
- }
-}
diff --git a/etcd-fix/Documentation/dev-guide/apispec/swagger/v3lock.swagger.json b/etcd-fix/Documentation/dev-guide/apispec/swagger/v3lock.swagger.json
deleted file mode 100644
index b3692fd..0000000
--- a/etcd-fix/Documentation/dev-guide/apispec/swagger/v3lock.swagger.json
+++ /dev/null
@@ -1,187 +0,0 @@
-{
- "swagger": "2.0",
- "info": {
- "title": "etcdserver/api/v3lock/v3lockpb/v3lock.proto",
- "version": "version not set"
- },
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "paths": {
- "/v3/lock/lock": {
- "post": {
- "summary": "Lock acquires a distributed shared lock on a given named lock.\nOn success, it will return a unique key that exists so long as the\nlock is held by the caller. This key can be used in conjunction with\ntransactions to safely ensure updates to etcd only occur while holding\nlock ownership. The lock is held until Unlock is called on the key or the\nlease associate with the owner expires.",
- "operationId": "Lock_Lock",
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/v3lockpbLockResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- },
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/v3lockpbLockRequest"
- }
- }
- ],
- "tags": [
- "Lock"
- ]
- }
- },
- "/v3/lock/unlock": {
- "post": {
- "summary": "Unlock takes a key returned by Lock and releases the hold on lock. The\nnext Lock caller waiting for the lock will then be woken up and given\nownership of the lock.",
- "operationId": "Lock_Unlock",
- "responses": {
- "200": {
- "description": "A successful response.",
- "schema": {
- "$ref": "#/definitions/v3lockpbUnlockResponse"
- }
- },
- "default": {
- "description": "An unexpected error response",
- "schema": {
- "$ref": "#/definitions/runtimeError"
- }
- }
- },
- "parameters": [
- {
- "name": "body",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/v3lockpbUnlockRequest"
- }
- }
- ],
- "tags": [
- "Lock"
- ]
- }
- }
- },
- "definitions": {
- "etcdserverpbResponseHeader": {
- "type": "object",
- "properties": {
- "cluster_id": {
- "type": "string",
- "format": "uint64",
- "description": "cluster_id is the ID of the cluster which sent the response."
- },
- "member_id": {
- "type": "string",
- "format": "uint64",
- "description": "member_id is the ID of the member which sent the response."
- },
- "revision": {
- "type": "string",
- "format": "int64",
- "description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nrecieved in this stream are guaranteed to have a higher revision number than the\nheader.revision number."
- },
- "raft_term": {
- "type": "string",
- "format": "uint64",
- "description": "raft_term is the raft term when the request was applied."
- }
- }
- },
- "protobufAny": {
- "type": "object",
- "properties": {
- "type_url": {
- "type": "string"
- },
- "value": {
- "type": "string",
- "format": "byte"
- }
- }
- },
- "runtimeError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "string"
- },
- "code": {
- "type": "integer",
- "format": "int32"
- },
- "message": {
- "type": "string"
- },
- "details": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/protobufAny"
- }
- }
- }
- },
- "v3lockpbLockRequest": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "format": "byte",
- "description": "name is the identifier for the distributed shared lock to be acquired."
- },
- "lease": {
- "type": "string",
- "format": "int64",
- "description": "lease is the ID of the lease that will be attached to ownership of the\nlock. If the lease expires or is revoked and currently holds the lock,\nthe lock is automatically released. Calls to Lock with the same lease will\nbe treated as a single acquisition; locking twice with the same lease is a\nno-op."
- }
- }
- },
- "v3lockpbLockResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- },
- "key": {
- "type": "string",
- "format": "byte",
- "description": "key is a key that will exist on etcd for the duration that the Lock caller\nowns the lock. Users should not modify this key or the lock may exhibit\nundefined behavior."
- }
- }
- },
- "v3lockpbUnlockRequest": {
- "type": "object",
- "properties": {
- "key": {
- "type": "string",
- "format": "byte",
- "description": "key is the lock ownership key granted by Lock."
- }
- }
- },
- "v3lockpbUnlockResponse": {
- "type": "object",
- "properties": {
- "header": {
- "$ref": "#/definitions/etcdserverpbResponseHeader"
- }
- }
- }
- }
-}
diff --git a/etcd-fix/Documentation/dev-guide/experimental_apis.md b/etcd-fix/Documentation/dev-guide/experimental_apis.md
deleted file mode 100644
index aba9742..0000000
--- a/etcd-fix/Documentation/dev-guide/experimental_apis.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: Experimental APIs and features
----
-
-For the most part, the etcd project is stable, but we are still moving fast! We believe in the release fast philosophy. We want to get early feedback on features still in development and stabilizing. Thus, there are, and will be more, experimental features and APIs. We plan to improve these features based on the early feedback from the community, or abandon them if there is little interest, in the next few releases. Please do not rely on any experimental features or APIs in production environment.
-
-## The current experimental API/features are:
-
-- [KV ordering](https://godoc.org/github.com/etcd-io/etcd/clientv3/ordering) wrapper. When an etcd client switches endpoints, responses to serializable reads may go backward in time if the new endpoint is lagging behind the rest of the cluster. The ordering wrapper caches the current cluster revision from response headers. If a response revision is less than the cached revision, the client selects another endpoint and reissues the read. Enable in grpcproxy with `--experimental-serializable-ordering`.
diff --git a/etcd-fix/Documentation/dev-guide/grpc_naming.md b/etcd-fix/Documentation/dev-guide/grpc_naming.md
deleted file mode 100644
index 068b0b4..0000000
--- a/etcd-fix/Documentation/dev-guide/grpc_naming.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: gRPC naming and discovery
----
-
-etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.
-
-## Using etcd discovery with go-grpc
-
-The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client and given a target for resolution:
-
-```go
-import (
- "go.etcd.io/etcd/v3/clientv3"
- etcdnaming "go.etcd.io/etcd/v3/clientv3/naming"
-
- "google.golang.org/grpc"
-)
-
-...
-
-cli, cerr := clientv3.NewFromURL("http://localhost:2379")
-r := &etcdnaming.GRPCResolver{Client: cli}
-b := grpc.RoundRobin(r)
-conn, gerr := grpc.Dial("my-service", grpc.WithBalancer(b), grpc.WithBlock(), ...)
-```
-
-## Managing service endpoints
-
-The etcd resolver treats all keys under the prefix of the resolution target following a "/" (e.g., "my-service/") with JSON-encoded go-grpc `naming.Update` values as potential service endpoints. Endpoints are added to the service by creating new keys and removed from the service by deleting keys.
-
-### Adding an endpoint
-
-New endpoints can be added to the service through `etcdctl`:
-
-```sh
-ETCDCTL_API=3 etcdctl put my-service/1.2.3.4 '{"Addr":"1.2.3.4","Metadata":"..."}'
-```
-
-The etcd client's `GRPCResolver.Update` method can also register new endpoints with a key matching the `Addr`:
-
-```go
-r.Update(context.TODO(), "my-service", naming.Update{Op: naming.Add, Addr: "1.2.3.4", Metadata: "..."})
-```
-
-### Deleting an endpoint
-
-Hosts can be deleted from the service through `etcdctl`:
-
-```sh
-ETCDCTL_API=3 etcdctl del my-service/1.2.3.4
-```
-
-The etcd client's `GRPCResolver.Update` method also supports deleting endpoints:
-
-```go
-r.Update(context.TODO(), "my-service", naming.Update{Op: naming.Delete, Addr: "1.2.3.4"})
-```
-
-### Registering an endpoint with a lease
-
-Registering an endpoint with a lease ensures that if the host can't maintain a keepalive heartbeat (e.g., its machine fails), it will be removed from the service:
-
-```sh
-lease=`ETCDCTL_API=3 etcdctl lease grant 5 | cut -f2 -d' '`
-ETCDCTL_API=3 etcdctl put --lease=$lease my-service/1.2.3.4 '{"Addr":"1.2.3.4","Metadata":"..."}'
-ETCDCTL_API=3 etcdctl lease keep-alive $lease
-```
diff --git a/etcd-fix/Documentation/dev-guide/interacting_v3.md b/etcd-fix/Documentation/dev-guide/interacting_v3.md
deleted file mode 100644
index 8dc5a1f..0000000
--- a/etcd-fix/Documentation/dev-guide/interacting_v3.md
+++ /dev/null
@@ -1,499 +0,0 @@
----
-title: Interacting with etcd
----
-
-Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.
-
-The API version used by etcdctl to speak to etcd may be set to version `2` or `3` via the `ETCDCTL_API` environment variable. By default, etcdctl on master (3.4) uses the v3 API and earlier versions (3.3 and earlier) default to the v2 API.
-
-Note that any key that was created using the v2 API will not be able to be queried via the v3 API. A v3 API ```etcdctl get``` of a v2 key will exit with 0 and no key data, this is the expected behaviour.
-
-
-```bash
-export ETCDCTL_API=3
-```
-
-## Find versions
-
-etcdctl version and Server API version can be useful in finding the appropriate commands to be used for performing various operations on etcd.
-
-Here is the command to find the versions:
-
-```bash
-$ etcdctl version
-etcdctl version: 3.1.0-alpha.0+git
-API version: 3.1
-```
-
-## Write a key
-
-Applications store keys into the etcd cluster by writing to keys. Every stored key is replicated to all etcd cluster members through the Raft protocol to achieve consistency and reliability.
-
-Here is the command to set the value of key `foo` to `bar`:
-
-```bash
-$ etcdctl put foo bar
-OK
-```
-
-Also a key can be set for a specified interval of time by attaching lease to it.
-
-Here is the command to set the value of key `foo1` to `bar1` for 10s.
-
-```bash
-$ etcdctl put foo1 bar1 --lease=1234abcd
-OK
-```
-
-Note: The lease id `1234abcd` in the above command refers to id returned on creating the lease of 10s. This id can then be attached to the key.
-
-## Read keys
-
-Applications can read values of keys from an etcd cluster. Queries may read a single key, or a range of keys.
-
-Suppose the etcd cluster has stored the following keys:
-
-```bash
-foo = bar
-foo1 = bar1
-foo2 = bar2
-foo3 = bar3
-```
-
-Here is the command to read the value of key `foo`:
-
-```bash
-$ etcdctl get foo
-foo
-bar
-```
-
-Here is the command to read the value of key `foo` in hex format:
-
-```bash
-$ etcdctl get foo --hex
-\x66\x6f\x6f # Key
-\x62\x61\x72 # Value
-```
-
-Here is the command to read only the value of key `foo`:
-
-```bash
-$ etcdctl get foo --print-value-only
-bar
-```
-
-Here is the command to range over the keys from `foo` to `foo3`:
-
-```bash
-$ etcdctl get foo foo3
-foo
-bar
-foo1
-bar1
-foo2
-bar2
-```
-
-Note that `foo3` is excluded since the range is over the half-open interval `[foo, foo3)`, excluding `foo3`.
-
-Here is the command to range over all keys prefixed with `foo`:
-
-```bash
-$ etcdctl get --prefix foo
-foo
-bar
-foo1
-bar1
-foo2
-bar2
-foo3
-bar3
-```
-
-Here is the command to range over all keys prefixed with `foo`, limiting the number of results to 2:
-
-```bash
-$ etcdctl get --prefix --limit=2 foo
-foo
-bar
-foo1
-bar1
-```
-
-## Read past version of keys
-
-Applications may want to read superseded versions of a key. For example, an application may wish to roll back to an old configuration by accessing an earlier version of a key. Alternatively, an application may want a consistent view over multiple keys through multiple requests by accessing key history.
-Since every modification to the etcd cluster key-value store increments the global revision of an etcd cluster, an application can read superseded keys by providing an older etcd revision.
-
-Suppose an etcd cluster already has the following keys:
-
-```bash
-foo = bar # revision = 2
-foo1 = bar1 # revision = 3
-foo = bar_new # revision = 4
-foo1 = bar1_new # revision = 5
-```
-
-Here are an example to access the past versions of keys:
-
-```bash
-$ etcdctl get --prefix foo # access the most recent versions of keys
-foo
-bar_new
-foo1
-bar1_new
-
-$ etcdctl get --prefix --rev=4 foo # access the versions of keys at revision 4
-foo
-bar_new
-foo1
-bar1
-
-$ etcdctl get --prefix --rev=3 foo # access the versions of keys at revision 3
-foo
-bar
-foo1
-bar1
-
-$ etcdctl get --prefix --rev=2 foo # access the versions of keys at revision 2
-foo
-bar
-
-$ etcdctl get --prefix --rev=1 foo # access the versions of keys at revision 1
-```
-
-## Read keys which are greater than or equal to the byte value of the specified key
-
-Applications may want to read keys which are greater than or equal to the byte value of the specified key.
-
-Suppose an etcd cluster already has the following keys:
-
-```bash
-a = 123
-b = 456
-z = 789
-```
-
-Here is the command to read keys which are greater than or equal to the byte value of key `b` :
-
-```bash
-$ etcdctl get --from-key b
-b
-456
-z
-789
-```
-
-## Delete keys
-
-Applications can delete a key or a range of keys from an etcd cluster.
-
-Suppose an etcd cluster already has the following keys:
-
-```bash
-foo = bar
-foo1 = bar1
-foo3 = bar3
-zoo = val
-zoo1 = val1
-zoo2 = val2
-a = 123
-b = 456
-z = 789
-```
-
-Here is the command to delete key `foo`:
-
-```bash
-$ etcdctl del foo
-1 # one key is deleted
-```
-
-Here is the command to delete keys ranging from `foo` to `foo9`:
-
-```bash
-$ etcdctl del foo foo9
-2 # two keys are deleted
-```
-
-Here is the command to delete key `zoo` with the deleted key value pair returned:
-
-```bash
-$ etcdctl del --prev-kv zoo
-1 # one key is deleted
-zoo # deleted key
-val # the value of the deleted key
-```
-
-Here is the command to delete keys having prefix as `zoo`:
-
-```bash
-$ etcdctl del --prefix zoo
-2 # two keys are deleted
-```
-
-Here is the command to delete keys which are greater than or equal to the byte value of key `b` :
-
-```bash
-$ etcdctl del --from-key b
-2 # two keys are deleted
-```
-
-## Watch key changes
-
-Applications can watch on a key or a range of keys to monitor for any updates.
-
-Here is the command to watch on key `foo`:
-
-```bash
-$ etcdctl watch foo
-# in another terminal: etcdctl put foo bar
-PUT
-foo
-bar
-```
-
-Here is the command to watch on key `foo` in hex format:
-
-```bash
-$ etcdctl watch foo --hex
-# in another terminal: etcdctl put foo bar
-PUT
-\x66\x6f\x6f # Key
-\x62\x61\x72 # Value
-```
-
-Here is the command to watch on a range key from `foo` to `foo9`:
-
-```bash
-$ etcdctl watch foo foo9
-# in another terminal: etcdctl put foo bar
-PUT
-foo
-bar
-# in another terminal: etcdctl put foo1 bar1
-PUT
-foo1
-bar1
-```
-
-Here is the command to watch on keys having prefix `foo`:
-
-```bash
-$ etcdctl watch --prefix foo
-# in another terminal: etcdctl put foo bar
-PUT
-foo
-bar
-# in another terminal: etcdctl put fooz1 barz1
-PUT
-fooz1
-barz1
-```
-
-Here is the command to watch on multiple keys `foo` and `zoo`:
-
-```bash
-$ etcdctl watch -i
-$ watch foo
-$ watch zoo
-# in another terminal: etcdctl put foo bar
-PUT
-foo
-bar
-# in another terminal: etcdctl put zoo val
-PUT
-zoo
-val
-```
-
-## Watch historical changes of keys
-
-Applications may want to watch for historical changes of keys in etcd. For example, an application may wish to receive all the modifications of a key; if the application stays connected to etcd, then `watch` is good enough. However, if the application or etcd fails, a change may happen during the failure, and the application will not receive the update in real time. To guarantee the update is delivered, the application must be able to watch for historical changes to keys. To do this, an application can specify a historical revision on a watch, just like reading past version of keys.
-
-Suppose we finished the following sequence of operations:
-
-```bash
-$ etcdctl put foo bar # revision = 2
-OK
-$ etcdctl put foo1 bar1 # revision = 3
-OK
-$ etcdctl put foo bar_new # revision = 4
-OK
-$ etcdctl put foo1 bar1_new # revision = 5
-OK
-```
-
-Here is an example to watch the historical changes:
-
-```bash
-# watch for changes on key `foo` since revision 2
-$ etcdctl watch --rev=2 foo
-PUT
-foo
-bar
-PUT
-foo
-bar_new
-```
-
-```bash
-# watch for changes on key `foo` since revision 3
-$ etcdctl watch --rev=3 foo
-PUT
-foo
-bar_new
-```
-
-Here is an example to watch only from the last historical change:
-
-```bash
-# watch for changes on key `foo` and return last revision value along with modified value
-$ etcdctl watch --prev-kv foo
-# in another terminal: etcdctl put foo bar_latest
-PUT
-foo # key
-bar_new # last value of foo key before modification
-foo # key
-bar_latest # value of foo key after modification
-```
-
-## Watch progress
-
-Applications may want to check the progress of a watch to determine how up-to-date the watch stream is. For example, if a watch is used to update a cache, it can be useful to know if the cache is stale compared to the revision from a quorum read.
-
-Progress requests can be issued using the "progress" command in interactive watch session to ask the etcd server to send a progress notify update in the watch stream:
-
-```bash
-$ etcdctl watch -i
-$ watch a
-$ progress
-progress notify: 1
-# in another terminal: etcdctl put x 0
-# in another terminal: etcdctl put y 1
-$ progress
-progress notify: 3
-```
-
-Note: The revision number in the progress notify response is the revision from the local etcd server node that the watch stream is connected to. If this node is partitioned and not part of quorum, this progress notify revision might be lower than
-than the revision returned by a quorum read against a non-partitioned etcd server node.
-
-## Compacted revisions
-
-As we mentioned, etcd keeps revisions so that applications can read past versions of keys. However, to avoid accumulating an unbounded amount of history, it is important to compact past revisions. After compacting, etcd removes historical revisions, releasing resources for future use. All superseded data with revisions before the compacted revision will be unavailable.
-
-Here is the command to compact the revisions:
-
-```bash
-$ etcdctl compact 5
-compacted revision 5
-
-# any revisions before the compacted one are not accessible
-$ etcdctl get --rev=4 foo
-Error: rpc error: code = 11 desc = etcdserver: mvcc: required revision has been compacted
-```
-
-Note: The current revision of etcd server can be found using get command on any key (existent or non-existent) in json format. Example is shown below for mykey which does not exist in etcd server:
-
-```bash
-$ etcdctl get mykey -w=json
-{"header":{"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":15,"raft_term":4}}
-```
-
-## Grant leases
-
-Applications can grant leases for keys from an etcd cluster. When a key is attached to a lease, its lifetime is bound to the lease's lifetime which in turn is governed by a time-to-live (TTL). Each lease has a minimum time-to-live (TTL) value specified by the application at grant time. The lease's actual TTL value is at least the minimum TTL and is chosen by the etcd cluster. Once a lease's TTL elapses, the lease expires and all attached keys are deleted.
-
-Here is the command to grant a lease:
-
-```bash
-# grant a lease with 60 second TTL
-$ etcdctl lease grant 60
-lease 32695410dcc0ca06 granted with TTL(60s)
-
-# attach key foo to lease 32695410dcc0ca06
-$ etcdctl put --lease=32695410dcc0ca06 foo bar
-OK
-```
-
-## Revoke leases
-
-Applications revoke leases by lease ID. Revoking a lease deletes all of its attached keys.
-
-Suppose we finished the following sequence of operations:
-
-```bash
-$ etcdctl lease grant 60
-lease 32695410dcc0ca06 granted with TTL(60s)
-$ etcdctl put --lease=32695410dcc0ca06 foo bar
-OK
-```
-
-Here is the command to revoke the same lease:
-
-```bash
-$ etcdctl lease revoke 32695410dcc0ca06
-lease 32695410dcc0ca06 revoked
-
-$ etcdctl get foo
-# empty response since foo is deleted due to lease revocation
-```
-
-## Keep leases alive
-
-Applications can keep a lease alive by refreshing its TTL so it does not expire.
-
-Suppose we finished the following sequence of operations:
-
-```bash
-$ etcdctl lease grant 60
-lease 32695410dcc0ca06 granted with TTL(60s)
-```
-
-Here is the command to keep the same lease alive:
-
-```bash
-$ etcdctl lease keep-alive 32695410dcc0ca06
-lease 32695410dcc0ca06 keepalived with TTL(60)
-lease 32695410dcc0ca06 keepalived with TTL(60)
-lease 32695410dcc0ca06 keepalived with TTL(60)
-...
-```
-
-## Get lease information
-
-Applications may want to know about lease information, so that they can be renewed or to check if the lease still exists or it has expired. Applications may also want to know the keys to which a particular lease is attached.
-
-Suppose we finished the following sequence of operations:
-
-```bash
-# grant a lease with 500 second TTL
-$ etcdctl lease grant 500
-lease 694d5765fc71500b granted with TTL(500s)
-
-# attach key zoo1 to lease 694d5765fc71500b
-$ etcdctl put zoo1 val1 --lease=694d5765fc71500b
-OK
-
-# attach key zoo2 to lease 694d5765fc71500b
-$ etcdctl put zoo2 val2 --lease=694d5765fc71500b
-OK
-```
-
-Here is the command to get information about the lease:
-
-```bash
-$ etcdctl lease timetolive 694d5765fc71500b
-lease 694d5765fc71500b granted with TTL(500s), remaining(258s)
-```
-
-Here is the command to get information about the lease along with the keys attached with the lease:
-
-```bash
-$ etcdctl lease timetolive --keys 694d5765fc71500b
-lease 694d5765fc71500b granted with TTL(500s), remaining(132s), attached keys([zoo2 zoo1])
-
-# if the lease has expired or does not exist it will give the below response:
-Error: etcdserver: requested lease not found
-```
diff --git a/etcd-fix/Documentation/dev-guide/limit.md b/etcd-fix/Documentation/dev-guide/limit.md
deleted file mode 100644
index 0dfeca7..0000000
--- a/etcd-fix/Documentation/dev-guide/limit.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: System limits
----
-
-## Request size limit
-
-etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. By default, the maximum size of any request is 1.5 MiB. This limit is configurable through `--max-request-bytes` flag for etcd server.
-
-## Storage size limit
-
-The default storage size limit is 2GB, configurable with `--quota-backend-bytes` flag. 8GB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.
diff --git a/etcd-fix/Documentation/dev-guide/local_cluster.md b/etcd-fix/Documentation/dev-guide/local_cluster.md
deleted file mode 100644
index f418908..0000000
--- a/etcd-fix/Documentation/dev-guide/local_cluster.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-title: Set up a local cluster
----
-
-For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the [clustering][clustering] section.
-
-## Local standalone cluster
-
-### Starting a cluster
-
-Run the following to deploy an etcd cluster as a standalone cluster:
-
-```
-$ ./etcd
-...
-```
-
-If the `etcd` binary is not present in the current working directory, it might be located either at `$GOPATH/bin/etcd` or at `/usr/local/bin/etcd`. Run the command appropriately.
-
-The running etcd member listens on `localhost:2379` for client requests.
-
-### Interacting with the cluster
-
-Use `etcdctl` to interact with the running cluster:
-
-1. Store an example key-value pair in the cluster:
-
- ```
- $ ./etcdctl put foo bar
- OK
- ```
-
- If OK is printed, storing key-value pair is successful.
-
-2. Retrieve the value of `foo`:
-
- ```
- $ ./etcdctl get foo
- bar
- ```
-
- If `bar` is returned, interaction with the etcd cluster is working as expected.
-
-## Local multi-member cluster
-
-### Starting a cluster
-
-A `Procfile` at the base of the etcd git repository is provided to easily configure a local multi-member cluster. To start a multi-member cluster, navigate to the root of the etcd source tree and perform the following:
-
-1. Install `goreman` to control Procfile-based applications:
-
- ```
- $ go get github.com/mattn/goreman
- ```
-
-2. Start a cluster with `goreman` using etcd's stock Procfile:
-
- ```
- $ goreman -f Procfile start
- ```
-
- The members start running. They listen on `localhost:2379`, `localhost:22379`, and `localhost:32379` respectively for client requests.
-
-### Interacting with the cluster
-
-Use `etcdctl` to interact with the running cluster:
-
-1. Print the list of members:
-
- ```
- $ etcdctl --write-out=table --endpoints=localhost:2379 member list
- ```
- The list of etcd members are displayed as follows:
-
- ```
- +------------------+---------+--------+------------------------+------------------------+
- | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |
- +------------------+---------+--------+------------------------+------------------------+
- | 8211f1d0f64f3269 | started | infra1 | http://127.0.0.1:2380 | http://127.0.0.1:2379 |
- | 91bc3c398fb3c146 | started | infra2 | http://127.0.0.1:22380 | http://127.0.0.1:22379 |
- | fd422379fda50e48 | started | infra3 | http://127.0.0.1:32380 | http://127.0.0.1:32379 |
- +------------------+---------+--------+------------------------+------------------------+
- ```
-
-2. Store an example key-value pair in the cluster:
-
- ```
- $ etcdctl put foo bar
- OK
- ```
-
- If OK is printed, storing key-value pair is successful.
-
-### Testing fault tolerance
-
-To exercise etcd's fault tolerance, kill a member and attempt to retrieve the key.
-
-1. Identify the process name of the member to be stopped.
-
- The `Procfile` lists the properties of the multi-member cluster. For example, consider the member with the process name, `etcd2`.
-
-2. Stop the member:
-
- ```
- # kill etcd2
- $ goreman run stop etcd2
- ```
-
-3. Store a key:
-
- ```
- $ etcdctl put key hello
- OK
- ```
-
-4. Retrieve the key that is stored in the previous step:
-
- ```
- $ etcdctl get key
- hello
- ```
-
-5. Retrieve a key from the stopped member:
-
- ```
- $ etcdctl --endpoints=localhost:22379 get key
- ```
-
- The command should display an error caused by connection failure:
-
- ```
- 2017/06/18 23:07:35 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 127.0.0.1:22379: getsockopt: connection refused"; Reconnecting to "localhost:22379"
- Error: grpc: timed out trying to connect
- ```
-6. Restart the stopped member:
-
- ```
- $ goreman run restart etcd2
- ```
-
-7. Get the key from the restarted member:
-
- ```
- $ etcdctl --endpoints=localhost:22379 get key
- hello
- ```
-
- Restarting the member re-establish the connection. `etcdctl` will now be able to retrieve the key successfully. To learn more about interacting with etcd, read [interacting with etcd section][interacting].
-
-[interacting]: ./interacting_v3.md
-[clustering]: ../op-guide/clustering.md
diff --git a/etcd-fix/Documentation/dev-internal/discovery_protocol.md b/etcd-fix/Documentation/dev-internal/discovery_protocol.md
deleted file mode 100644
index 8a8de73..0000000
--- a/etcd-fix/Documentation/dev-internal/discovery_protocol.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-title: Discovery service protocol
----
-
-Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.
-
-Discovery service protocol is _only_ used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.
-
-The protocol uses a new discovery token to bootstrap one _unique_ etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.
-
-The rest of this article will walk through the discovery process with examples that correspond to a self-hosted discovery cluster. The public discovery service, discovery.etcd.io, functions the same way, but with a layer of polish to abstract away ugly URLs, generate UUIDs automatically, and provide some protections against excessive requests. At its core, the public discovery service still uses an etcd cluster as the data store as described in this document.
-
-## Protocol workflow
-
-The idea of discovery protocol is to use an internal etcd cluster to coordinate bootstrap of a new cluster. First, all new members interact with discovery service and help to generate the expected member list. Then each new member bootstraps its server using this list, which performs the same functionality as -initial-cluster flag.
-
-In the following example workflow, we will list each step of protocol in curl format for ease of understanding.
-
-By convention the etcd discovery protocol uses the key prefix `_etcd/registry`. If `http://example.com` hosts an etcd cluster for discovery service, a full URL to discovery keyspace will be `http://example.com/v2/keys/_etcd/registry`. We will use this as the URL prefix in the example.
-
-### Creating a new discovery token
-
-Generate a unique token that will identify the new cluster. This will be used as a unique prefix in discovery keyspace in the following steps. An easy way to do this is to use `uuidgen`:
-
-```
-UUID=$(uuidgen)
-```
-
-### Specifying the expected cluster size
-
-The discovery token expects a cluster size that must be specified. The size is used by the discovery service to know when it has found all members that will initially form the cluster.
-
-```
-curl -X PUT http://example.com/v2/keys/_etcd/registry/${UUID}/_config/size -d value=${cluster_size}
-```
-
-Usually the cluster size is 3, 5 or 7. Check [optimal cluster size][cluster-size] for more details.
-
-### Bringing up etcd processes
-
-Given the discovery URL, use it as `-discovery` flag and bring up etcd processes. Every etcd process will follow this next few steps internally if given a `-discovery` flag.
-
-### Registering itself
-
-The first thing for etcd process is to register itself into the discovery URL as a member. This is done by creating member ID as a key in the discovery URL.
-
-```
-curl -X PUT http://example.com/v2/keys/_etcd/registry/${UUID}/${member_id}?prevExist=false -d value="${member_name}=${member_peer_url_1}&${member_name}=${member_peer_url_2}"
-```
-
-### Checking the status
-
-It checks the expected cluster size and registration status in discovery URL, and decides what the next action is.
-
-```
-curl -X GET http://example.com/v2/keys/_etcd/registry/${UUID}/_config/size
-curl -X GET http://example.com/v2/keys/_etcd/registry/${UUID}
-```
-
-If registered members are still not enough, it will wait for left members to appear.
-
-If the number of registered members is bigger than the expected size N, it treats the first N registered members as the member list for the cluster. If the member itself is in the member list, the discovery procedure succeeds and it fetches all peers through the member list. If it is not in the member list, the discovery procedure finishes with the failure that the cluster has been full.
-
-In etcd implementation, the member may check the cluster status even before registering itself. So it could fail quickly if the cluster has been full.
-
-### Waiting for all members
-
-The wait process is described in detail in the [etcd API documentation][api].
-
-```
-curl -X GET http://example.com/v2/keys/_etcd/registry/${UUID}?wait=true&waitIndex=${current_etcd_index}
-```
-
-It keeps waiting until finding all members.
-
-## Public discovery service
-
-CoreOS Inc. hosts a public discovery service at https://discovery.etcd.io/ , which provides some nice features for ease of use.
-
-### Mask key prefix
-
-Public discovery service will redirect `https://discovery.etcd.io/${UUID}` to etcd cluster behind for the key at `/v2/keys/_etcd/registry`. It masks register key prefix for short and readable discovery url.
-
-### Get new token
-
-```
-GET /new
-
-Sent query:
- size=${cluster_size}
-Possible status codes:
- 200 OK
- 400 Bad Request
-200 Body:
- generated discovery url
-```
-
-The generation process in the service follows the steps from [Creating a New Discovery Token][new-discovery-token] to [Specifying the Expected Cluster Size][expected-cluster-size].
-
-### Check discovery status
-
-```
-GET /${UUID}
-```
-
-The status for this discovery token, including the machines that have been registered, can be checked by requesting the value of the UUID.
-
-### Open-source repository
-
-The repository is located at https://github.com/coreos/discovery.etcd.io. It could be used to build a custom discovery service.
-
-[api]: /docs/v2/api#waiting-for-a-change
-[cluster-size]: /docs/v2/admin_guide#optimal-cluster-size
-[expected-cluster-size]: #specifying-the-expected-cluster-size
-[new-discovery-token]: #creating-a-new-discovery-token
diff --git a/etcd-fix/Documentation/dev-internal/img/modules-future.svg b/etcd-fix/Documentation/dev-internal/img/modules-future.svg
deleted file mode 100644
index 6766c84..0000000
--- a/etcd-fix/Documentation/dev-internal/img/modules-future.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/etcd-fix/Documentation/dev-internal/img/modules.svg b/etcd-fix/Documentation/dev-internal/img/modules.svg
deleted file mode 100644
index 24a711a..0000000
--- a/etcd-fix/Documentation/dev-internal/img/modules.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/etcd-fix/Documentation/dev-internal/logging.md b/etcd-fix/Documentation/dev-internal/logging.md
deleted file mode 100644
index ef0acd3..0000000
--- a/etcd-fix/Documentation/dev-internal/logging.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Logging conventions
----
-
-etcd uses the [capnslog][capnslog] library for logging application output categorized into *levels*. A log message's level is determined according to these conventions:
-
-* Error: Data has been lost, a request has failed for a bad reason, or a required resource has been lost
- * Examples:
- * A failure to allocate disk space for WAL
-
-* Warning: (Hopefully) Temporary conditions that may cause errors, but may work fine. A replica disappearing (that may reconnect) is a warning.
- * Examples:
- * Failure to send raft message to a remote peer
- * Failure to receive heartbeat message within the configured election timeout
-
-* Notice: Normal, but important (uncommon) log information.
- * Examples:
- * Add a new node into the cluster
- * Add a new user into auth subsystem
-
-* Info: Normal, working log information, everything is fine, but helpful notices for auditing or common operations.
- * Examples:
- * Startup configuration
- * Start to do snapshot
-
-* Debug: Everything is still fine, but even common operations may be logged, and less helpful but more quantity of notices.
- * Examples:
- * Send a normal message to a remote peer
- * Write a log entry to disk
-
-[capnslog]: https://github.com/coreos/pkg/tree/master/capnslog
diff --git a/etcd-fix/Documentation/dev-internal/modules.md b/etcd-fix/Documentation/dev-internal/modules.md
deleted file mode 100644
index e65f731..0000000
--- a/etcd-fix/Documentation/dev-internal/modules.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-title: Golang modules
----
-
-The etcd project (since version 3.5) is organized into multiple
-[golang modules](https://golang.org/ref/mod) hosted in a [single repository](https://golang.org/ref/mod#vcs-dir).
-
-![modules graph](img/modules.svg)
-
-There are following modules:
-
- - **go.etcd.io/etcd/api/v3** - contains API definitions
- (like protos & proto-generated libraries) that defines communication protocol
- between etcd clients and server.
-
- - **go.etcd.io/etcd/pkg/v3** - collection of utility packages used by etcd
- without being specific to etcd itself. A package belongs here
- only if it could possibly be moved out into its own repository in the future.
- Please avoid adding here code that has a lot of dependencies on its own, as
- they automatically becoming dependencies of the client library
- (that we want to keep lightweight).
-
- - **go.etcd.io/etcd/client/v3** - client library used to contact etcd over
- the network (grpc). Recommended for all new usage of etcd.
-
- - **go.etcd.io/etcd/client/v2** - legacy client library used to contact etcd
- over HTTP protocol. Deprecated. All new usage should depend on /v3 library.
-
- - **go.etcd.io/etcd/raft/v3** - implementation of distributed consensus
- protocol. Should have no etcd specific code.
-
- - **go.etcd.io/etcd/server/v3** - etcd implementation.
- The code in this package is etcd internal and should not be consumed
- by external projects. The package layout and API can change within the minor versions.
-
- - **go.etcd.io/etcd/etcdctl/v3** - a command line tool to access and manage etcd.
-
- - **go.etcd.io/etcd/tests/v3** - a module that contains all integration tests of etcd.
- Notice: All unit-tests (fast and not requiring cross-module dependencies)
- should be kept in the local modules to the code under the test.
-
- - **go.etcd.io/bbolt** - implementation of persistent b-tree.
- Hosted in a separate repository: https://github.com/etcd-io/bbolt.
-
-
-### Operations
-
-1. All etcd modules should be released in the same versions, e.g.
- `go.etcd.io/etcd/client/v3@v3.5.10` must depend on `go.etcd.io/etcd/api/v3@v3.5.10`.
-
- The consistent updating of versions can by performed using:
- ```shell script
- % DRY_RUN=false TARGET_VERSION="v3.5.10" ./scripts/release_mod.sh update_versions
- ```
-2. The released modules should be tagged according to https://golang.org/ref/mod#vcs-version rules,
- i.e. each module should get its own tag.
- The tagging can be performed using:
- ```shell script
- % DRY_RUN=false REMOTE_REPO="origin" ./scripts/release_mod.sh push_mod_tags
- ```
-
-3. All etcd modules should depend on the same versions of underlying dependencies.
- This can be verified using:
- ```shell script
- % PASSES="dep" ./test.sh
- ```
-
-4. The go.mod files must not contain dependencies not being used and must
- conform to `go mod tidy` format.
- This is being verified by:
- ```
- % PASSES="mod_tidy" ./test.sh
- ```
-
-5. To trigger actions across all modules (e.g. auto-format all files), please
- use/expand the following script:
- ```shell script
- % ./scripts/fix.sh
- ```
-
-### Future
-
-As a North Star, we would like to evaluate etcd modules towards following model:
-
-![modules graph](img/modules-future.svg)
-
-This assumes:
- - Splitting etcdmigrate/etcdadm out of etcdctl binary.
- Thanks to this etcdctl would become clearly a command-line wrapper
- around network client API,
- while etcdmigrate/etcdadm would support direct physical operations on the
- etcd storage files.
- - Splitting etcd-proxy out of ./etcd binary, as it contains more experimental code
- so carries additional risk & dependencies.
- - Deprecation of support for v2 protocol.
\ No newline at end of file
diff --git a/etcd-fix/Documentation/dev-internal/release.md b/etcd-fix/Documentation/dev-internal/release.md
deleted file mode 100644
index deca6ac..0000000
--- a/etcd-fix/Documentation/dev-internal/release.md
+++ /dev/null
@@ -1,161 +0,0 @@
----
-title: etcd release guide
----
-
-The guide talks about how to release a new version of etcd.
-
-The procedure includes some manual steps for sanity checking, but it can probably be further scripted. Please keep this document up-to-date if making changes to the release process.
-
-## Release management
-
-etcd community members are assigned to manage the release each etcd major/minor version as well as manage patches
-and to each stable release branch. The managers are responsible for communicating the timelines and status of each
-release and for ensuring the stability of the release branch.
-
-| Releases | Manager |
-| -------- | ------- |
-| 3.1 patch (post 3.1.0) | Joe Betz [@jpbetz](https://github.com/jpbetz) |
-| 3.2 patch (post 3.2.0) | Joe Betz [@jpbetz](https://github.com/jpbetz) |
-| 3.3 patch (post 3.3.0) | Gyuho Lee [@gyuho](https://github.com/gyuho) |
-
-## Prepare release
-
-Set desired version as environment variable for following steps. Here is an example to release 2.3.0:
-
-```
-export VERSION=v2.3.0
-export PREV_VERSION=v2.2.5
-```
-
-All releases version numbers follow the format of [semantic versioning 2.0.0](http://semver.org/).
-
-### Major, minor version release, or its pre-release
-
-- Ensure the relevant milestone on GitHub is complete. All referenced issues should be closed, or moved elsewhere.
-- Remove this release from [roadmap](https://github.com/etcd-io/etcd/blob/master/ROADMAP.md), if necessary.
-- Ensure the latest upgrade documentation is available.
-- Bump [hardcoded MinClusterVerion in the repository](https://github.com/etcd-io/etcd/blob/master/version/version.go#L29), if necessary.
-- Add feature capability maps for the new version, if necessary.
-
-### Patch version release
-
-- To request a backport, devlopers submit cherrypick PRs targeting the release branch. The commits should not include merge commits. The commits should be restricted to bug fixes and security patches.
-- The cherrypick PRs should target the appropriate release branch (`base:release--`). `hack/patch/cherrypick.sh` may be used to automatically generate cherrypick PRs.
-- The release patch manager reviews the cherrypick PRs. Please discuss carefully what is backported to the patch release. Each patch release should be strictly better than it's predecessor.
-- The release patch manager will cherry-pick these commits starting from the oldest one into stable branch.
-
-## Write release note
-
-- Write introduction for the new release. For example, what major bug we fix, what new features we introduce or what performance improvement we make.
-- Put `[GH XXXX]` at the head of change line to reference Pull Request that introduces the change. Moreover, add a link on it to jump to the Pull Request.
-- Find PRs with `release-note` label and explain them in `NEWS` file, as a straightforward summary of changes for end-users.
-
-## Tag version
-
-- Bump [hardcoded Version in the repository](https://github.com/etcd-io/etcd/blob/master/version/version.go#L30) to the latest version `${VERSION}`.
-- Ensure all tests on CI system are passed.
-- Manually check etcd is buildable in Linux, Darwin and Windows.
-- Manually check upgrade etcd cluster of previous minor version works well.
-- Manually check new features work well.
-- Add a signed tag through `git tag -s ${VERSION}`.
-- Sanity check tag correctness through `git show tags/$VERSION`.
-- Push the tag to GitHub through `git push origin tags/$VERSION`. This assumes `origin` corresponds to "https://github.com/etcd-io/etcd".
-
-## Build release binaries and images
-
-- Ensure `docker` is available.
-
-Run release script in root directory:
-
-```
-TAG=gcr.io/etcd-development/etcd ./scripts/release.sh ${VERSION}
-```
-
-It generates all release binaries and images under directory ./release.
-
-## Sign binaries, images, and source code
-
-etcd project key must be used to sign the generated binaries and images.`$SUBKEYID` is the key ID of etcd project Yubikey. Connect the key and run `gpg2 --card-status` to get the ID.
-
-The following commands are used for public release sign:
-
-```
-cd release
-for i in etcd-*{.zip,.tar.gz}; do gpg2 --default-key $SUBKEYID --armor --output ${i}.asc --detach-sign ${i}; done
-for i in etcd-*{.zip,.tar.gz}; do gpg2 --verify ${i}.asc ${i}; done
-
-# sign zipped source code files
-wget https://github.com/etcd-io/etcd/archive/${VERSION}.zip
-gpg2 --armor --default-key $SUBKEYID --output ${VERSION}.zip.asc --detach-sign ${VERSION}.zip
-gpg2 --verify ${VERSION}.zip.asc ${VERSION}.zip
-
-wget https://github.com/etcd-io/etcd/archive/${VERSION}.tar.gz
-gpg2 --armor --default-key $SUBKEYID --output ${VERSION}.tar.gz.asc --detach-sign ${VERSION}.tar.gz
-gpg2 --verify ${VERSION}.tar.gz.asc ${VERSION}.tar.gz
-```
-
-The public key for GPG signing can be found at [CoreOS Application Signing Key](https://coreos.com/security/app-signing-key)
-
-
-## Publish release page in GitHub
-
-- Set release title as the version name.
-- Follow the format of previous release pages.
-- Attach the generated binaries and signatures.
-- Select whether it is a pre-release.
-- Publish the release!
-
-## Publish docker image in gcr.io
-
-- Push docker image:
-
-```
-gcloud docker -- login -u _json_key -p "$(cat /etc/gcp-key-etcd.json)" https://gcr.io
-
-for TARGET_ARCH in "-arm64" "-ppc64le" ""; do
- gcloud docker -- push gcr.io/etcd-development/etcd:${VERSION}${TARGET_ARCH}
-done
-```
-
-- Add `latest` tag to the new image on [gcr.io](https://console.cloud.google.com/gcr/images/etcd-development/GLOBAL/etcd?project=etcd-development&authuser=1) if this is a stable release.
-
-## Publish docker image in Quay.io
-
-- Build docker images with quay.io:
-
-```
-for TARGET_ARCH in "amd64" "arm64" "ppc64le"; do
- TAG=quay.io/coreos/etcd GOARCH=${TARGET_ARCH} \
- BINARYDIR=release/etcd-${VERSION}-linux-${TARGET_ARCH} \
- BUILDDIR=release \
- ./scripts/build-docker ${VERSION}
-done
-```
-
-- Push docker image:
-
-```
-docker login quay.io
-
-for TARGET_ARCH in "-arm64" "-ppc64le" ""; do
- docker push quay.io/coreos/etcd:${VERSION}${TARGET_ARCH}
-done
-```
-
-- Add `latest` tag to the new image on [quay.io](https://quay.io/repository/coreos/etcd?tag=latest&tab=tags) if this is a stable release.
-
-## Announce to the etcd-dev Googlegroup
-
-- Follow the format of [previous release emails](https://groups.google.com/forum/#!forum/etcd-dev).
-- Make sure to include a list of authors that contributed since the previous release - something like the following might be handy:
-
-```
-git log ...${PREV_VERSION} --pretty=format:"%an" | sort | uniq | tr '\n' ',' | sed -e 's#,#, #g' -e 's#, $##'
-```
-
-- Send email to etcd-dev@googlegroups.com
-
-## Post release
-
-- Create new stable branch through `git push origin ${VERSION_MAJOR}.${VERSION_MINOR}` if this is a major stable release. This assumes `origin` corresponds to "https://github.com/etcd-io/etcd".
-- Bump [hardcoded Version in the repository](https://github.com/etcd-io/etcd/blob/master/version/version.go#L30) to the version `${VERSION}+git`.
diff --git a/etcd-fix/Documentation/dl-build.md b/etcd-fix/Documentation/dl-build.md
deleted file mode 100644
index 698af26..0000000
--- a/etcd-fix/Documentation/dl-build.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: Download and build
----
-
-## System requirements
-
-The etcd performance benchmarks run etcd on 8 vCPU, 16GB RAM, 50GB SSD GCE instances, but any relatively modern machine with low latency storage and a few gigabytes of memory should suffice for most use cases. Applications with large v2 data stores will require more memory than a large v3 data store since data is kept in anonymous memory instead of memory mapped from a file. For running etcd on a cloud provider, see the [Example hardware configuration][example-hardware-configurations] documentation.
-
-## Download the pre-built binary
-
-The easiest way to get etcd is to use one of the pre-built release binaries which are available for OSX, Linux, Windows, appc, and Docker. Instructions for using these binaries are on the [GitHub releases page][github-release].
-
-## Build the latest version
-
-For those wanting to try the very latest version, build etcd from the `master` branch. [Go](https://golang.org/) version 1.13+ is required to build the latest version of etcd. To ensure etcd is built against well-tested libraries, etcd vendors its dependencies for official release binaries. However, etcd's vendoring is also optional to avoid potential import conflicts when embedding the etcd server or using the etcd client.
-
-To build `etcd` from the `master` branch without a `GOPATH` using the official `build` script:
-
-```sh
-$ git clone https://github.com/etcd-io/etcd.git
-$ cd etcd
-$ ./build
-```
-
-To build a modularized `etcd` from the `master` branch via `go get`:
-
-```sh
-# GOPATH should be set
-$ echo $GOPATH
-/Users/example/go
-$ go get -v go.etcd.io/etcd/v3
-$ go get -v go.etcd.io/etcd/v3/etcdctl
-```
-
-## Test the installation
-
-Check the etcd binary is built correctly by starting etcd and setting a key.
-
-### Starting etcd
-
-If etcd is built without using `go get`, run the following:
-
-```sh
-$ ./bin/etcd
-```
-If etcd is built using `go get`, run the following:
-
-```sh
-$ $GOPATH/bin/etcd
-```
-
-### Setting a key
-
-Run the following:
-
-```sh
-$ ./bin/etcdctl put foo bar
-OK
-```
-
-(or `$GOPATH/bin/etcdctl put foo bar` if etcdctl was installed with `go get`)
-
-If OK is printed, then etcd is working!
-
-[github-release]: https://github.com/etcd-io/etcd/releases/
-[go]: https://golang.org/doc/install
-[build-script]: ../build
-[cmd-directory]: ../cmd
-[example-hardware-configurations]: op-guide/hardware.md#example-hardware-configurations
diff --git a/etcd-fix/Documentation/etcd-mixin/README.md b/etcd-fix/Documentation/etcd-mixin/README.md
deleted file mode 100644
index 224066f..0000000
--- a/etcd-fix/Documentation/etcd-mixin/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Prometheus Monitoring Mixin for etcd
-
-> NOTE: This project is *alpha* stage. Flags, configuration, behaviour and design may change significantly in following releases.
-
-A set of customisable Prometheus alerts for etcd.
-
-Instructions for use are the same as the [kubernetes-mixin](https://github.com/kubernetes-monitoring/kubernetes-mixin).
-
-## Background
-
-* For more information about monitoring mixins, see this [design doc](https://docs.google.com/document/d/1A9xvzwqnFVSOZ5fD3blKODXfsat5fg6ZhnKu9LK3lB4/edit#).
-
-## Testing alerts
-
-Make sure to have [jsonnet](https://jsonnet.org/) and [gojsontoyaml](https://github.com/brancz/gojsontoyaml) installed.
-
-First compile the mixin to a YAML file, which the promtool will read:
-```
-jsonnet -e '(import "mixin.libsonnet").prometheusAlerts' | gojsontoyaml > mixin.yaml
-```
-
-Then run the unit test:
-```
-promtool test rules test.yaml
-```
diff --git a/etcd-fix/Documentation/etcd-mixin/mixin.libsonnet b/etcd-fix/Documentation/etcd-mixin/mixin.libsonnet
deleted file mode 100644
index a38b795..0000000
--- a/etcd-fix/Documentation/etcd-mixin/mixin.libsonnet
+++ /dev/null
@@ -1,1356 +0,0 @@
-{
- _config+:: {
- etcd_selector: 'job=~".*etcd.*"',
- // etcd_instance_labels are the label names that are uniquely
- // identifying an instance and need to be aggreated away for alerts
- // that are about an etcd cluster as a whole. For example, if etcd
- // instances are deployed on K8s, you will likely want to change
- // this to 'instance, pod'.
- etcd_instance_labels: 'instance',
- // scrape_interval_seconds is the global scrape interval which can be
- // used to dynamically adjust rate windows as a function of the interval.
- scrape_interval_seconds: 30,
- },
-
- prometheusAlerts+:: {
- groups+: [
- {
- name: 'etcd',
- rules: [
- {
- alert: 'etcdMembersDown',
- expr: |||
- max without (endpoint) (
- sum without (%(etcd_instance_labels)s) (up{%(etcd_selector)s} == bool 0)
- or
- count without (To) (
- sum without (%(etcd_instance_labels)s) (rate(etcd_network_peer_sent_failures_total{%(etcd_selector)s}[%(network_failure_range)ss])) > 0.01
- )
- )
- > 0
- ||| % {etcd_instance_labels: $._config.etcd_instance_labels, etcd_selector: $._config.etcd_selector, network_failure_range: $._config.scrape_interval_seconds*4},
- 'for': '10m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": members are down ({{ $value }}).',
- summary: 'etcd cluster members are down.',
- },
- },
- {
- alert: 'etcdInsufficientMembers',
- expr: |||
- sum(up{%(etcd_selector)s} == bool 1) without (%(etcd_instance_labels)s) < ((count(up{%(etcd_selector)s}) without (%(etcd_instance_labels)s) + 1) / 2)
- ||| % $._config,
- 'for': '3m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": insufficient members ({{ $value }}).',
- summary: 'etcd cluster has insufficient number of members.',
- },
- },
- {
- alert: 'etcdNoLeader',
- expr: |||
- etcd_server_has_leader{%(etcd_selector)s} == 0
- ||| % $._config,
- 'for': '1m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": member {{ $labels.instance }} has no leader.',
- summary: 'etcd cluster has no leader.',
- },
- },
- {
- alert: 'etcdHighNumberOfLeaderChanges',
- expr: |||
- increase((max without (%(etcd_instance_labels)s) (etcd_server_leader_changes_seen_total{%(etcd_selector)s}) or 0*absent(etcd_server_leader_changes_seen_total{%(etcd_selector)s}))[15m:1m]) >= 4
- ||| % $._config,
- 'for': '5m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": {{ $value }} leader changes within the last 15 minutes. Frequent elections may be a sign of insufficient resources, high network latency, or disruptions by other components and should be investigated.',
- summary: 'etcd cluster has high number of leader changes.',
- },
- },
- {
- alert: 'etcdHighNumberOfFailedGRPCRequests',
- expr: |||
- 100 * sum(rate(grpc_server_handled_total{%(etcd_selector)s, grpc_code!="OK"}[5m])) without (grpc_type, grpc_code)
- /
- sum(rate(grpc_server_handled_total{%(etcd_selector)s}[5m])) without (grpc_type, grpc_code)
- > 1
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": {{ $value }}% of requests for {{ $labels.grpc_method }} failed on etcd instance {{ $labels.instance }}.',
- summary: 'etcd cluster has high number of failed grpc requests.',
- },
- },
- {
- alert: 'etcdHighNumberOfFailedGRPCRequests',
- expr: |||
- 100 * sum(rate(grpc_server_handled_total{%(etcd_selector)s, grpc_code!="OK"}[5m])) without (grpc_type, grpc_code)
- /
- sum(rate(grpc_server_handled_total{%(etcd_selector)s}[5m])) without (grpc_type, grpc_code)
- > 5
- ||| % $._config,
- 'for': '5m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": {{ $value }}% of requests for {{ $labels.grpc_method }} failed on etcd instance {{ $labels.instance }}.',
- summary: 'etcd cluster has high number of failed grpc requests.',
- },
- },
- {
- alert: 'etcdGRPCRequestsSlow',
- expr: |||
- histogram_quantile(0.99, sum(rate(grpc_server_handling_seconds_bucket{%(etcd_selector)s, grpc_type="unary"}[5m])) without(grpc_type))
- > 0.15
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": gRPC requests to {{ $labels.grpc_method }} are taking {{ $value }}s on etcd instance {{ $labels.instance }}.',
- summary: 'etcd grpc requests are slow',
- },
- },
- {
- alert: 'etcdMemberCommunicationSlow',
- expr: |||
- histogram_quantile(0.99, rate(etcd_network_peer_round_trip_time_seconds_bucket{%(etcd_selector)s}[5m]))
- > 0.15
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": member communication with {{ $labels.To }} is taking {{ $value }}s on etcd instance {{ $labels.instance }}.',
- summary: 'etcd cluster member communication is slow.',
- },
- },
- {
- alert: 'etcdHighNumberOfFailedProposals',
- expr: |||
- rate(etcd_server_proposals_failed_total{%(etcd_selector)s}[15m]) > 5
- ||| % $._config,
- 'for': '15m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": {{ $value }} proposal failures within the last 30 minutes on etcd instance {{ $labels.instance }}.',
- summary: 'etcd cluster has high number of proposal failures.',
- },
- },
- {
- alert: 'etcdHighFsyncDurations',
- expr: |||
- histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket{%(etcd_selector)s}[5m]))
- > 0.5
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": 99th percentile fsync durations are {{ $value }}s on etcd instance {{ $labels.instance }}.',
- summary: 'etcd cluster 99th percentile fsync durations are too high.',
- },
- },
- {
- alert: 'etcdHighFsyncDurations',
- expr: |||
- histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket{%(etcd_selector)s}[5m]))
- > 1
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- message: 'etcd cluster "{{ $labels.job }}": 99th percentile fsync durations are {{ $value }}s on etcd instance {{ $labels.instance }}.',
- },
- },
- {
- alert: 'etcdHighCommitDurations',
- expr: |||
- histogram_quantile(0.99, rate(etcd_disk_backend_commit_duration_seconds_bucket{%(etcd_selector)s}[5m]))
- > 0.25
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: 'etcd cluster "{{ $labels.job }}": 99th percentile commit durations {{ $value }}s on etcd instance {{ $labels.instance }}.',
- summary: 'etcd cluster 99th percentile commit durations are too high.',
- },
- },
- {
- alert: 'etcdHighNumberOfFailedHTTPRequests',
- expr: |||
- sum(rate(etcd_http_failed_total{%(etcd_selector)s, code!="404"}[5m])) without (code) / sum(rate(etcd_http_received_total{%(etcd_selector)s}[5m]))
- without (code) > 0.01
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: '{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}',
- summary: 'etcd has high number of failed HTTP requests.',
- },
- },
- {
- alert: 'etcdHighNumberOfFailedHTTPRequests',
- expr: |||
- sum(rate(etcd_http_failed_total{%(etcd_selector)s, code!="404"}[5m])) without (code) / sum(rate(etcd_http_received_total{%(etcd_selector)s}[5m]))
- without (code) > 0.05
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- description: '{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}.',
- summary: 'etcd has high number of failed HTTP requests.',
- },
- },
- {
- alert: 'etcdHTTPRequestsSlow',
- expr: |||
- histogram_quantile(0.99, rate(etcd_http_successful_duration_seconds_bucket[5m]))
- > 0.15
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- description: 'etcd instance {{ $labels.instance }} HTTP requests to {{ $labels.method }} are slow.',
- summary: 'etcd instance HTTP requests are slow.',
- },
- },
- {
- alert: 'etcdBackendQuotaLowSpace',
- expr: |||
- (etcd_mvcc_db_total_size_in_bytes/etcd_server_quota_backend_bytes)*100 > 95
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'critical',
- },
- annotations: {
- message: 'etcd cluster "{{ $labels.job }}": database size exceeds the defined quota on etcd instance {{ $labels.instance }}, please defrag or increase the quota as the writes to etcd will be disabled when it is full.',
- },
- },
- {
- alert: 'etcdExcessiveDatabaseGrowth',
- expr: |||
- increase(((etcd_mvcc_db_total_size_in_bytes/etcd_server_quota_backend_bytes)*100)[240m:1m]) > 50
- ||| % $._config,
- 'for': '10m',
- labels: {
- severity: 'warning',
- },
- annotations: {
- message: 'etcd cluster "{{ $labels.job }}": Observed surge in etcd writes leading to 50% increase in database size over the past four hours on etcd instance {{ $labels.instance }}, please check as it might be disruptive.',
- },
- },
- ],
- },
- ],
- },
-
- grafanaDashboards+:: {
- 'etcd.json': {
- uid: std.md5('etcd.json'),
- title: 'etcd',
- description: 'etcd sample Grafana dashboard with Prometheus',
- tags: [],
- style: 'dark',
- timezone: 'browser',
- editable: true,
- hideControls: false,
- sharedCrosshair: false,
- rows: [
- {
- collapse: false,
- editable: true,
- height: '250px',
- panels: [
- {
- cacheTimeout: null,
- colorBackground: false,
- colorValue: false,
- colors: [
- 'rgba(245, 54, 54, 0.9)',
- 'rgba(237, 129, 40, 0.89)',
- 'rgba(50, 172, 45, 0.97)',
- ],
- datasource: '$datasource',
- editable: true,
- 'error': false,
- format: 'none',
- gauge: {
- maxValue: 100,
- minValue: 0,
- show: false,
- thresholdLabels: false,
- thresholdMarkers: true,
- },
- id: 28,
- interval: null,
- isNew: true,
- links: [],
- mappingType: 1,
- mappingTypes: [
- {
- name: 'value to text',
- value: 1,
- },
- {
- name: 'range to text',
- value: 2,
- },
- ],
- maxDataPoints: 100,
- nullPointMode: 'connected',
- nullText: null,
- postfix: '',
- postfixFontSize: '50%',
- prefix: '',
- prefixFontSize: '50%',
- rangeMaps: [{
- from: 'null',
- text: 'N/A',
- to: 'null',
- }],
- span: 3,
- sparkline: {
- fillColor: 'rgba(31, 118, 189, 0.18)',
- full: false,
- lineColor: 'rgb(31, 120, 193)',
- show: false,
- },
- targets: [{
- expr: 'sum(etcd_server_has_leader{job="$cluster"})',
- intervalFactor: 2,
- legendFormat: '',
- metric: 'etcd_server_has_leader',
- refId: 'A',
- step: 20,
- }],
- thresholds: '',
- title: 'Up',
- type: 'singlestat',
- valueFontSize: '200%',
- valueMaps: [{
- op: '=',
- text: 'N/A',
- value: 'null',
- }],
- valueName: 'avg',
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 0,
- id: 23,
- isNew: true,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 5,
- stack: false,
- steppedLine: false,
- targets: [
- {
- expr: 'sum(rate(grpc_server_started_total{job="$cluster",grpc_type="unary"}[5m]))',
- format: 'time_series',
- intervalFactor: 2,
- legendFormat: 'RPC Rate',
- metric: 'grpc_server_started_total',
- refId: 'A',
- step: 2,
- },
- {
- expr: 'sum(rate(grpc_server_handled_total{job="$cluster",grpc_type="unary",grpc_code!="OK"}[5m]))',
- format: 'time_series',
- intervalFactor: 2,
- legendFormat: 'RPC Failed Rate',
- metric: 'grpc_server_handled_total',
- refId: 'B',
- step: 2,
- },
- ],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'RPC Rate',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'ops',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 0,
- id: 41,
- isNew: true,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 4,
- stack: true,
- steppedLine: false,
- targets: [
- {
- expr: 'sum(grpc_server_started_total{job="$cluster",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}) - sum(grpc_server_handled_total{job="$cluster",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"})',
- intervalFactor: 2,
- legendFormat: 'Watch Streams',
- metric: 'grpc_server_handled_total',
- refId: 'A',
- step: 4,
- },
- {
- expr: 'sum(grpc_server_started_total{job="$cluster",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}) - sum(grpc_server_handled_total{job="$cluster",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"})',
- intervalFactor: 2,
- legendFormat: 'Lease Streams',
- metric: 'grpc_server_handled_total',
- refId: 'B',
- step: 4,
- },
- ],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Active Streams',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'short',
- label: '',
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- ],
- showTitle: false,
- title: 'Row',
- },
- {
- collapse: false,
- editable: true,
- height: '250px',
- panels: [
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- decimals: null,
- editable: true,
- 'error': false,
- fill: 0,
- grid: {},
- id: 1,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 4,
- stack: false,
- steppedLine: false,
- targets: [{
- expr: 'etcd_mvcc_db_total_size_in_bytes{job="$cluster"}',
- hide: false,
- interval: '',
- intervalFactor: 2,
- legendFormat: '{{instance}} DB Size',
- metric: '',
- refId: 'A',
- step: 4,
- }],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'DB Size',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'cumulative',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'bytes',
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- logBase: 1,
- max: null,
- min: null,
- show: false,
- },
- ],
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 0,
- grid: {},
- id: 3,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 1,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 4,
- stack: false,
- steppedLine: true,
- targets: [
- {
- expr: 'histogram_quantile(0.99, sum(rate(etcd_disk_wal_fsync_duration_seconds_bucket{job="$cluster"}[5m])) by (instance, le))',
- hide: false,
- intervalFactor: 2,
- legendFormat: '{{instance}} WAL fsync',
- metric: 'etcd_disk_wal_fsync_duration_seconds_bucket',
- refId: 'A',
- step: 4,
- },
- {
- expr: 'histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket{job="$cluster"}[5m])) by (instance, le))',
- intervalFactor: 2,
- legendFormat: '{{instance}} DB fsync',
- metric: 'etcd_disk_backend_commit_duration_seconds_bucket',
- refId: 'B',
- step: 4,
- },
- ],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Disk Sync Duration',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'cumulative',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 's',
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- logBase: 1,
- max: null,
- min: null,
- show: false,
- },
- ],
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 0,
- id: 29,
- isNew: true,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 4,
- stack: false,
- steppedLine: false,
- targets: [{
- expr: 'process_resident_memory_bytes{job="$cluster"}',
- intervalFactor: 2,
- legendFormat: '{{instance}} Resident Memory',
- metric: 'process_resident_memory_bytes',
- refId: 'A',
- step: 4,
- }],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Memory',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'bytes',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- ],
- title: 'New row',
- },
- {
- collapse: false,
- editable: true,
- height: '250px',
- panels: [
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 5,
- id: 22,
- isNew: true,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 3,
- stack: true,
- steppedLine: false,
- targets: [{
- expr: 'rate(etcd_network_client_grpc_received_bytes_total{job="$cluster"}[5m])',
- intervalFactor: 2,
- legendFormat: '{{instance}} Client Traffic In',
- metric: 'etcd_network_client_grpc_received_bytes_total',
- refId: 'A',
- step: 4,
- }],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Client Traffic In',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'Bps',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 5,
- id: 21,
- isNew: true,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 3,
- stack: true,
- steppedLine: false,
- targets: [{
- expr: 'rate(etcd_network_client_grpc_sent_bytes_total{job="$cluster"}[5m])',
- intervalFactor: 2,
- legendFormat: '{{instance}} Client Traffic Out',
- metric: 'etcd_network_client_grpc_sent_bytes_total',
- refId: 'A',
- step: 4,
- }],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Client Traffic Out',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'Bps',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 0,
- id: 20,
- isNew: true,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 3,
- stack: false,
- steppedLine: false,
- targets: [{
- expr: 'sum(rate(etcd_network_peer_received_bytes_total{job="$cluster"}[5m])) by (instance)',
- intervalFactor: 2,
- legendFormat: '{{instance}} Peer Traffic In',
- metric: 'etcd_network_peer_received_bytes_total',
- refId: 'A',
- step: 4,
- }],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Peer Traffic In',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'Bps',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- decimals: null,
- editable: true,
- 'error': false,
- fill: 0,
- grid: {},
- id: 16,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 3,
- stack: false,
- steppedLine: false,
- targets: [{
- expr: 'sum(rate(etcd_network_peer_sent_bytes_total{job="$cluster"}[5m])) by (instance)',
- hide: false,
- interval: '',
- intervalFactor: 2,
- legendFormat: '{{instance}} Peer Traffic Out',
- metric: 'etcd_network_peer_sent_bytes_total',
- refId: 'A',
- step: 4,
- }],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Peer Traffic Out',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'cumulative',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'Bps',
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- ],
- title: 'New row',
- },
- {
- collapse: false,
- editable: true,
- height: '250px',
- panels: [
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- editable: true,
- 'error': false,
- fill: 0,
- id: 40,
- isNew: true,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 6,
- stack: false,
- steppedLine: false,
- targets: [
- {
- expr: 'sum(rate(etcd_server_proposals_failed_total{job="$cluster"}[5m]))',
- intervalFactor: 2,
- legendFormat: 'Proposal Failure Rate',
- metric: 'etcd_server_proposals_failed_total',
- refId: 'A',
- step: 2,
- },
- {
- expr: 'sum(etcd_server_proposals_pending{job="$cluster"})',
- intervalFactor: 2,
- legendFormat: 'Proposal Pending Total',
- metric: 'etcd_server_proposals_pending',
- refId: 'B',
- step: 2,
- },
- {
- expr: 'sum(rate(etcd_server_proposals_committed_total{job="$cluster"}[5m]))',
- intervalFactor: 2,
- legendFormat: 'Proposal Commit Rate',
- metric: 'etcd_server_proposals_committed_total',
- refId: 'C',
- step: 2,
- },
- {
- expr: 'sum(rate(etcd_server_proposals_applied_total{job="$cluster"}[5m]))',
- intervalFactor: 2,
- legendFormat: 'Proposal Apply Rate',
- refId: 'D',
- step: 2,
- },
- ],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Raft Proposals',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'short',
- label: '',
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- {
- aliasColors: {},
- bars: false,
- datasource: '$datasource',
- decimals: 0,
- editable: true,
- 'error': false,
- fill: 0,
- id: 19,
- isNew: true,
- legend: {
- alignAsTable: false,
- avg: false,
- current: false,
- max: false,
- min: false,
- rightSide: false,
- show: false,
- total: false,
- values: false,
- },
- lines: true,
- linewidth: 2,
- links: [],
- nullPointMode: 'connected',
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 6,
- stack: false,
- steppedLine: false,
- targets: [{
- expr: 'changes(etcd_server_leader_changes_seen_total{job="$cluster"}[1d])',
- intervalFactor: 2,
- legendFormat: '{{instance}} Total Leader Elections Per Day',
- metric: 'etcd_server_leader_changes_seen_total',
- refId: 'A',
- step: 2,
- }],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Total Leader Elections Per Day',
- tooltip: {
- msResolution: false,
- shared: true,
- sort: 0,
- value_type: 'individual',
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: [],
- },
- yaxes: [
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true,
- },
- ],
- },
- ],
- title: 'New row',
- },
- ],
- time: {
- from: 'now-15m',
- to: 'now',
- },
- timepicker: {
- now: true,
- refresh_intervals: [
- '5s',
- '10s',
- '30s',
- '1m',
- '5m',
- '15m',
- '30m',
- '1h',
- '2h',
- '1d',
- ],
- time_options: [
- '5m',
- '15m',
- '1h',
- '6h',
- '12h',
- '24h',
- '2d',
- '7d',
- '30d',
- ],
- },
- templating: {
- list: [
- {
- current: {
- text: 'Prometheus',
- value: 'Prometheus',
- },
- hide: 0,
- label: null,
- name: 'datasource',
- options: [],
- query: 'prometheus',
- refresh: 1,
- regex: '',
- type: 'datasource',
- },
- {
- allValue: null,
- current: {
- text: 'prod',
- value: 'prod',
- },
- datasource: '$datasource',
- hide: 0,
- includeAll: false,
- label: 'cluster',
- multi: false,
- name: 'cluster',
- options: [],
- query: 'label_values(etcd_server_has_leader, job)',
- refresh: 1,
- regex: '',
- sort: 2,
- tagValuesQuery: '',
- tags: [],
- tagsQuery: '',
- type: 'query',
- useTags: false,
- },
- ],
- },
- annotations: {
- list: [],
- },
- refresh: '10s',
- schemaVersion: 13,
- version: 215,
- links: [],
- gnetId: null,
- },
- },
-}
diff --git a/etcd-fix/Documentation/etcd-mixin/test.yaml b/etcd-fix/Documentation/etcd-mixin/test.yaml
deleted file mode 100644
index 24162bd..0000000
--- a/etcd-fix/Documentation/etcd-mixin/test.yaml
+++ /dev/null
@@ -1,135 +0,0 @@
-rule_files:
- - mixin.yaml
-
-evaluation_interval: 1m
-
-tests:
- - interval: 1m
- input_series:
- - series: 'up{job="etcd",instance="10.10.10.0"}'
- values: '1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0'
- - series: 'up{job="etcd",instance="10.10.10.1"}'
- values: '1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0'
- - series: 'up{job="etcd",instance="10.10.10.2"}'
- values: '1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0'
- alert_rule_test:
- - eval_time: 3m
- alertname: etcdInsufficientMembers
- - eval_time: 5m
- alertname: etcdInsufficientMembers
- - eval_time: 12m
- alertname: etcdMembersDown
- - eval_time: 14m
- alertname: etcdMembersDown
- exp_alerts:
- - exp_labels:
- job: etcd
- severity: critical
- exp_annotations:
- description: 'etcd cluster "etcd": members are down (3).'
- summary: 'etcd cluster members are down.'
- - eval_time: 7m
- alertname: etcdInsufficientMembers
- - eval_time: 11m
- alertname: etcdInsufficientMembers
- exp_alerts:
- - exp_labels:
- job: etcd
- severity: critical
- exp_annotations:
- description: 'etcd cluster "etcd": insufficient members (1).'
- summary: 'etcd cluster has insufficient number of members.'
- - eval_time: 15m
- alertname: etcdInsufficientMembers
- exp_alerts:
- - exp_labels:
- job: etcd
- severity: critical
- exp_annotations:
- description: 'etcd cluster "etcd": insufficient members (0).'
- summary: 'etcd cluster has insufficient number of members.'
-
- - interval: 1m
- input_series:
- - series: 'up{job="etcd",instance="10.10.10.0"}'
- values: '1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0'
- - series: 'up{job="etcd",instance="10.10.10.1"}'
- values: '1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0'
- - series: 'up{job="etcd",instance="10.10.10.2"}'
- values: '1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0'
- alert_rule_test:
- - eval_time: 14m
- alertname: etcdMembersDown
- exp_alerts:
- - exp_labels:
- job: etcd
- severity: critical
- exp_annotations:
- description: 'etcd cluster "etcd": members are down (3).'
- summary: 'etcd cluster members are down.'
-
- - interval: 1m
- input_series:
- - series: 'up{job="etcd",instance="10.10.10.0"}'
- values: '1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0'
- - series: 'up{job="etcd",instance="10.10.10.1"}'
- values: '1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0'
- - series: 'etcd_network_peer_sent_failures_total{To="member-1",job="etcd",endpoint="test"}'
- values: '0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18'
- alert_rule_test:
- - eval_time: 13m
- alertname: etcdMembersDown
- exp_alerts:
- - exp_labels:
- job: etcd
- severity: critical
- exp_annotations:
- description: 'etcd cluster "etcd": members are down (1).'
- summary: 'etcd cluster members are down.'
- - interval: 1m
- input_series:
- - series: 'etcd_server_leader_changes_seen_total{job="etcd",instance="10.10.10.0"}'
- values: '0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0'
- - series: 'etcd_server_leader_changes_seen_total{job="etcd",instance="10.10.10.1"}'
- values: '0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0'
- - series: 'etcd_server_leader_changes_seen_total{job="etcd",instance="10.10.10.2"}'
- values: '0 0 0 0 0 0 0 0'
- alert_rule_test:
- - eval_time: 10m
- alertname: etcdHighNumberOfLeaderChanges
- exp_alerts:
- - exp_labels:
- job: etcd
- severity: warning
- exp_annotations:
- description: 'etcd cluster "etcd": 4 leader changes within the last 15 minutes. Frequent elections may be a sign of insufficient resources, high network latency, or disruptions by other components and should be investigated.'
- summary: 'etcd cluster has high number of leader changes.'
- - interval: 1m
- input_series:
- - series: 'etcd_server_leader_changes_seen_total{job="etcd",instance="10.10.10.0"}'
- values: '0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0'
- - series: 'etcd_server_leader_changes_seen_total{job="etcd",instance="10.10.10.1"}'
- values: '0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0'
- - series: 'etcd_server_leader_changes_seen_total{job="etcd",instance="10.10.10.2"}'
- values: '0 0 0 0 0 0 0 0'
- alert_rule_test:
- - eval_time: 10m
- alertname: etcdHighNumberOfLeaderChanges
- exp_alerts:
- - interval: 1m
- input_series:
- - series: '((etcd_mvcc_db_total_size_in_bytes/etcd_server_quota_backend_bytes)*100){job="etcd",instance="10.10.10.0"}'
- values: '0 10 20 0 0 10 0 0 30 0 0 0 0 0 0 0'
- - series: '((etcd_mvcc_db_total_size_in_bytes/etcd_server_quota_backend_bytes)*100){job="etcd",instance="10.10.10.1"}'
- values: '0 0 10 0 20 0 0 0 0 0 0 0 0 0 0 0'
- - series: '((etcd_mvcc_db_total_size_in_bytes/etcd_server_quota_backend_bytes)*100){job="etcd",instance="10.10.10.2"}'
- values: '0 0 0 0 0 0 0 0'
- alert_rule_test:
- - eval_time: 10m
- alertname: etcdExcessiveDatabaseGrowth
- exp_alerts:
- - exp_labels:
- job: etcd
- severity: warning
- exp_annotations:
- message: 'etcd cluster "etcd": Observed surge in etcd writes leading to 50% increase in database size over the past four hours, please check as it might be disruptive.'
diff --git a/etcd-fix/Documentation/faq.md b/etcd-fix/Documentation/faq.md
deleted file mode 100644
index ddbeadb..0000000
--- a/etcd-fix/Documentation/faq.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-title: Frequently Asked Questions (FAQ)
----
-
-## etcd, general
-
-### Do clients have to send requests to the etcd leader?
-
-[Raft][raft] is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.
-
-## Configuration
-
-### What is the difference between listen--urls, advertise-client-urls or initial-advertise-peer-urls?
-
-`listen-client-urls` and `listen-peer-urls` specify the local addresses etcd server binds to for accepting incoming connections. To listen on a port for all interfaces, specify `0.0.0.0` as the listen IP address.
-
-`advertise-client-urls` and `initial-advertise-peer-urls` specify the addresses etcd clients or other etcd members should use to contact the etcd server. The advertise addresses must be reachable from the remote machines. Do not advertise addresses like `localhost` or `0.0.0.0` for a production setup since these addresses are unreachable from remote machines.
-
-### Why doesn't changing `--listen-peer-urls` or `--initial-advertise-peer-urls` update the advertised peer URLs in `etcdctl member list`?
-
-A member's advertised peer URLs come from `--initial-advertise-peer-urls` on initial cluster boot. Changing the listen peer URLs or the initial advertise peers after booting the member won't affect the exported advertise peer URLs since changes must go through quorum to avoid membership configuration split brain. Use `etcdctl member update` to update a member's peer URLs.
-
-## Deployment
-
-### System requirements
-
-Since etcd writes data to disk, its performance strongly depends on disk performance. For this reason, SSD is highly recommended. To assess whether a disk is fast enough for etcd, one possibility is using a disk benchmarking tool such as [fio][fio]. For an example on how to do that, read [here][fio-blog-post]. To prevent performance degradation or unintentionally overloading the key-value store, etcd enforces a configurable storage size quota set to 2GB by default. To avoid swapping or running out of memory, the machine should have at least as much RAM to cover the quota. 8GB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it. At CoreOS, an etcd cluster is usually deployed on dedicated CoreOS Container Linux machines with dual-core processors, 2GB of RAM, and 80GB of SSD *at the very least*. **Note that performance is intrinsically workload dependent; please test before production deployment**. See [hardware][hardware-setup] for more recommendations.
-
-Most stable production environment is Linux operating system with amd64 architecture; see [supported platform][supported-platform] for more.
-
-### Why an odd number of cluster members?
-
-An etcd cluster needs a majority of nodes, a quorum, to agree on updates to the cluster state. For a cluster with n members, quorum is (n/2)+1. For any odd-sized cluster, adding one node will always increase the number of nodes necessary for quorum. Although adding a node to an odd-sized cluster appears better since there are more machines, the fault tolerance is worse since exactly the same number of nodes may fail without losing quorum but there are more nodes that can fail. If the cluster is in a state where it can't tolerate any more failures, adding a node before removing nodes is dangerous because if the new node fails to register with the cluster (e.g., the address is misconfigured), quorum will be permanently lost.
-
-### What is maximum cluster size?
-
-Theoretically, there is no hard limit. However, an etcd cluster probably should have no more than seven nodes. [Google Chubby lock service][chubby], similar to etcd and widely deployed within Google for many years, suggests running five nodes. A 5-member etcd cluster can tolerate two member failures, which is enough in most cases. Although larger clusters provide better fault tolerance, the write performance suffers because data must be replicated across more machines.
-
-### What is failure tolerance?
-
-An etcd cluster operates so long as a member quorum can be established. If quorum is lost through transient network failures (e.g., partitions), etcd automatically and safely resumes once the network recovers and restores quorum; Raft enforces cluster consistency. For power loss, etcd persists the Raft log to disk; etcd replays the log to the point of failure and resumes cluster participation. For permanent hardware failure, the node may be removed from the cluster through [runtime reconfiguration][runtime reconfiguration].
-
-It is recommended to have an odd number of members in a cluster. An odd-size cluster tolerates the same number of failures as an even-size cluster but with fewer nodes. The difference can be seen by comparing even and odd sized clusters:
-
-| Cluster Size | Majority | Failure Tolerance |
-|:-:|:-:|:-:|
-| 1 | 1 | 0 |
-| 2 | 2 | 0 |
-| 3 | 2 | 1 |
-| 4 | 3 | 1 |
-| 5 | 3 | 2 |
-| 6 | 4 | 2 |
-| 7 | 4 | 3 |
-| 8 | 5 | 3 |
-| 9 | 5 | 4 |
-
-Adding a member to bring the size of cluster up to an even number doesn't buy additional fault tolerance. Likewise, during a network partition, an odd number of members guarantees that there will always be a majority partition that can continue to operate and be the source of truth when the partition ends.
-
-### Does etcd work in cross-region or cross data center deployments?
-
-Deploying etcd across regions improves etcd's fault tolerance since members are in separate failure domains. The cost is higher consensus request latency from crossing data center boundaries. Since etcd relies on a member quorum for consensus, the latency from crossing data centers will be somewhat pronounced because at least a majority of cluster members must respond to consensus requests. Additionally, cluster data must be replicated across all peers, so there will be bandwidth cost as well.
-
-With longer latencies, the default etcd configuration may cause frequent elections or heartbeat timeouts. See [tuning] for adjusting timeouts for high latency deployments.
-
-## Operation
-
-### How to backup a etcd cluster?
-
-etcdctl provides a `snapshot` command to create backups. See [backup][backup] for more details.
-
-### Should I add a member before removing an unhealthy member?
-
-When replacing an etcd node, it's important to remove the member first and then add its replacement.
-
-etcd employs distributed consensus based on a quorum model; (n/2)+1 members, a majority, must agree on a proposal before it can be committed to the cluster. These proposals include key-value updates and membership changes. This model totally avoids any possibility of split brain inconsistency. The downside is permanent quorum loss is catastrophic.
-
-How this applies to membership: If a 3-member cluster has 1 downed member, it can still make forward progress because the quorum is 2 and 2 members are still live. However, adding a new member to a 3-member cluster will increase the quorum to 3 because 3 votes are required for a majority of 4 members. Since the quorum increased, this extra member buys nothing in terms of fault tolerance; the cluster is still one node failure away from being unrecoverable.
-
-Additionally, that new member is risky because it may turn out to be misconfigured or incapable of joining the cluster. In that case, there's no way to recover quorum because the cluster has two members down and two members up, but needs three votes to change membership to undo the botched membership addition. etcd will by default reject member add attempts that could take down the cluster in this manner.
-
-On the other hand, if the downed member is removed from cluster membership first, the number of members becomes 2 and the quorum remains at 2. Following that removal by adding a new member will also keep the quorum steady at 2. So, even if the new node can't be brought up, it's still possible to remove the new member through quorum on the remaining live members.
-
-### Why won't etcd accept my membership changes?
-
-etcd sets `strict-reconfig-check` in order to reject reconfiguration requests that would cause quorum loss. Abandoning quorum is really risky (especially when the cluster is already unhealthy). Although it may be tempting to disable quorum checking if there's quorum loss to add a new member, this could lead to full fledged cluster inconsistency. For many applications, this will make the problem even worse ("disk geometry corruption" being a candidate for most terrifying).
-
-### Why does etcd lose its leader from disk latency spikes?
-
-This is intentional; disk latency is part of leader liveness. Suppose the cluster leader takes a minute to fsync a raft log update to disk, but the etcd cluster has a one second election timeout. Even though the leader can process network messages within the election interval (e.g., send heartbeats), it's effectively unavailable because it can't commit any new proposals; it's waiting on the slow disk. If the cluster frequently loses its leader due to disk latencies, try [tuning][tuning] the disk settings or etcd time parameters.
-
-### What does the etcd warning "request ignored (cluster ID mismatch)" mean?
-
-Every new etcd cluster generates a new cluster ID based on the initial cluster configuration and a user-provided unique `initial-cluster-token` value. By having unique cluster ID's, etcd is protected from cross-cluster interaction which could corrupt the cluster.
-
-Usually this warning happens after tearing down an old cluster, then reusing some of the peer addresses for the new cluster. If any etcd process from the old cluster is still running it will try to contact the new cluster. The new cluster will recognize a cluster ID mismatch, then ignore the request and emit this warning. This warning is often cleared by ensuring peer addresses among distinct clusters are disjoint.
-
-### What does "mvcc: database space exceeded" mean and how do I fix it?
-
-The [multi-version concurrency control][api-mvcc] data model in etcd keeps an exact history of the keyspace. Without periodically compacting this history (e.g., by setting `--auto-compaction`), etcd will eventually exhaust its storage space. If etcd runs low on storage space, it raises a space quota alarm to protect the cluster from further writes. So long as the alarm is raised, etcd responds to write requests with the error `mvcc: database space exceeded`.
-
-To recover from the low space quota alarm:
-
-1. [Compact][maintenance-compact] etcd's history.
-2. [Defragment][maintenance-defragment] every etcd endpoint.
-3. [Disarm][maintenance-disarm] the alarm.
-
-### What does the etcd warning "etcdserver/api/v3rpc: transport: http2Server.HandleStreams failed to read frame: read tcp 127.0.0.1:2379->127.0.0.1:43020: read: connection reset by peer" mean?
-
-This is gRPC-side warning when a server receives a TCP RST flag with client-side streams being prematurely closed. For example, a client closes its connection, while gRPC server has not yet processed all HTTP/2 frames in the TCP queue. Some data may have been lost in server side, but it is ok so long as client connection has already been closed.
-
-Only [old versions of gRPC](https://github.com/grpc/grpc-go/issues/1362) log this. etcd [>=v3.2.13 by default log this with DEBUG level](https://github.com/etcd-io/etcd/pull/9080), thus only visible with `--debug` flag enabled.
-
-## Performance
-
-### How should I benchmark etcd?
-
-Try the [benchmark] tool. Current [benchmark results][benchmark-result] are available for comparison.
-
-### What does the etcd warning "apply entries took too long" mean?
-
-After a majority of etcd members agree to commit a request, each etcd server applies the request to its data store and persists the result to disk. Even with a slow mechanical disk or a virtualized network disk, such as Amazon’s EBS or Google’s PD, applying a request should normally take fewer than 50 milliseconds. If the average apply duration exceeds 100 milliseconds, etcd will warn that entries are taking too long to apply.
-
-Usually this issue is caused by a slow disk. The disk could be experiencing contention among etcd and other applications, or the disk is too simply slow (e.g., a shared virtualized disk). To rule out a slow disk from causing this warning, monitor [backend_commit_duration_seconds][backend_commit_metrics] (p99 duration should be less than 25ms) to confirm the disk is reasonably fast. If the disk is too slow, assigning a dedicated disk to etcd or using faster disk will typically solve the problem.
-
-The second most common cause is CPU starvation. If monitoring of the machine’s CPU usage shows heavy utilization, there may not be enough compute capacity for etcd. Moving etcd to dedicated machine, increasing process resource isolation cgroups, or renicing the etcd server process into a higher priority can usually solve the problem.
-
-Expensive user requests which access too many keys (e.g., fetching the entire keyspace) can also cause long apply latencies. Accessing fewer than a several hundred keys per request, however, should always be performant.
-
-If none of the above suggestions clear the warnings, please [open an issue][new_issue] with detailed logging, monitoring, metrics and optionally workload information.
-
-### What does the etcd warning "failed to send out heartbeat on time" mean?
-
-etcd uses a leader-based consensus protocol for consistent data replication and log execution. Cluster members elect a single leader, all other members become followers. The elected leader must periodically send heartbeats to its followers to maintain its leadership. Followers infer leader failure if no heartbeats are received within an election interval and trigger an election. If a leader doesn’t send its heartbeats in time but is still running, the election is spurious and likely caused by insufficient resources. To catch these soft failures, if the leader skips two heartbeat intervals, etcd will warn it failed to send a heartbeat on time.
-
-Usually this issue is caused by a slow disk. Before the leader sends heartbeats attached with metadata, it may need to persist the metadata to disk. The disk could be experiencing contention among etcd and other applications, or the disk is too simply slow (e.g., a shared virtualized disk). To rule out a slow disk from causing this warning, monitor [wal_fsync_duration_seconds][wal_fsync_duration_seconds] (p99 duration should be less than 10ms) to confirm the disk is reasonably fast. If the disk is too slow, assigning a dedicated disk to etcd or using faster disk will typically solve the problem. To tell whether a disk is fast enough for etcd, a benchmarking tool such as [fio][fio] can be used. Read [here][fio-blog-post] for an example.
-
-The second most common cause is CPU starvation. If monitoring of the machine’s CPU usage shows heavy utilization, there may not be enough compute capacity for etcd. Moving etcd to dedicated machine, increasing process resource isolation with cgroups, or renicing the etcd server process into a higher priority can usually solve the problem.
-
-A slow network can also cause this issue. If network metrics among the etcd machines shows long latencies or high drop rate, there may not be enough network capacity for etcd. Moving etcd members to a less congested network will typically solve the problem. However, if the etcd cluster is deployed across data centers, long latency between members is expected. For such deployments, tune the `heartbeat-interval` configuration to roughly match the round trip time between the machines, and the `election-timeout` configuration to be at least 5 * `heartbeat-interval`. See [tuning documentation][tuning] for detailed information.
-
-If none of the above suggestions clear the warnings, please [open an issue][new_issue] with detailed logging, monitoring, metrics and optionally workload information.
-
-### What does the etcd warning "snapshotting is taking more than x seconds to finish ..." mean?
-
-etcd sends a snapshot of its complete key-value store to refresh slow followers and for [backups][backup]. Slow snapshot transfer times increase MTTR; if the cluster is ingesting data with high throughput, slow followers may livelock by needing a new snapshot before finishing receiving a snapshot. To catch slow snapshot performance, etcd warns when sending a snapshot takes more than thirty seconds and exceeds the expected transfer time for a 1Gbps connection.
-
-
-[hardware-setup]: ./op-guide/hardware.md
-[supported-platform]: ./op-guide/supported-platform.md
-[wal_fsync_duration_seconds]: ./metrics.md#disk
-[tuning]: ./tuning.md
-[new_issue]: https://github.com/etcd-io/etcd/issues/new
-[backend_commit_metrics]: ./metrics.md#disk
-[raft]: https://raft.github.io/raft.pdf
-[backup]: https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/recovery.md#snapshotting-the-keyspace
-[chubby]: http://static.googleusercontent.com/media/research.google.com/en//archive/chubby-osdi06.pdf
-[runtime reconfiguration]: https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/runtime-configuration.md
-[benchmark]: https://github.com/coreos/etcd/tree/master/tools/benchmark
-[benchmark-result]: https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/performance.md
-[api-mvcc]: learning/api.md#revisions
-[maintenance-compact]: op-guide/maintenance.md#history-compaction
-[maintenance-defragment]: op-guide/maintenance.md#defragmentation
-[maintenance-disarm]: ../etcdctl/README.md#alarm-disarm
-[fio]: https://github.com/axboe/fio
-[fio-blog-post]: https://www.ibm.com/cloud/blog/using-fio-to-tell-whether-your-storage-is-fast-enough-for-etcd
diff --git a/etcd-fix/Documentation/integrations.md b/etcd-fix/Documentation/integrations.md
deleted file mode 100644
index 62a2219..0000000
--- a/etcd-fix/Documentation/integrations.md
+++ /dev/null
@@ -1,189 +0,0 @@
----
-title: Libraries and tools
----
-
-## Tools
-
-- [etcdctl](https://github.com/etcd-io/etcd/tree/master/etcdctl) - A command line client for etcd
-- [etcd-backup](https://github.com/fanhattan/etcd-backup) - A powerful command line utility for dumping/restoring etcd - Supports v2
-- [etcd-dump](https://npmjs.org/package/etcd-dump) - Command line utility for dumping/restoring etcd.
-- [etcd-fs](https://github.com/xetorthio/etcd-fs) - FUSE filesystem for etcd
-- [etcddir](https://github.com/rekby/etcddir) - Realtime sync etcd and local directory. Work with windows and linux.
-- [etcd-browser](https://github.com/henszey/etcd-browser) - A web-based key/value editor for etcd using AngularJS
-- [etcd-lock](https://github.com/datawisesystems/etcd-lock) - Master election & distributed r/w lock implementation using etcd - Supports v2
-- [etcd-console](https://github.com/matishsiao/etcd-console) - A web-base key/value editor for etcd using PHP
-- [etcd-viewer](https://github.com/nikfoundas/etcd-viewer) - An etcd key-value store editor/viewer written in Java
-- [etcdtool](https://github.com/mickep76/etcdtool) - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema
-- [etcd-rest](https://github.com/mickep76/etcd-rest) - Create generic REST API in Go using etcd as a backend with validation using JSON schema
-- [etcdsh](https://github.com/kamilhark/etcdsh) - A command line client with support of command history and tab completion. Supports v2
-- [etcdloadtest](https://github.com/sinsharat/etcdloadtest) - A command line load test client for etcd version 3.0 and above.
-- [lucas](https://github.com/ringtail/lucas) - A web-based key-value viewer for kubernetes etcd3.0+ cluster.
-- [etcd-manager](https://etcdmanager.io) - A modern, efficient, multi-platform and free ETCD 3.x GUI & client tool. Available for Windows, Linux and Mac.
-- [etcd-backup-restore](https://github.com/gardener/etcd-backup-restore) - Utility to periodic and incrementally backup and restore the etcd.
-
-## Libraries
-
-The sections below list etcd client libraries by language.
-
-### Go
-
-- [etcd/clientv3](https://github.com/etcd-io/etcd/blob/master/clientv3) - the officially maintained Go client for v3
-- [etcd/client](https://github.com/etcd-io/etcd/blob/master/client) - the officially maintained Go client for v2
-- [go-etcd](https://github.com/coreos/go-etcd) - the deprecated official client. May be useful for older (<2.0.0) versions of etcd.
-- [encWrapper](https://github.com/lumjjb/etcd/tree/enc_wrapper/clientwrap/encwrapper) - encWrapper is an encryption wrapper for the etcd client Keys API/KV.
-
-### Java
-
-- [coreos/jetcd](https://github.com/etcd-io/jetcd) - Supports v3
-- [boonproject/etcd](https://github.com/boonproject/boon/blob/master/etcd/README.md) - Supports v2, Async/Sync and waits
-- [justinsb/jetcd](https://github.com/justinsb/jetcd)
-- [diwakergupta/jetcd](https://github.com/diwakergupta/jetcd) - Supports v2
-- [jurmous/etcd4j](https://github.com/jurmous/etcd4j) - Supports v2, Async/Sync, waits and SSL
-- [AdoHe/etcd4j](http://github.com/AdoHe/etcd4j) - Supports v2 (enhance for real production cluster)
-- [cdancy/etcd-rest](https://github.com/cdancy/etcd-rest) - Uses jclouds to provide a complete implementation of v2 API.
-
-### Scala
-
-- [maciej/etcd-client](https://github.com/maciej/etcd-client) - Supports v2. Akka HTTP-based fully async client
-- [eiipii/etcdhttpclient](https://bitbucket.org/eiipii/etcdhttpclient) - Supports v2. Async HTTP client based on Netty and Scala Futures.
-
-### Perl
-
-- [hexfusion/perl-net-etcd](https://github.com/hexfusion/perl-net-etcd) - Supports v3 grpc gateway HTTP API
-- [robn/p5-etcd](https://github.com/robn/p5-etcd) - Supports v2
-
-### Python
-
-- [kragniz/python-etcd3](https://github.com/kragniz/python-etcd3) - Client for v3
-- [jplana/python-etcd](https://github.com/jplana/python-etcd) - Supports v2
-- [russellhaering/txetcd](https://github.com/russellhaering/txetcd) - a Twisted Python library
-- [cholcombe973/autodock](https://github.com/cholcombe973/autodock) - A docker deployment automation tool
-- [lisael/aioetcd](https://github.com/lisael/aioetcd) - (Python 3.4+) Asyncio coroutines client (Supports v2)
-- [txaio-etcd](https://github.com/crossbario/txaio-etcd) - Asynchronous etcd v3-only client library for Twisted (today) and asyncio (future)
-- [dims/etcd3-gateway](https://github.com/dims/etcd3-gateway) - etcd v3 API library using the HTTP grpc gateway
-- [aioetcd3](https://github.com/gaopeiliang/aioetcd3) - (Python 3.6+) etcd v3 API for asyncio
-- [Revolution1/etcd3-py](https://github.com/Revolution1/etcd3-py) - (python2.7 and python3.5+) Python client for etcd v3, using gRPC-JSON-Gateway
-
-### Node
-
-- [mixer/etcd3](https://github.com/mixer/etcd3) - Supports v3
-- [stianeikeland/node-etcd](https://github.com/stianeikeland/node-etcd) - Supports v2 (w Coffeescript)
-- [lavagetto/nodejs-etcd](https://github.com/lavagetto/nodejs-etcd) - Supports v2
-- [deedubs/node-etcd-config](https://github.com/deedubs/node-etcd-config) - Supports v2
-
-### Ruby
-
-- [iconara/etcd-rb](https://github.com/iconara/etcd-rb)
-- [jpfuentes2/etcd-ruby](https://github.com/jpfuentes2/etcd-ruby)
-- [ranjib/etcd-ruby](https://github.com/ranjib/etcd-ruby) - Supports v2
-- [davissp14/etcdv3-ruby](https://github.com/davissp14/etcdv3-ruby) - Supports v3
-
-### C
-
-- [apache/celix/etcdlib](https://github.com/apache/celix/tree/develop/etcdlib) - Supports v2
-- [jdarcy/etcd-api](https://github.com/jdarcy/etcd-api) - Supports v2
-- [shafreeck/cetcd](https://github.com/shafreeck/cetcd) - Supports v2
-
-### C++
-
-- [edwardcapriolo/etcdcpp](https://github.com/edwardcapriolo/etcdcpp) - Supports v2
-- [suryanathan/etcdcpp](https://github.com/suryanathan/etcdcpp) - Supports v2 (with waits)
-- [nokia/etcd-cpp-api](https://github.com/nokia/etcd-cpp-api) - Supports v2
-- [nokia/etcd-cpp-apiv3](https://github.com/nokia/etcd-cpp-apiv3) - Supports v3
-
-### Clojure
-
-- [aterreno/etcd-clojure](https://github.com/aterreno/etcd-clojure)
-- [dwwoelfel/cetcd](https://github.com/dwwoelfel/cetcd) - Supports v2
-- [rthomas/clj-etcd](https://github.com/rthomas/clj-etcd) - Supports v2
-
-### Erlang
-
-- [marshall-lee/etcd.erl](https://github.com/marshall-lee/etcd.erl) - Supports v2
-- [zhongwencool/eetcd](https://github.com/zhongwencool/eetcd) - Supports v3+ (GRPC only)
-
-### .NET
-
-- [wangjia184/etcdnet](https://github.com/wangjia184/etcdnet) - Supports v2
-- [drusellers/etcetera](https://github.com/drusellers/etcetera)
-- [shubhamranjan/dotnet-etcd](https://github.com/shubhamranjan/dotnet-etcd) - Supports v3+ (GRPC only)
-
-### PHP
-
-- [linkorb/etcd-php](https://github.com/linkorb/etcd-php)
-- [activecollab/etcd](https://github.com/activecollab/etcd)
-- [ouqiang/etcd-php](https://github.com/ouqiang/etcd-php) - Client for v3 gRPC gateway
-
-### Haskell
-
-- [wereHamster/etcd-hs](https://github.com/wereHamster/etcd-hs)
-
-### R
-
-- [ropensci/etseed](https://github.com/ropensci/etseed)
-
-### Nim
-
-- [etcd_client](https://github.com/FedericoCeratto/nim-etcd-client)
-
-### Tcl
-
-- [efrecon/etcd-tcl](https://github.com/efrecon/etcd-tcl) - Supports v2, except wait.
-
-### Rust
-
-- [jimmycuadra/rust-etcd](https://github.com/jimmycuadra/rust-etcd) - Supports v2
-
-### Gradle
-
-- [gradle-etcd-rest-plugin](https://github.com/cdancy/gradle-etcd-rest-plugin) - Supports v2
-
-## Deployment tools
-
-### Chef integrations
-
-- [coderanger/etcd-chef](https://github.com/coderanger/etcd-chef)
-
-### Chef cookbooks
-
-- [spheromak/etcd-cookbook](https://github.com/spheromak/etcd-cookbook)
-
-### BOSH releases
-
-- [cloudfoundry-community/etcd-boshrelease](https://github.com/cloudfoundry-community/etcd-boshrelease)
-- [cloudfoundry/cf-release](https://github.com/cloudfoundry/cf-release/tree/master/jobs/etcd)
-
-## Projects using etcd
-
-- [etcd Raft users](../raft/README.md#notable-users) - projects using etcd's raft library implementation.
-- [apache/celix](https://github.com/apache/celix) - an implementation of the OSGi specification adapted to C and C++
-- [binocarlos/yoda](https://github.com/binocarlos/yoda) - etcd + ZeroMQ
-- [blox/blox](https://github.com/blox/blox) - a collection of open source projects for container management and orchestration with AWS ECS
-- [calavera/active-proxy](https://github.com/calavera/active-proxy) - HTTP Proxy configured with etcd
-- [chain/chain](https://github.com/chain/chain) - software designed to operate and connect to highly scalable permissioned blockchain networks
-- [derekchiang/etcdplus](https://github.com/derekchiang/etcdplus) - A set of distributed synchronization primitives built upon etcd
-- [go-discover](https://github.com/flynn/go-discover) - service discovery in Go
-- [gleicon/goreman](https://github.com/gleicon/goreman/tree/etcd) - Branch of the Go Foreman clone with etcd support
-- [garethr/hiera-etcd](https://github.com/garethr/hiera-etcd) - Puppet hiera backend using etcd
-- [mattn/etcd-vim](https://github.com/mattn/etcd-vim) - SET and GET keys from inside vim
-- [mattn/etcdenv](https://github.com/mattn/etcdenv) - "env" shebang with etcd integration
-- [kelseyhightower/confd](https://github.com/kelseyhightower/confd) - Manage local app config files using templates and data from etcd
-- [configdb](https://git.autistici.org/ai/configdb/tree/master) - A REST relational abstraction on top of arbitrary database backends, aimed at storing configs and inventories.
-- [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) - Container cluster manager introduced by Google.
-- [mailgun/vulcand](https://github.com/mailgun/vulcand) - HTTP proxy that uses etcd as a configuration backend.
-- [duedil-ltd/discodns](https://github.com/duedil-ltd/discodns) - Simple DNS nameserver using etcd as a database for names and records.
-- [skynetservices/skydns](https://github.com/skynetservices/skydns) - RFC compliant DNS server
-- [xordataexchange/crypt](https://github.com/xordataexchange/crypt) - Securely store values in etcd using GPG encryption
-- [spf13/viper](https://github.com/spf13/viper) - Go configuration library, reads values from ENV, pflags, files, and etcd with optional encryption
-- [lytics/metafora](https://github.com/lytics/metafora) - Go distributed task library
-- [ryandoyle/nss-etcd](https://github.com/ryandoyle/nss-etcd) - A GNU libc NSS module for resolving names from etcd.
-- [Gru](https://github.com/dnaeon/gru) - Orchestration made easy with Go
-- [Vitess](http://vitess.io/) - Vitess is a database clustering system for horizontal scaling of MySQL.
-- [lclarkmichalek/etcdhcp](https://github.com/lclarkmichalek/etcdhcp) - DHCP server that uses etcd for persistence and coordination.
-- [openstack/networking-vpp](https://github.com/openstack/networking-vpp) - A networking driver that programs the [FD.io VPP dataplane](https://wiki.fd.io/view/VPP) to provide [OpenStack](https://www.openstack.org/) cloud virtual networking
-- [OpenStack](https://github.com/openstack/governance/blob/master/reference/base-services.rst) - OpenStack services can rely on etcd as a base service.
-- [CoreDNS](https://github.com/coredns/coredns/tree/master/plugin/etcd) - CoreDNS is a DNS server that chains plugins, part of CNCF and Kubernetes
-- [Uber M3](https://github.com/m3db/m3) - M3: Uber’s Open Source, Large-scale Metrics Platform for Prometheus
-- [Rook](https://github.com/rook/rook) - Storage Orchestration for Kubernetes
-- [Patroni](https://github.com/zalando/patroni) - A template for PostgreSQL High Availability with ZooKeeper, etcd, or Consul
-- [Trillian](https://github.com/google/trillian) - Trillian implements a Merkle tree whose contents are served from a data storage layer, to allow scalability to extremely large trees.
diff --git a/etcd-fix/Documentation/learning/_index.md b/etcd-fix/Documentation/learning/_index.md
deleted file mode 100644
index 9f4bf13..0000000
--- a/etcd-fix/Documentation/learning/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Learning
-weight: 2000
----
diff --git a/etcd-fix/Documentation/learning/api.md b/etcd-fix/Documentation/learning/api.md
deleted file mode 100644
index 90de19c..0000000
--- a/etcd-fix/Documentation/learning/api.md
+++ /dev/null
@@ -1,483 +0,0 @@
----
-title: etcd3 API
----
-
-This document is meant to give an overview of the etcd3 API's central design. It is by no means all encompassing, but intended to focus on the basic ideas needed to understand etcd without the distraction of less common API calls. All etcd3 API's are defined in [gRPC services][grpc-service], which categorize remote procedure calls (RPCs) understood by the etcd server. A full listing of all etcd RPCs are documented in markdown in the [gRPC API listing][grpc-api].
-
-## gRPC Services
-
-Every API request sent to an etcd server is a gRPC remote procedure call. RPCs in etcd3 are categorized based on functionality into services.
-
-Services important for dealing with etcd's key space include:
-* KV - Creates, updates, fetches, and deletes key-value pairs.
-* Watch - Monitors changes to keys.
-* Lease - Primitives for consuming client keep-alive messages.
-
-Services which manage the cluster itself include:
-* Auth - Role based authentication mechanism for authenticating users.
-* Cluster - Provides membership information and configuration facilities.
-* Maintenance - Takes recovery snapshots, defragments the store, and returns per-member status information.
-
-### Requests and Responses
-
-All RPCs in etcd3 follow the same format. Each RPC has a function `Name` which takes `NameRequest` as an argument and returns `NameResponse` as a response. For example, here is the `Range` RPC description:
-
-```protobuf
-service KV {
- Range(RangeRequest) returns (RangeResponse)
- ...
-}
-```
-
-### Response header
-
-All Responses from etcd API have an attached response header which includes cluster metadata for the response:
-
-```proto
-message ResponseHeader {
- uint64 cluster_id = 1;
- uint64 member_id = 2;
- int64 revision = 3;
- uint64 raft_term = 4;
-}
-```
-
-* Cluster_ID - the ID of the cluster generating the response.
-* Member_ID - the ID of the member generating the response.
-* Revision - the revision of the key-value store when generating the response.
-* Raft_Term - the Raft term of the member when generating the response.
-
-An application may read the `Cluster_ID` or `Member_ID` field to ensure it is communicating with the intended cluster (member).
-
-Applications can use the `Revision` field to know the latest revision of the key-value store. This is especially useful when applications specify a historical revision to make a `time travel query` and wish to know the latest revision at the time of the request.
-
-Applications can use `Raft_Term` to detect when the cluster completes a new leader election.
-
-## Key-Value API
-
-The Key-Value API manipulates key-value pairs stored inside etcd. The majority of requests made to etcd are usually key-value requests.
-
-### System primitives
-
-### Key-Value pair
-
-A key-value pair is the smallest unit that the key-value API can manipulate. Each key-value pair has a number of fields, defined in [protobuf format][kv-proto]:
-
-```protobuf
-message KeyValue {
- bytes key = 1;
- int64 create_revision = 2;
- int64 mod_revision = 3;
- int64 version = 4;
- bytes value = 5;
- int64 lease = 6;
-}
-```
-
-* Key - key in bytes. An empty key is not allowed.
-* Value - value in bytes.
-* Version - version is the version of the key. A deletion resets the version to zero and any modification of the key increases its version.
-* Create_Revision - revision of the last creation on the key.
-* Mod_Revision - revision of the last modification on the key.
-* Lease - the ID of the lease attached to the key. If lease is 0, then no lease is attached to the key.
-
-
-In addition to just the key and value, etcd attaches additional revision metadata as part of the key message. This revision information orders keys by time of creation and modification, which is useful for managing concurrency for distributed synchronization. The etcd client's [distributed shared locks][locks] use the creation revision to wait for lock ownership. Similarly, the modification revision is used for detecting [software transactional memory][STM] read set conflicts and waiting on [leader election][elections] updates.
-
-#### Revisions
-
-etcd maintains a 64-bit cluster-wide counter, the store revision, that is incremented each time the key space is modified. The revision serves as a global logical clock, sequentially ordering all updates to the store. The change represented by a new revision is incremental; the data associated with a revision is the data that changed the store. Internally, a new revision means writing the changes to the backend's B+tree, keyed by the incremented revision.
-
-Revisions become more valuable when considering etcd3's [multi-version concurrency control][mvcc] backend. The MVCC model means that the key-value store can be viewed from past revisions since historical key revisions are retained. The retention policy for this history can be configured by cluster administrators for fine-grained storage management; usually etcd3 discards old revisions of keys on a timer. A typical etcd3 cluster retains superseded key data for hours. This also provides reliable handling for long client disconnection, not just transient network disruptions: watchers simply resume from the last observed historical revision. Similarly, to read from the store at a particular point-in-time, read requests can be tagged with a revision to return keys from a view of the key space at the point-in-time that revision was committed.
-
-#### Key ranges
-
-The etcd3 data model indexes all keys over a flat binary key space. This differs from other key-value store systems that use a hierarchical system of organizing keys into directories. Instead of listing keys by directory, keys are listed by key intervals `[a, b)`.
-
-These intervals are often referred to as "ranges" in etcd3. Operations over ranges are more powerful than operations on directories. Like a hierarchical store, intervals support single key lookups via `[a, a+1)` (e.g., ['a', 'a\x00') looks up 'a') and directory lookups by encoding keys by directory depth. In addition to those operations, intervals can also encode prefixes; for example the interval `['a', 'b')` looks up all keys prefixed by the string 'a'.
-
-By convention, ranges for a request are denoted by the fields `key` and `range_end`. The `key` field is the first key of the range and should be non-empty. The `range_end` is the key following the last key of the range. If `range_end` is not given or empty, the range is defined to contain only the key argument. If `range_end` is `key` plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"), then the range represents all keys prefixed with key. If both `key` and `range_end` are '\0', then range represents all keys. If `range_end` is '\0', the range is all keys greater than or equal to the key argument.
-
-### Range
-
-Keys are fetched from the key-value store using the `Range` API call, which takes a `RangeRequest`:
-
-```protobuf
-message RangeRequest {
- enum SortOrder {
- NONE = 0; // default, no sorting
- ASCEND = 1; // lowest target value first
- DESCEND = 2; // highest target value first
- }
- enum SortTarget {
- KEY = 0;
- VERSION = 1;
- CREATE = 2;
- MOD = 3;
- VALUE = 4;
- }
-
- bytes key = 1;
- bytes range_end = 2;
- int64 limit = 3;
- int64 revision = 4;
- SortOrder sort_order = 5;
- SortTarget sort_target = 6;
- bool serializable = 7;
- bool keys_only = 8;
- bool count_only = 9;
- int64 min_mod_revision = 10;
- int64 max_mod_revision = 11;
- int64 min_create_revision = 12;
- int64 max_create_revision = 13;
-}
-```
-
-* Key, Range_End - The key range to fetch.
-* Limit - the maximum number of keys returned for the request. When limit is set to 0, it is treated as no limit.
-* Revision - the point-in-time of the key-value store to use for the range. If revision is less or equal to zero, the range is over the latest key-value store. If the revision is compacted, ErrCompacted is returned as a response.
-* Sort_Order - the ordering for sorted requests.
-* Sort_Target - the key-value field to sort.
-* Serializable - sets the range request to use serializable member-local reads. By default, Range is linearizable; it reflects the current consensus of the cluster. For better performance and availability, in exchange for possible stale reads, a serializable range request is served locally without needing to reach consensus with other nodes in the cluster.
-* Keys_Only - return only the keys and not the values.
-* Count_Only - return only the count of the keys in the range.
-* Min_Mod_Revision - the lower bound for key mod revisions; filters out lesser mod revisions.
-* Max_Mod_Revision - the upper bound for key mod revisions; filters out greater mod revisions.
-* Min_Create_Revision - the lower bound for key create revisions; filters out lesser create revisions.
-* Max_Create_Revision - the upper bound for key create revisions; filters out greater create revisions.
-
-The client receives a `RangeResponse` message from the `Range` call:
-
-```protobuf
-message RangeResponse {
- ResponseHeader header = 1;
- repeated mvccpb.KeyValue kvs = 2;
- bool more = 3;
- int64 count = 4;
-}
-```
-
-* Kvs - the list of key-value pairs matched by the range request. When `Count_Only` is set, `Kvs` is empty.
-* More - indicates if there are more keys to return in the requested range if `limit` is set.
-* Count - the total number of keys satisfying the range request.
-
-### Put
-
-Keys are saved into the key-value store by issuing a `Put` call, which takes a `PutRequest`:
-
-```protobuf
-message PutRequest {
- bytes key = 1;
- bytes value = 2;
- int64 lease = 3;
- bool prev_kv = 4;
- bool ignore_value = 5;
- bool ignore_lease = 6;
-}
-```
-
-* Key - the name of the key to put into the key-value store.
-* Value - the value, in bytes, to associate with the key in the key-value store.
-* Lease - the lease ID to associate with the key in the key-value store. A lease value of 0 indicates no lease.
-* Prev_Kv - when set, responds with the key-value pair data before the update from this `Put` request.
-* Ignore_Value - when set, update the key without changing its current value. Returns an error if the key does not exist.
-* Ignore_Lease - when set, update the key without changing its current lease. Returns an error if the key does not exist.
-
-The client receives a `PutResponse` message from the `Put` call:
-
-```protobuf
-message PutResponse {
- ResponseHeader header = 1;
- mvccpb.KeyValue prev_kv = 2;
-}
-```
-
-* Prev_Kv - the key-value pair overwritten by the `Put`, if `Prev_Kv` was set in the `PutRequest`.
-
-### Delete Range
-
-Ranges of keys are deleted using the `DeleteRange` call, which takes a `DeleteRangeRequest`:
-
-```protobuf
-message DeleteRangeRequest {
- bytes key = 1;
- bytes range_end = 2;
- bool prev_kv = 3;
-}
-```
-
-* Key, Range_End - The key range to delete.
-* Prev_Kv - when set, return the contents of the deleted key-value pairs.
-
-The client receives a `DeleteRangeResponse` message from the `DeleteRange` call:
-
-```protobuf
-message DeleteRangeResponse {
- ResponseHeader header = 1;
- int64 deleted = 2;
- repeated mvccpb.KeyValue prev_kvs = 3;
-}
-```
-
-* Deleted - number of keys deleted.
-* Prev_Kv - a list of all key-value pairs deleted by the `DeleteRange` operation.
-
-### Transaction
-
-A transaction is an atomic If/Then/Else construct over the key-value store. It provides a primitive for grouping requests together in atomic blocks (i.e., then/else) whose execution is guarded (i.e., if) based on the contents of the key-value store. Transactions can be used for protecting keys from unintended concurrent updates, building compare-and-swap operations, and developing higher-level concurrency control.
-
-A transaction can atomically process multiple requests in a single request. For modifications to the key-value store, this means the store's revision is incremented only once for the transaction and all events generated by the transaction will have the same revision. However, modifications to the same key multiple times within a single transaction are forbidden.
-
-All transactions are guarded by a conjunction of comparisons, similar to an `If` statement. Each comparison checks a single key in the store. It may check for the absence or presence of a value, compare with a given value, or check a key's revision or version. Two different comparisons may apply to the same or different keys. All comparisons are applied atomically; if all comparisons are true, the transaction is said to succeed and etcd applies the transaction's then / `success` request block, otherwise it is said to fail and applies the else / `failure` request block.
-
-Each comparison is encoded as a `Compare` message:
-
-```protobuf
-message Compare {
- enum CompareResult {
- EQUAL = 0;
- GREATER = 1;
- LESS = 2;
- NOT_EQUAL = 3;
- }
- enum CompareTarget {
- VERSION = 0;
- CREATE = 1;
- MOD = 2;
- VALUE= 3;
- }
- CompareResult result = 1;
- // target is the key-value field to inspect for the comparison.
- CompareTarget target = 2;
- // key is the subject key for the comparison operation.
- bytes key = 3;
- oneof target_union {
- int64 version = 4;
- int64 create_revision = 5;
- int64 mod_revision = 6;
- bytes value = 7;
- }
-}
-```
-
-* Result - the kind of logical comparison operation (e.g., equal, less than, etc).
-* Target - the key-value field to be compared. Either the key's version, create revision, modification revision, or value.
-* Key - the key for the comparison.
-* Target_Union - the user-specified data for the comparison.
-
-After processing the comparison block, the transaction applies a block of requests. A block is a list of `RequestOp` messages:
-
-```protobuf
-message RequestOp {
- // request is a union of request types accepted by a transaction.
- oneof request {
- RangeRequest request_range = 1;
- PutRequest request_put = 2;
- DeleteRangeRequest request_delete_range = 3;
- }
-}
-```
-
-* Request_Range - a `RangeRequest`.
-* Request_Put - a `PutRequest`. The keys must be unique. It may not share keys with any other Puts or Deletes.
-* Request_Delete_Range - a `DeleteRangeRequest`. It may not share keys with any Puts or Deletes requests.
-
-All together, a transaction is issued with a `Txn` API call, which takes a `TxnRequest`:
-
-```protobuf
-message TxnRequest {
- repeated Compare compare = 1;
- repeated RequestOp success = 2;
- repeated RequestOp failure = 3;
-}
-```
-
-* Compare - A list of predicates representing a conjunction of terms for guarding the transaction.
-* Success - A list of requests to process if all compare tests evaluate to true.
-* Failure - A list of requests to process if any compare test evaluates to false.
-
-The client receives a `TxnResponse` message from the `Txn` call:
-
-```protobuf
-message TxnResponse {
- ResponseHeader header = 1;
- bool succeeded = 2;
- repeated ResponseOp responses = 3;
-}
-```
-
-* Succeeded - Whether `Compare` evaluated to true or false.
-* Responses - A list of responses corresponding to the results from applying the `Success` block if succeeded is true or the `Failure` if succeeded is false.
-
-The `Responses` list corresponds to the results from the applied `RequestOp` list, with each response encoded as a `ResponseOp`:
-
-```protobuf
-message ResponseOp {
- oneof response {
- RangeResponse response_range = 1;
- PutResponse response_put = 2;
- DeleteRangeResponse response_delete_range = 3;
- }
-}
-```
-
-## Watch API
-
-The `Watch` API provides an event-based interface for asynchronously monitoring changes to keys. An etcd3 watch waits for changes to keys by continuously watching from a given revision, either current or historical, and streams key updates back to the client.
-
-### Events
-
-Every change to every key is represented with `Event` messages. An `Event` message provides both the update's data and the type of update:
-
-```protobuf
-message Event {
- enum EventType {
- PUT = 0;
- DELETE = 1;
- }
- EventType type = 1;
- KeyValue kv = 2;
- KeyValue prev_kv = 3;
-}
-```
-
-* Type - The kind of event. A PUT type indicates new data has been stored to the key. A DELETE indicates the key was deleted.
-* KV - The KeyValue associated with the event. A PUT event contains current kv pair. A PUT event with kv.Version=1 indicates the creation of a key. A DELETE event contains the deleted key with its modification revision set to the revision of deletion.
-* Prev_KV - The key-value pair for the key from the revision immediately before the event. To save bandwidth, it is only filled out if the watch has explicitly enabled it.
-
-### Watch streams
-
-Watches are long-running requests and use gRPC streams to stream event data. A watch stream is bi-directional; the client writes to the stream to establish watches and reads to receive watch events. A single watch stream can multiplex many distinct watches by tagging events with per-watch identifiers. This multiplexing helps reducing the memory footprint and connection overhead on the core etcd cluster.
-
-Watches make three guarantees about events:
-* Ordered - events are ordered by revision; an event will never appear on a watch if it precedes an event in time that has already been posted.
-* Reliable - a sequence of events will never drop any subsequence of events; if there are events ordered in time as a < b < c, then if the watch receives events a and c, it is guaranteed to receive b.
-* Atomic - a list of events is guaranteed to encompass complete revisions; updates in the same revision over multiple keys will not be split over several lists of events.
-
-A client creates a watch by sending a `WatchCreateRequest` over a stream returned by `Watch`:
-
-```protobuf
-message WatchCreateRequest {
- bytes key = 1;
- bytes range_end = 2;
- int64 start_revision = 3;
- bool progress_notify = 4;
-
- enum FilterType {
- NOPUT = 0;
- NODELETE = 1;
- }
- repeated FilterType filters = 5;
- bool prev_kv = 6;
-}
-```
-
-* Key, Range_End - The key range to watch.
-* Start_Revision - An optional revision for where to inclusively begin watching. If not given, it will stream events following the revision of the watch creation response header revision. The entire available event history can be watched starting from the last compaction revision.
-* Progress_Notify - When set, the watch will periodically receive a WatchResponse with no events, if there are no recent events. It is useful when clients wish to recover a disconnected watcher starting from a recent known revision. The etcd server decides how often to send notifications based on current server load.
-* Filters - A list of event types to filter away at server side.
-* Prev_Kv - When set, the watch receives the key-value data from before the event happens. This is useful for knowing what data has been overwritten.
-
-In response to a `WatchCreateRequest` or if there is a new event for some established watch, the client receives a `WatchResponse`:
-
-```protobuf
-message WatchResponse {
- ResponseHeader header = 1;
- int64 watch_id = 2;
- bool created = 3;
- bool canceled = 4;
- int64 compact_revision = 5;
-
- repeated mvccpb.Event events = 11;
-}
-```
-
-* Watch_ID - the ID of the watch that corresponds to the response.
-* Created - set to true if the response is for a create watch request. The client should store the ID and expect to receive events for the watch on the stream. All events sent to the created watcher will have the same watch_id.
-* Canceled - set to true if the response is for a cancel watch request. No further events will be sent to the canceled watcher.
-* Compact_Revision - set to the minimum historical revision available to etcd if a watcher tries watching at a compacted revision. This happens when creating a watcher at a compacted revision or the watcher cannot catch up with the progress of the key-value store. The watcher will be canceled; creating new watches with the same start_revision will fail.
-* Events - a list of new events in sequence corresponding to the given watch ID.
-
-If the client wishes to stop receiving events for a watch, it issues a `WatchCancelRequest`:
-
-```protobuf
-message WatchCancelRequest {
- int64 watch_id = 1;
-}
-```
-
-* Watch_ID - the ID of the watch to cancel so that no more events are transmitted.
-
-## Lease API
-
-Leases are a mechanism for detecting client liveness. The cluster grants leases with a time-to-live. A lease expires if the etcd cluster does not receive a keepAlive within a given TTL period.
-
-To tie leases into the key-value store, each key may be attached to at most one lease. When a lease expires or is revoked, all keys attached to that lease will be deleted. Each expired key generates a delete event in the event history.
-
-### Obtaining leases
-
-Leases are obtained through the `LeaseGrant` API call, which takes a `LeaseGrantRequest`:
-
-```protobuf
-message LeaseGrantRequest {
- int64 TTL = 1;
- int64 ID = 2;
-}
-```
-
-* TTL - the advisory time-to-live, in seconds.
-* ID - the requested ID for the lease. If ID is set to 0, etcd will choose an ID.
-
-The client receives a `LeaseGrantResponse` from the `LeaseGrant` call:
-
-```protobuf
-message LeaseGrantResponse {
- ResponseHeader header = 1;
- int64 ID = 2;
- int64 TTL = 3;
-}
-```
-
-* ID - the lease ID for the granted lease.
-* TTL - is the server selected time-to-live, in seconds, for the lease.
-
-```protobuf
-message LeaseRevokeRequest {
- int64 ID = 1;
-}
-```
-
-* ID - the lease ID to revoke. When the lease is revoked, all attached keys are deleted.
-
-### Keep alives
-
-Leases are refreshed using a bi-directional stream created with the `LeaseKeepAlive` API call. When the client wishes to refresh a lease, it sends a `LeaseKeepAliveRequest` over the stream:
-
-```protobuf
-message LeaseKeepAliveRequest {
- int64 ID = 1;
-}
-```
-
-* ID - the lease ID for the lease to keep alive.
-
-The keep alive stream responds with a `LeaseKeepAliveResponse`:
-
-```protobuf
-message LeaseKeepAliveResponse {
- ResponseHeader header = 1;
- int64 ID = 2;
- int64 TTL = 3;
-}
-```
-
-* ID - the lease that was refreshed with a new TTL.
-* TTL - the new time-to-live, in seconds, that the lease has remaining.
-
-[elections]: https://github.com/etcd-io/etcd/blob/master/clientv3/concurrency/election.go
-[kv-proto]: https://github.com/etcd-io/etcd/blob/master/api/mvccpb/kv.proto
-[grpc-api]: ../dev-guide/api_reference_v3.md
-[grpc-service]: https://github.com/etcd-io/etcd/blob/master/api/etcdserverpb/rpc.proto
-[locks]: https://github.com/etcd-io/etcd/blob/master/clientv3/concurrency/mutex.go
-[mvcc]: https://en.wikipedia.org/wiki/Multiversion_concurrency_control
-[stm]: https://github.com/etcd-io/etcd/blob/master/clientv3/concurrency/stm.go
diff --git a/etcd-fix/Documentation/learning/api_guarantees.md b/etcd-fix/Documentation/learning/api_guarantees.md
deleted file mode 100644
index 7d4da9d..0000000
--- a/etcd-fix/Documentation/learning/api_guarantees.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: KV API guarantees
----
-
-etcd is a consistent and durable key value store with [mini-transaction][txn] support. The key value store is exposed through the KV APIs. etcd tries to ensure the strongest consistency and durability guarantees for a distributed system. This specification enumerates the KV API guarantees made by etcd.
-
-### APIs to consider
-
-* Read APIs
- * range
- * watch
-* Write APIs
- * put
- * delete
-* Combination (read-modify-write) APIs
- * txn
-* Lease APIs
- * grant
- * revoke
- * put (attaching a lease to a key)
-
-### etcd specific definitions
-
-#### Operation completed
-
-An etcd operation is considered complete when it is committed through consensus, and therefore “executed” -- permanently stored -- by the etcd storage engine. The client knows an operation is completed when it receives a response from the etcd server. Note that the client may be uncertain about the status of an operation if it times out, or there is a network disruption between the client and the etcd member. etcd may also abort operations when there is a leader election. etcd does not send `abort` responses to clients’ outstanding requests in this event.
-
-#### Revision
-
-An etcd operation that modifies the key value store is assigned a single increasing revision. A transaction operation might modify the key value store multiple times, but only one revision is assigned. The revision attribute of a key value pair that was modified by the operation has the same value as the revision of the operation. The revision can be used as a logical clock for key value store. A key value pair that has a larger revision is modified after a key value pair with a smaller revision. Two key value pairs that have the same revision are modified by an operation "concurrently".
-
-### Guarantees provided
-
-#### Atomicity
-
-All API requests are atomic; an operation either completes entirely or not at all. For watch requests, all events generated by one operation will be in one watch response. Watch never observes partial events for a single operation.
-
-#### Durability
-
-Any completed operations are durable. All accessible data is also durable data. A read will never return data that has not been made durable.
-
-#### Isolation level and consistency of replicas
-
-etcd ensures [strict serializability][strict_serializability], which is the strongest isolation guarantee of distributed transactional database systems. Read operations will never observe any intermediate data.
-
-etcd ensures [linearizability][linearizability] as consistency of replicas basically. As described below, exceptions are watch operations and read operations which explicitly specifies serializable option.
-
-From the perspective of client, linearizability provides useful properties which make reasoning easily. This is a clean description quoted from [the original paper][linearizability]: `Linearizability provides the illusion that each operation applied by concurrent processes takes effect instantaneously at some point between its invocation and its response.`
-
-For example, consider a client completing a write at time point 1 (*t1*). A client issuing a read at *t2* (for *t2* > *t1*) should receive a value at least as recent as the previous write, completed at *t1*. However, the read might actually complete only by *t3*. Linearizability guarantees the read returns the most current value. Without linearizability guarantee, the returned value, current at *t2* when the read began, might be "stale" by *t3* because a concurrent write might happen between *t2* and *t3*.
-
-etcd does not ensure linearizability for watch operations. Users are expected to verify the revision of watch responses to ensure correct ordering.
-
-etcd ensures linearizability for all other operations by default. Linearizability comes with a cost, however, because linearized requests must go through the Raft consensus process. To obtain lower latencies and higher throughput for read requests, clients can configure a request’s consistency mode to `serializable`, which may access stale data with respect to quorum, but removes the performance penalty of linearized accesses' reliance on live consensus.
-
-
-### Granting, attaching and revoking leases
-
-etcd provides [a lease mechanism][lease]. The primary use case of a lease is implementing distributed coordination mechanisms like distributed locks. The lease mechanism itself is simple: a lease can be created with the grant API, attached to a key with the put API, revoked with the revoke API, and will be expired by the wall clock time to live (TTL). However, users need to be aware about [the important properties of the APIs and usage][why] for implementing correct distributed coordination mechanisms.
-
-[txn]: api.md#transactions
-[linearizability]: https://cs.brown.edu/~mph/HerlihyW90/p463-herlihy.pdf
-[strict_serializability]: http://jepsen.io/consistency/models/strict-serializable
-[serializable_isolation]: https://en.wikipedia.org/wiki/Isolation_(database_systems)#Serializable
-[Linearizability]: #Linearizability
-[lease]: https://web.stanford.edu/class/cs240/readings/89-leases.pdf
-[why]: why.md#Notes
diff --git a/etcd-fix/Documentation/learning/data_model.md b/etcd-fix/Documentation/learning/data_model.md
deleted file mode 100644
index f50f192..0000000
--- a/etcd-fix/Documentation/learning/data_model.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Data model
----
-
-etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.
-
-etcd stores data in a multiversion [persistent][persistent-ds] key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generate a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time and from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.
-
-### Logical view
-
-The store’s logical view is a flat binary key space. The key space has a lexically sorted index on byte string keys so range queries are inexpensive.
-
-The key space maintains multiple **revisions**. When the store is created, the initial revision is 1. Each atomic mutative operation (e.g., a transaction operation may contain multiple operations) creates a new revision on the key space. All data held by previous revisions remains unchanged. Old versions of key can still be accessed through previous revisions. Likewise, revisions are indexed as well; ranging over revisions with watchers is efficient. If the store is compacted to save space, revisions before the compact revision will be removed. Revisions are monotonically increasing over the lifetime of a cluster.
-
-A key's life spans a generation, from creation to deletion. Each key may have one or multiple generations. Creating a key increments the **version** of that key, starting at 1 if the key does not exist at the current revision. Deleting a key generates a key tombstone, concluding the key’s current generation by resetting its version to 0. Each modification of a key increments its version; so, versions are monotonically increasing within a key's generation. Once a compaction happens, any generation ended before the compaction revision will be removed, and values set before the compaction revision except the latest one will be removed.
-
-### Physical view
-
-etcd stores the physical data as key-value pairs in a persistent [b+tree][b+tree]. Each revision of the store’s state only contains the delta from its previous revision to be efficient. A single revision may correspond to multiple keys in the tree.
-
-The key of key-value pair is a 3-tuple (major, sub, type). Major is the store revision holding the key. Sub differentiates among keys within the same revision. Type is an optional suffix for special value (e.g., `t` if the value contains a tombstone). The value of the key-value pair contains the modification from previous revision, thus one delta from previous revision. The b+tree is ordered by key in lexical byte-order. Ranged lookups over revision deltas are fast; this enables quickly finding modifications from one specific revision to another. Compaction removes out-of-date keys-value pairs.
-
-etcd also keeps a secondary in-memory [btree][btree] index to speed up range queries over keys. The keys in the btree index are the keys of the store exposed to user. The value is a pointer to the modification of the persistent b+tree. Compaction removes dead pointers.
-
-[persistent-ds]: https://en.wikipedia.org/wiki/Persistent_data_structure
-[btree]: https://en.wikipedia.org/wiki/B-tree
-[b+tree]: https://en.wikipedia.org/wiki/B%2B_tree
diff --git a/etcd-fix/Documentation/learning/design-auth-v3.md b/etcd-fix/Documentation/learning/design-auth-v3.md
deleted file mode 100644
index f754563..0000000
--- a/etcd-fix/Documentation/learning/design-auth-v3.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: etcd v3 authentication design
----
-
-## Why not reuse the v2 auth system?
-
-The v3 protocol uses gRPC as its transport instead of a RESTful interface like v2. This new protocol provides an opportunity to iterate on and improve the v2 design. For example, v3 auth has connection based authentication, rather than v2's slower per-request authentication. Additionally, v2 auth's semantics tend to be unwieldy in practice with respect to reasoning about consistency, which will be described in the next sections. For v3, there is a well-defined description and implementation of the authentication mechanism which fixes the deficiencies in the v2 auth system.
-
-### Functionality requirements
-
-* Per connection authentication, not per request
- * User ID + password based authentication implemented for the gRPC API
- * Authentication must be refreshed after auth policy changes
-* Its functionality should be as simple and useful as v2
- * v3 provides a flat key space, unlike the directory structure of v2. Permission checking will be provided as interval matching.
-* It should have stronger consistency guarantees than v2 auth
-
-### Main required changes
-
-* A client must create a dedicated connection only for authentication before sending authenticated requests
-* Add permission information (user ID and authorized revision) to the Raft commands (`etcdserverpb.InternalRaftRequest`)
-* Every request is permission checked in the state machine layer, rather than API layer
-
-### Permission metadata consistency
-
-The metadata for auth should also be stored and managed in the storage controlled by etcd's Raft protocol like other data stored in etcd. It is required for not sacrificing availability and consistency of the entire etcd cluster. If reading or writing the metadata (e.g. permission information) needs an agreement of every node (more than quorum), single node failure can stop the entire cluster. Requiring all nodes to agree at once means that checking ordinary read/write requests cannot be completed if any cluster member is down, even if the cluster has an available quorum. This unanimous scheme ultimately degrades cluster availability; quorum based consensus from raft should suffice since agreement follows from consistent ordering.
-
-The authentication mechanism in the etcd v2 protocol has a tricky part because the metadata consistency should work as in the above, but does not: each permission check is processed by the etcd member that receives the client request (server/etcdserver/api/v2http/client.go), including follower members. Therefore, it's possible the check may be based on stale metadata.
-
-
-This staleness means that auth configuration cannot be reflected as soon as operators execute etcdctl. Therefore there is no way to know how long the stale metadata is active. Practically, the configuration change is reflected immediately after the command execution. However, in some cases of heavy load, the inconsistent state can be prolonged and it might result in counter-intuitive situations for users and developers. It requires a workaround like this: https://github.com/etcd-io/etcd/pull/4317#issuecomment-179037582
-
-### Inconsistent permissions are unsafe for linearized requests
-
-Inconsistent authentication state is most serious for writes. Even if an operator disables write on a user, if the write is only ordered with respect to the key value store but not the authentication system, it's possible the write will complete successfully. Without ordering on both the auth store and the key-value store, the system will be susceptible to stale permission attacks.
-
-Therefore, the permission checking logic should be added to the state machine of etcd. Each state machine should check the requests based on its permission information in the apply phase (so the auth information must not be stale).
-
-## Design and implementation
-
-### Authentication
-
-At first, a client must create a gRPC connection only to authenticate its user ID and password. An etcd server will respond with an authentication reply. The response will be an authentication token on success or an error on failure. The client can use its authentication token to present its credentials to etcd when making API requests.
-
-The client connection used to request the authentication token is typically thrown away; it cannot carry the new token's credentials. This is because gRPC doesn't provide a way for adding per RPC credential after creation of the connection (calling `grpc.Dial()`). Therefore, a client cannot assign a token to its connection that is obtained through the connection. The client needs a new connection for using the token.
-
-#### Notes on the implementation of `Authenticate()` RPC
-
-`Authenticate()` RPC generates an authentication token based on a given user name and password. etcd saves and checks a configured password and a given password using Go's `bcrypt` package. By design, `bcrypt`'s password checking mechanism is computationally expensive, taking nearly 100ms on an ordinary x64 server. Therefore, performing this check in the state machine apply phase would cause performance trouble: the entire etcd cluster can only serve almost 10 `Authenticate()` requests per second.
-
-For good performance, the v3 auth mechanism checks passwords in etcd's API layer, where it can be parallelized outside of raft. However, this can lead to potential time-of-check/time-of-use (TOCTOU) permission lapses:
-1. client A sends a request `Authenticate()`
-1. the API layer processes the password checking part of `Authenticate()`
-1. another client B sends a request of `ChangePassword()` and the server completes it
-1. the state machine layer processes the part of getting a revision number for the `Authenticate()` from A
-1. the server returns a success to A
-1. now A is authenticated on an obsolete password
-
-For avoiding such a situation, the API layer performs *version number validation* based on the revision number of the auth store. During password checking, the API layer saves the revision number of auth store. After successful password checking, the API layer compares the saved revision number and the latest revision number. If the numbers differ, it means someone else updated the auth metadata. So it retries the checking. With this mechanism, the successful password checking based on the obsolete password can be avoided.
-
-### Resolving a token in the API layer
-
-After authenticating with `Authenticate()`, a client can create a gRPC connection as it would without auth. In addition to the existing initialization process, the client must associate the token with the newly created connection. `grpc.WithPerRPCCredentials()` provides the functionality for this purpose.
-
-Every authenticated request from the client has a token. The token can be obtained with `grpc.metadata.FromIncomingContext()` in the server side. The server can obtain who is issuing the request and when the user was authorized. The information will be filled by the API layer in the header (`etcdserverpb.RequestHeader.Username` and `etcdserverpb.RequestHeader.AuthRevision`) of a raft log entry (`etcdserverpb.InternalRaftRequest`).
-
-### Checking permission in the state machine
-
-The auth info in `etcdserverpb.RequestHeader` is checked in the apply phase of the state machine. This step checks the user is granted permission to requested keys on the latest revision of auth store.
-
-### Two types of tokens: simple and JWT
-
-There are two kinds of token types: simple and JWT. The simple token isn't designed for production use cases. Its tokens aren't cryptographically signed and servers must statefully track token-user correspondence; it is meant for development testing. JWT tokens should be used for production deployments since it is cryptographically signed and verified. From the implementation perspective, JWT is stateless. Its token can include metadata including username and revision, so servers don't need to remember correspondence between tokens and the metadata.
-
-## Notes on the difference between KVS models and file system models
-
-etcd v3 is a KVS, not a file system. So the permissions can be granted to the users in form of an exact key name or a key range like `["start key", "end key")`. It means that granting a permission of a nonexistent key is possible. Users should care about unintended permission granting. In a case of file system like system (e.g. Chubby or ZooKeeper), an inode like data structure can include the permission information. So granting permission to a nonexist key won't be possible (except the case of sticky bits).
-
-The etcd v3 model requires multiple lookup of the metadata unlike the file system like systems. The worst case lookup cost will be sum the user's total granted keys and intervals. The cost cannot be avoided because v3's flat key space is completely different from Unix's file system model (every inode includes permission metadata). Practically the cost won’t be a serious problem because the metadata is small enough to benefit from caching.
diff --git a/etcd-fix/Documentation/learning/design-client.md b/etcd-fix/Documentation/learning/design-client.md
deleted file mode 100644
index fd59a04..0000000
--- a/etcd-fix/Documentation/learning/design-client.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: etcd client design
----
-
-etcd Client Design
-==================
-
-*Gyuho Lee (github.com/gyuho, Amazon Web Services, Inc.), Joe Betz (github.com/jpbetz, Google Inc.)*
-
-
-Introduction
-============
-
-etcd server has proven its robustness with years of failure injection testing. Most complex application logic is already handled by etcd server and its data stores (e.g. cluster membership is transparent to clients, with Raft-layer forwarding proposals to leader). Although server components are correct, its composition with client requires a different set of intricate protocols to guarantee its correctness and high availability under faulty conditions. Ideally, etcd server provides one logical cluster view of many physical machines, and client implements automatic failover between replicas. This documents client architectural decisions and its implementation details.
-
-
-Glossary
-========
-
-*clientv3*: etcd Official Go client for etcd v3 API.
-
-*clientv3-grpc1.0*: Official client implementation, with [`grpc-go v1.0.x`](https://github.com/grpc/grpc-go/releases/tag/v1.0.0), which is used in latest etcd v3.1.
-
-*clientv3-grpc1.7*: Official client implementation, with [`grpc-go v1.7.x`](https://github.com/grpc/grpc-go/releases/tag/v1.7.0), which is used in latest etcd v3.2 and v3.3.
-
-*clientv3-grpc1.23*: Official client implementation, with [`grpc-go v1.23.x`](https://github.com/grpc/grpc-go/releases/tag/v1.23.0), which is used in latest etcd v3.4.
-
-*Balancer*: etcd client load balancer that implements retry and failover mechanism. etcd client should automatically balance loads between multiple endpoints.
-
-*Endpoints*: A list of etcd server endpoints that clients can connect to. Typically, 3 or 5 client URLs of an etcd cluster.
-
-*Pinned endpoint*: When configured with multiple endpoints, <= v3.3 client balancer chooses only one endpoint to establish a TCP connection, in order to conserve total open connections to etcd cluster. In v3.4, balancer round-robins pinned endpoints for every request, thus distributing loads more evenly.
-
-*Client Connection*: TCP connection that has been established to an etcd server, via gRPC Dial.
-
-*Sub Connection*: gRPC SubConn interface. Each sub-connection contains a list of addresses. Balancer creates a SubConn from a list of resolved addresses. gRPC ClientConn can map to multiple SubConn (e.g. example.com resolves to `10.10.10.1` and `10.10.10.2` of two sub-connections). etcd v3.4 balancer employs internal resolver to establish one sub-connection for each endpoint.
-
-*Transient disconnect*: When gRPC server returns a status error of [`code Unavailable`](https://godoc.org/google.golang.org/grpc/codes#Code).
-
-
-Client Requirements
-===================
-
-*Correctness*. Requests may fail in the presence of server faults. However, it never violates consistency guarantees: global ordering properties, never write corrupted data, at-most once semantics for mutable operations, watch never observes partial events, and so on.
-
-*Liveness*. Servers may fail or disconnect briefly. Clients should make progress in either way. Clients should [never deadlock](https://github.com/etcd-io/etcd/issues/8980) waiting for a server to come back from offline, unless configured to do so. Ideally, clients detect unavailable servers with HTTP/2 ping and failover to other nodes with clear error messages.
-
-*Effectiveness*. Clients should operate effectively with minimum resources: previous TCP connections should be [gracefully closed](https://github.com/etcd-io/etcd/issues/9212) after endpoint switch. Failover mechanism should effectively predict the next replica to connect, without wastefully retrying on failed nodes.
-
-*Portability*. Official client should be clearly documented and its implementation be applicable to other language bindings. Error handling between different language bindings should be consistent. Since etcd is fully committed to gRPC, implementation should be closely aligned with gRPC long-term design goals (e.g. pluggable retry policy should be compatible with [gRPC retry](https://github.com/grpc/proposal/blob/master/A6-client-retries.md)). Upgrades between two client versions should be non-disruptive.
-
-
-Client Overview
-===============
-
-etcd client implements the following components:
-
-* balancer that establishes gRPC connections to an etcd cluster,
-* API client that sends RPCs to an etcd server, and
-* error handler that decides whether to retry a failed request or switch endpoints.
-
-Languages may differ in how to establish an initial connection (e.g. configure TLS), how to encode and send Protocol Buffer messages to server, how to handle stream RPCs, and so on. However, errors returned from etcd server will be the same. So should be error handling and retry policy.
-
-For example, etcd server may return `"rpc error: code = Unavailable desc = etcdserver: request timed out"`, which is transient error that expects retries. Or return `rpc error: code = InvalidArgument desc = etcdserver: key is not provided`, which means request was invalid and should not be retried. Go client can parse errors with `google.golang.org/grpc/status.FromError`, and Java client with `io.grpc.Status.fromThrowable`.
-
-
-clientv3-grpc1.0: Balancer Overview
------------------------------------
-
-`clientv3-grpc1.0` maintains multiple TCP connections when configured with multiple etcd endpoints. Then pick one address and use it to send all client requests. The pinned address is maintained until the client object is closed (see *Figure 1*). When the client receives an error, it randomly picks another and retries.
-
-![client-balancer-figure-01.png](img/client-balancer-figure-01.png)
-
-
-clientv3-grpc1.0: Balancer Limitation
--------------------------------------
-
-`clientv3-grpc1.0` opening multiple TCP connections may provide faster balancer failover but requires more resources. The balancer does not understand node’s health status or cluster membership. So, it is possible that balancer gets stuck with one failed or partitioned node.
-
-
-clientv3-grpc1.7: Balancer Overview
-------------------------------------
-
-`clientv3-grpc1.7` maintains only one TCP connection to a chosen etcd server. When given multiple cluster endpoints, a client first tries to connect to them all. As soon as one connection is up, balancer pins the address, closing others (see *Figure 2*). The pinned address is to be maintained until the client object is closed. An error, from server or client network fault, is sent to client error handler (see *Figure 3*).
-
-![client-balancer-figure-02.png](img/client-balancer-figure-02.png)
-
-![client-balancer-figure-03.png](img/client-balancer-figure-03.png)
-
-The client error handler takes an error from gRPC server, and decides whether to retry on the same endpoint, or to switch to other addresses, based on the error code and message (see *Figure 4* and *Figure 5*).
-
-![client-balancer-figure-04.png](img/client-balancer-figure-04.png)
-
-![client-balancer-figure-05.png](img/client-balancer-figure-05.png)
-
-Stream RPCs, such as Watch and KeepAlive, are often requested with no timeouts. Instead, client can send periodic HTTP/2 pings to check the status of a pinned endpoint; if the server does not respond to the ping, balancer switches to other endpoints (see *Figure 6*).
-
-![client-balancer-figure-06.png](img/client-balancer-figure-06.png)
-
-
-clientv3-grpc1.7: Balancer Limitation
--------------------------------------
-
-`clientv3-grpc1.7` balancer sends HTTP/2 keepalives to detect disconnects from streaming requests. It is a simple gRPC server ping mechanism and does not reason about cluster membership, thus unable to detect network partitions. Since partitioned gRPC server can still respond to client pings, balancer may get stuck with a partitioned node. Ideally, keepalive ping detects partition and triggers endpoint switch, before request time-out (see [etcd#8673](https://github.com/etcd-io/etcd/issues/8673) and *Figure 7*).
-
-![client-balancer-figure-07.png](img/client-balancer-figure-07.png)
-
-`clientv3-grpc1.7` balancer maintains a list of unhealthy endpoints. Disconnected addresses are added to “unhealthy” list, and considered unavailable until after wait duration, which is hard coded as dial timeout with default value 5-second. Balancer can have false positives on which endpoints are unhealthy. For instance, endpoint A may come back right after being blacklisted, but still unusable for next 5 seconds (see *Figure 8*).
-
-`clientv3-grpc1.0` suffered the same problems above.
-
-![client-balancer-figure-08.png](img/client-balancer-figure-08.png)
-
-Upstream gRPC Go had already migrated to new balancer interface. For example, `clientv3-grpc1.7` underlying balancer implementation uses new gRPC balancer and tries to be consistent with old balancer behaviors. While its compatibility has been maintained reasonably well, etcd client still [suffered from subtle breaking changes](https://github.com/grpc/grpc-go/issues/1649). Furthermore, gRPC maintainer recommends to [not rely on the old balancer interface](https://github.com/grpc/grpc-go/issues/1942#issuecomment-375368665). In general, to get better support from upstream, it is best to be in sync with latest gRPC releases. And new features, such as retry policy, may not be backported to gRPC 1.7 branch. Thus, both etcd server and client must migrate to latest gRPC versions.
-
-
-clientv3-grpc1.23: Balancer Overview
-------------------------------------
-
-`clientv3-grpc1.7` is so tightly coupled with old gRPC interface, that every single gRPC dependency upgrade broke client behavior. Majority of development and debugging efforts were devoted to fixing those client behavior changes. As a result, its implementation has become overly complicated with bad assumptions on server connectivities.
-
-The primary goal of `clientv3-grpc1.23` is to simplify balancer failover logic; rather than maintaining a list of unhealthy endpoints, which may be stale, simply roundrobin to the next endpoint whenever client gets disconnected from the current endpoint. It does not assume endpoint status. Thus, no more complicated status tracking is needed (see *Figure 8* and above). Upgrading to `clientv3-grpc1.23` should be no issue; all changes were internal while keeping all the backward compatibilities.
-
-Internally, when given multiple endpoints, `clientv3-grpc1.23` creates multiple sub-connections (one sub-connection per each endpoint), while `clientv3-grpc1.7` creates only one connection to a pinned endpoint (see *Figure 9*). For instance, in 5-node cluster, `clientv3-grpc1.23` balancer would require 5 TCP connections, while `clientv3-grpc1.7` only requires one. By preserving the pool of TCP connections, `clientv3-grpc1.23` may consume more resources but provide more flexible load balancer with better failover performance. The default balancing policy is round robin but can be easily extended to support other types of balancers (e.g. power of two, pick leader, etc.). `clientv3-grpc1.23` uses gRPC resolver group and implements balancer picker policy, in order to delegate complex balancing work to upstream gRPC. On the other hand, `clientv3-grpc1.7` manually handles each gRPC connection and balancer failover, which complicates the implementation. `clientv3-grpc1.23` implements retry in the gRPC interceptor chain that automatically handles gRPC internal errors and enables more advanced retry policies like backoff, while `clientv3-grpc1.7` manually interprets gRPC errors for retries.
-
-![client-balancer-figure-09.png](img/client-balancer-figure-09.png)
-
-
-clientv3-grpc1.23: Balancer Limitation
---------------------------------------
-
-Improvements can be made by caching the status of each endpoint. For instance, balancer can ping each server in advance to maintain a list of healthy candidates, and use this information when doing round-robin. Or when disconnected, balancer can prioritize healthy endpoints. This may complicate the balancer implementation, thus can be addressed in later versions.
-
-Client-side keepalive ping still does not reason about network partitions. Streaming request may get stuck with a partitioned node. Advanced health checking service need to be implemented to understand the cluster membership (see [etcd#8673](https://github.com/etcd-io/etcd/issues/8673) for more detail).
-
-![client-balancer-figure-07.png](img/client-balancer-figure-07.png)
-
-Currently, retry logic is handled manually as an interceptor. This may be simplified via [official gRPC retries](https://github.com/grpc/proposal/blob/master/A6-client-retries.md).
diff --git a/etcd-fix/Documentation/learning/design-learner.md b/etcd-fix/Documentation/learning/design-learner.md
deleted file mode 100644
index 6f5b46f..0000000
--- a/etcd-fix/Documentation/learning/design-learner.md
+++ /dev/null
@@ -1,128 +0,0 @@
----
-title: etcd learner design
----
-
-etcd Learner
-============
-
-*Gyuho Lee (github.com/gyuho, Amazon Web Services, Inc.), Joe Betz (github.com/jpbetz, Google Inc.)*
-
-
-Background
-==========
-
-Membership reconfiguration has been one of the biggest operational challenges. Let’s review common challenges.
-
-### 1. New Cluster member overloads Leader
-A newly joined etcd member starts with no data, thus demanding more updates from leader until it catches up with leader’s logs. Then leader’s network is more likely to be overloaded, blocking or dropping leader heartbeats to followers. In such case, a follower may election-timeout to start a new leader election. That is, a cluster with a new member is more vulnerable to leader election. Both leader election and the subsequent update propagation to the new member are prone to causing periods of cluster unavailability (see *Figure 1*).
-
-![server-learner-figure-01](img/server-learner-figure-01.png)
-
-### 2. Network Partitions scenarios
-What if network partition happens? It depends on leader partition. If the leader still maintains the active quorum, the cluster would continue to operate (see *Figure 2*).
-
-![server-learner-figure-02](img/server-learner-figure-02.png)
-
-#### 2.1 Leader isolation
-What if the leader becomes isolated from the rest of the cluster? Leader monitors progress of each follower. When leader loses connectivity from the quorum, it reverts back to follower which will affect the cluster availability (see *Figure 3*).
-
-![server-learner-figure-03](img/server-learner-figure-03.png)
-
-When a new node is added to 3 node cluster, the cluster size becomes 4 and the quorum size becomes 3. What if a new node had joined the cluster, and then network partition happens? It depends on which partition the new member gets located after partition.
-
-#### 2.2 Cluster Split 3+1
-If the new node happens to be located in the same partition as leader’s, the leader still maintains the active quorum of 3. No leadership election happens, and no cluster availability gets affected (see *Figure 4*).
-
-![server-learner-figure-04](img/server-learner-figure-04.png)
-
-#### 2.3 Cluster Split 2+2
-If the cluster is 2-and-2 partitioned, then neither of partition maintains the quorum of 3. In this case, leadership election happens (see *Figure 5*).
-
-![server-learner-figure-05](img/server-learner-figure-05.png)
-
-#### 2.4 Quorum Lost
-What if network partition happens first, and then a new member gets added? A partitioned 3-node cluster already has one disconnected follower. When a new member is added, the quorum changes from 2 to 3. Now, this cluster has only 2 active nodes out 4, thus losing quorum and starting a new leadership election (see *Figure 6*).
-
-![server-learner-figure-06](img/server-learner-figure-06.png)
-
-Since member add operation can change the size of quorum, it is always recommended to “member remove” first to replace an unhealthy node.
-
-Adding a new member to a 1-node cluster changes the quorum size to 2, immediately causing a leader election when the previous leader finds out quorum is not active. This is because “member add” operation is a 2-step process where user needs to apply “member add” command first, and then starts the new node process (see *Figure 7*).
-
-![server-learner-figure-07](img/server-learner-figure-07.png)
-
-### 3. Cluster Misconfigurations
-An even worse case is when an added member is misconfigured. Membership reconfiguration is a two-step process: “etcdctl member add” and starting an etcd server process with the given peer URL. That is, “member add” command is applied regardless of URL, even when the URL value is invalid. If the first step is applied with invalid URLs, the second step cannot even start the new etcd. Once the cluster loses quorum, there is no way to revert the membership change (see *Figure 8*).
-
-![server-learner-figure-08](img/server-learner-figure-08.png)
-
-Same applies to a multi-node cluster. For example, the cluster has two members down (one is failed, the other is misconfigured) and two members up, but now it requires at least 3 votes to change the cluster membership (see *Figure 9*).
-
-![server-learner-figure-09](img/server-learner-figure-09.png)
-
-As seen above, a simple misconfiguration can fail the whole cluster into an inoperative state. In such case, an operator need manually recreate the cluster with `etcd --force-new-cluster` flag. As etcd has become a mission-critical service for Kubernetes, even the slightest outage may have significant impact on users. What can we better to make etcd such operations easier? Among other things, leader election is most critical to cluster availability: Can we make membership reconfiguration less disruptive by not changing the size of quorum? Can a new node be idle, only requesting the minimum updates from leader, until it catches up? Can membership misconfiguration be always reversible and handled in a more secure way (wrong member add command run should never fail the cluster)? Should an user worry about network topology when adding a new member? Can member add API work regardless of the location of nodes and ongoing network partitions?
-
-Raft Learner
-============
-
-In order to mitigate such availability gaps in the previous section, [Raft §4.2.1](https://github.com/ongardie/dissertation/blob/master/stanford.pdf) introduces a new node state “Learner”, which joins the cluster as a **non-voting member** until it catches up to leader’s logs.
-
-Features in v3.4
-----------------
-
-An operator should do the minimum amount of work possible to add a new learner node. `member add --learner` command to add a new learner, which joins cluster as a non-voting member but still receives all data from leader (see *Figure 10*).
-
-![server-learner-figure-10](img/server-learner-figure-10.png)
-
-When a learner has caught up with leader’s progress, the learner can be promoted to a voting member using `member promote` API, which then counts towards the quorum (see *Figure 11*).
-
-![server-learner-figure-11](img/server-learner-figure-11.png)
-
-etcd server validates promote request to ensure its operational safety. Only after its log has caught up to leader’s can learner be promoted to a voting member (see *Figure 12*).
-
-![server-learner-figure-12](img/server-learner-figure-12.png)
-
-Learner only serves as a standby node until promoted: Leadership cannot be transferred to learner. Learner rejects client reads and writes (client balancer should not route requests to learner). Which means learner does not need issue Read Index requests to leader. Such limitation simplifies the initial learner implementation in v3.4 release (see *Figure 13*).
-
-![server-learner-figure-13](img/server-learner-figure-13.png)
-
-In addition, etcd limits the total number of learners that a cluster can have, and avoids overloading the leader with log replication. Learner never promotes itself. While etcd provides learner status information and safety checks, cluster operator must make the final decision whether to promote learner or not.
-
-Features in v3.5
-----------------
-
-*Make learner state only and default*: Defaulting a new member state to learner will greatly improve membership reconfiguration safety, because learner does not change the size of quorum. Misconfiguration will always be reversible without losing the quorum.
-
-*Make voting-member promotion fully automatic*: Once a learner catches up to leader’s logs, a cluster can automatically promote the learner. etcd requires certain thresholds to be defined by the user, and once the requirements are satisfied, learner promotes itself to a voting member. From a user’s perspective, “member add” command would work the same way as today but with greater safety provided by learner feature.
-
-*Make learner standby failover node*: A learner joins as a standby node, and gets automatically promoted when the cluster availability is affected.
-
-*Make learner read-only*: A learner can serve as a read-only node that never gets promoted. In a weak consistency mode, learner only receives data from leader and never process writes. Serving reads locally without consensus overhead would greatly decrease the workloads to leader but may serve stale data. In a strong consistency mode, learner requests read index from leader to serve latest data, but still rejects writes.
-
-Learner vs. Mirror Maker
-========================
-
-etcd implements “mirror maker” using watch API to continuously relay key creates and updates to a separate cluster. Mirroring usually has low latency overhead once it completes initial synchronization. Learner and mirroring overlap in that both can be used to replicate existing data for read-only. However, mirroring does not guarantee linearizability. During network disconnects, previous key-values might have been discarded, and clients are expected to verify watch responses for correct ordering. Thus, there is no ordering guarantee in mirror. Use mirror for minimum latency (e.g. cross data center) at the costs of consistency. Use learner to retain all historical data and its ordering.
-
-Appendix: Learner Implementation in v3.4
-========================================
-
-*Expose "Learner" node type to "MemberAdd" API.*
-
-etcd client adds a flag to “MemberAdd” API for learner node. And etcd server handler applies membership change entry with `pb.ConfChangeAddLearnerNode` type. Once the command has been applied, a server joins the cluster with `etcd --initial-cluster-state=existing` flag. This learner node can neither vote nor count as quorum.
-
-etcd server must not transfer leadership to learner, since it may still lag behind and does not count as quorum. etcd server limits the number of learners that cluster can have to one: the more learners we have, the more data the leader has to propagate. Clients may talk to learner node, but learner rejects all requests other than serializable read and member status API. This is for simplicity of initial implementation. In the future, learner can be extended as a read-only server that continuously mirrors cluster data. Client balancer must provide helper function to exclude learner node endpoint. Otherwise, request sent to learner may fail. Client sync member call should factor into learner node type. So should client endpoints update call.
-
-`MemberList` and `MemberStatus` responses should indicate which node is learner.
-
-*Add "MemberPromote" API.*
-
-Internally in Raft, second `MemberAdd` call to learner node promotes it to a voting member. Leader maintains the progress of each follower and learner. If learner has not completed its snapshot message, reject promote request. Only accept promote request if and only if: The learner node is in a healthy state. The learner is in sync with leader or the delta is within the threshold (e.g. the number of entries to replicate to learner is less than 1/10 of snapshot count, which means it is less likely that even after promotion leader would not need send snapshot to the learner). All these logic are hard-coded in `etcdserver` package and not configurable.
-
-Reference
-=========
-
-- Original github issue: [etcd#9161](https://github.com/etcd-io/etcd/issues/9161)
-- Use case: [etcd#3715](https://github.com/etcd-io/etcd/issues/3715)
-- Use case: [etcd#8888](https://github.com/etcd-io/etcd/issues/8888)
-- Use case: [etcd#10114](https://github.com/etcd-io/etcd/issues/10114)
diff --git a/etcd-fix/Documentation/learning/glossary.md b/etcd-fix/Documentation/learning/glossary.md
deleted file mode 100644
index 9e7fd36..0000000
--- a/etcd-fix/Documentation/learning/glossary.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-title: Glossary
----
-
-This document defines the various terms used in etcd documentation, command line and source code.
-
-## Alarm
-
-The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.
-
-## Authentication
-
-Authentication manages user access permissions for etcd resources.
-
-## Client
-
-A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.
-
-## Cluster
-
-Cluster consists of several members.
-
-The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.
-
-## Compaction
-
-Compaction discards all etcd event history and superseded keys prior to a given revision. It is used to reclaim storage space in the etcd backend database.
-
-## Election
-
-The etcd cluster holds elections among its members to choose a leader as part of the raft consensus protocol.
-
-## Endpoint
-
-A URL pointing to an etcd service or resource.
-
-## Key
-
-A user-defined identifier for storing and retrieving user-defined values in etcd.
-
-## Key range
-
-A set of keys containing either an individual key, a lexical interval for all x such that a < x <= b, or all keys greater than a given key.
-
-## Keyspace
-
-The set of all keys in an etcd cluster.
-
-## Lease
-
-A short-lived renewable contract that deletes keys associated with it on its expiry.
-
-## Member
-
-A logical etcd server that participates in serving an etcd cluster.
-
-## Modification Revision
-
-The first revision to hold the last write to a given key.
-
-## Peer
-
-Peer is another member of the same cluster.
-
-## Proposal
-
-A proposal is a request (for example a write request, a configuration change request) that needs to go through raft protocol.
-
-## Quorum
-
-The number of active members needed for consensus to modify the cluster state. etcd requires a member majority to reach quorum.
-
-## Revision
-
-A 64-bit cluster-wide counter that starts at 1 and is incremented each time the keyspace is modified.
-
-## Role
-
-A unit of permissions over a set of key ranges which may be granted to a set of users for access control.
-
-## Snapshot
-
-A point-in-time backup of the etcd cluster state.
-
-## Store
-
-The physical storage backing the cluster keyspace.
-
-## Transaction
-
-An atomically executed set of operations. All modified keys in a transaction share the same modification revision.
-
-## Key Version
-
-The number of writes to a key since it was created, starting at 1. The version of a nonexistent or deleted key is 0.
-
-## Watcher
-
-A client opens a watcher to observe updates on a given key range.
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-01.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-01.png
deleted file mode 100644
index 702d80f..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-01.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-02.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-02.png
deleted file mode 100644
index 4c5603d..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-02.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-03.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-03.png
deleted file mode 100644
index 55e785d..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-03.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-04.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-04.png
deleted file mode 100644
index b15fb13..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-04.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-05.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-05.png
deleted file mode 100644
index f3ec7de..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-05.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-06.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-06.png
deleted file mode 100644
index 1706f86..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-06.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-07.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-07.png
deleted file mode 100644
index 9549c4b..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-07.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-08.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-08.png
deleted file mode 100644
index c3c5d32..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-08.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/client-balancer-figure-09.png b/etcd-fix/Documentation/learning/img/client-balancer-figure-09.png
deleted file mode 100644
index 17ede40..0000000
Binary files a/etcd-fix/Documentation/learning/img/client-balancer-figure-09.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/etcd.png b/etcd-fix/Documentation/learning/img/etcd.png
deleted file mode 100644
index 8bf9294..0000000
Binary files a/etcd-fix/Documentation/learning/img/etcd.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-01.png b/etcd-fix/Documentation/learning/img/server-learner-figure-01.png
deleted file mode 100644
index be2e93f..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-01.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-02.png b/etcd-fix/Documentation/learning/img/server-learner-figure-02.png
deleted file mode 100644
index a69c305..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-02.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-03.png b/etcd-fix/Documentation/learning/img/server-learner-figure-03.png
deleted file mode 100644
index ea84eaa..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-03.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-04.png b/etcd-fix/Documentation/learning/img/server-learner-figure-04.png
deleted file mode 100644
index f29439e..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-04.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-05.png b/etcd-fix/Documentation/learning/img/server-learner-figure-05.png
deleted file mode 100644
index 71e6f4f..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-05.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-06.png b/etcd-fix/Documentation/learning/img/server-learner-figure-06.png
deleted file mode 100644
index 197c343..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-06.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-07.png b/etcd-fix/Documentation/learning/img/server-learner-figure-07.png
deleted file mode 100644
index 53707dd..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-07.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-08.png b/etcd-fix/Documentation/learning/img/server-learner-figure-08.png
deleted file mode 100644
index a1e63ba..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-08.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-09.png b/etcd-fix/Documentation/learning/img/server-learner-figure-09.png
deleted file mode 100644
index 337cad4..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-09.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-10.png b/etcd-fix/Documentation/learning/img/server-learner-figure-10.png
deleted file mode 100644
index 218ad2b..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-10.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-11.png b/etcd-fix/Documentation/learning/img/server-learner-figure-11.png
deleted file mode 100644
index 9803499..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-11.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-12.png b/etcd-fix/Documentation/learning/img/server-learner-figure-12.png
deleted file mode 100644
index 50a27ad..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-12.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/img/server-learner-figure-13.png b/etcd-fix/Documentation/learning/img/server-learner-figure-13.png
deleted file mode 100644
index 0ea898d..0000000
Binary files a/etcd-fix/Documentation/learning/img/server-learner-figure-13.png and /dev/null differ
diff --git a/etcd-fix/Documentation/learning/lock/README.md b/etcd-fix/Documentation/learning/lock/README.md
deleted file mode 100644
index a1113c4..0000000
--- a/etcd-fix/Documentation/learning/lock/README.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# What is this?
-This directory provides an executable example of the scenarios described in [the article by Martin Kleppmann][fencing].
-
-Generally speaking, a lease-based lock service cannot provide mutual exclusion to processes. This is because such a lease mechanism depends on the physical clock of both the lock service and client processes. Many factors (e.g. stop-the-world GC pause of a language runtime) can cause false expiration of a granted lease as depicted in the below figure: ![unsafe lock][unsafe-lock]
-
-As discussed in [notes on the usage of lock and lease][why.md], such a problem can be solved with a technique called version number validation or fencing tokens. With this technique a shared resource (storage in the figures) needs to validate requests from clients based on their tokens like this: ![fencing tokens][fencing-tokens]
-
-This directory contains two programs: `client` and `storage`. With `etcd`, you can reproduce the expired lease problem of distributed locking and a simple example solution of the validation technique which can avoid incorrect access from a client with an expired lease.
-
-`storage` works as a very simple key value in-memory store which is accessible through HTTP and a custom JSON protocol. `client` works as client processes which tries to write a key/value to `storage` with coordination of etcd locking.
-
-## How to build
-
-For building `client` and `storage`, just execute `go build` in each directory.
-
-## How to try
-
-At first you need to start an etcd cluster, which works as lock service in the figures. On top of the etcd source directory, execute commands like below:
-```
-$ ./build # build etcd
-$ goreman start
-```
-
-Then run `storage` command in `storage` directory:
-```
-$ ./storage
-```
-
-Now client processes ("Client 1" and "Client 2" in the figures) can be started. At first, execute below command for starting a client process which corresponds to "Client 1":
-```
-$ GODEBUG=gcstoptheworld=2 ./client 1
-```
-It will show an output like this:
-```
-client 1 starts
-creted etcd client
-acquired lock, version: 1029195466614598192
-took 6.771998255s for allocation, took 36.217205ms for GC
-emulated stop the world GC, make sure the /lock/* key disappeared and hit any key after executing client 2:
-```
-The process causes stop the world GC pause for making lease expiration intentionally and waits a keyboard input. Now another client process can be started like this:
-```
-$ ./client 2
-client 2 starts
-creted etcd client
-acquired lock, version: 4703569812595502727
-this is client 2, continuing
-```
-If things go well the second client process invoked as `./client 2` finishes soon. It successfully writes a key to `storage` process. After checking this, please hit any key for `./client 1` and resume the process. It will show an output like below:
-```
-resuming client 1
-failed to write to storage: error: given version (4703569812595502721) differ from the existing version (4703569812595502727)
-```
-
-### Notes on the parameters related to stop the world GC pause
-`client` program includes two constant values: `nrGarbageObjects` and `sessionTTL`. These parameters are configured for causing lease expiration with stop the world GC pause of go runtime. They heavily rely on resources of a machine for executing the example. If lease expiration doesn't happen on your machine, update these parameters and try again.
-
-[why.md]: ../why.md#Notes-on-the-usage-of-lock-and-lease
-[fencing]: https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
-[unsafe-lock]: https://martin.kleppmann.com/2016/02/unsafe-lock.png
-[fencing-tokens]: https://martin.kleppmann.com/2016/02/fencing-tokens.png
diff --git a/etcd-fix/Documentation/learning/lock/client/.gitignore b/etcd-fix/Documentation/learning/lock/client/.gitignore
deleted file mode 100644
index 2a11f8b..0000000
--- a/etcd-fix/Documentation/learning/lock/client/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-client
\ No newline at end of file
diff --git a/etcd-fix/Documentation/learning/lock/client/client.go b/etcd-fix/Documentation/learning/lock/client/client.go
deleted file mode 100644
index b5c42f0..0000000
--- a/etcd-fix/Documentation/learning/lock/client/client.go
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 2020 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// An example distributed locking with fencing in the case of etcd
-// Based on https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
-
-// Important usage:
-// If you are invoking this program as client 1, you need to configure GODEBUG env var like below:
-// GODEBUG=gcstoptheworld=2 ./client 1
-
-package main
-
-import (
- "bufio"
- "bytes"
- "encoding/json"
- "fmt"
- "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/client/v3/concurrency"
- "io/ioutil"
- "net/http"
- "os"
- "runtime"
- "strconv"
- "time"
-)
-
-type node struct {
- next *node
-}
-
-const (
- // These const values might be need adjustment.
- nrGarbageObjects = 100 * 1000 * 1000
- sessionTTL = 1
-)
-
-func stopTheWorld() {
- n := new(node)
- root := n
- allocStart := time.Now()
- for i := 0; i < nrGarbageObjects; i++ {
- n.next = new(node)
- n = n.next
- }
- func(n *node) {}(root) // dummy usage of root for removing a compiler error
- root = nil
- allocDur := time.Since(allocStart)
-
- gcStart := time.Now()
- runtime.GC()
- gcDur := time.Since(gcStart)
- fmt.Printf("took %v for allocation, took %v for GC\n", allocDur, gcDur)
-}
-
-type request struct {
- Op string `json:"op"`
- Key string `json:"key"`
- Val string `json:"val"`
- Version int64 `json:"version"`
-}
-
-type response struct {
- Val string `json:"val"`
- Version int64 `json:"version"`
- Err string `json:"err"`
-}
-
-func write(key string, value string, version int64) error {
- req := request{
- Op: "write",
- Key: key,
- Val: value,
- Version: version,
- }
-
- reqBytes, err := json.Marshal(&req)
- if err != nil {
- fmt.Printf("failed to marshal request: %s\n", err)
- os.Exit(1)
- }
-
- httpResp, err := http.Post("http://localhost:8080", "application/json", bytes.NewReader(reqBytes))
- if err != nil {
- fmt.Printf("failed to send a request to storage: %s\n", err)
- os.Exit(1)
- }
-
- respBytes, err := ioutil.ReadAll(httpResp.Body)
- if err != nil {
- fmt.Printf("failed to read request body: %s\n", err)
- os.Exit(1)
- }
-
- resp := new(response)
- err = json.Unmarshal(respBytes, resp)
- if err != nil {
- fmt.Printf("failed to unmarshal response json: %s\n", err)
- os.Exit(1)
- }
-
- if resp.Err != "" {
- return fmt.Errorf("error: %s", resp.Err)
- }
-
- return nil
-}
-
-func read(key string) (string, int64) {
- req := request{
- Op: "read",
- Key: key,
- }
-
- reqBytes, err := json.Marshal(&req)
- if err != nil {
- fmt.Printf("failed to marshal request: %s\n", err)
- os.Exit(1)
- }
-
- httpResp, err := http.Post("http://localhost:8080", "application/json", bytes.NewReader(reqBytes))
- if err != nil {
- fmt.Printf("failed to send a request to storage: %s\n", err)
- os.Exit(1)
- }
-
- respBytes, err := ioutil.ReadAll(httpResp.Body)
- if err != nil {
- fmt.Printf("failed to read request body: %s\n", err)
- os.Exit(1)
- }
-
- resp := new(response)
- err = json.Unmarshal(respBytes, resp)
- if err != nil {
- fmt.Printf("failed to unmarshal response json: %s\n", err)
- os.Exit(1)
- }
-
- return resp.Val, resp.Version
-}
-
-func main() {
- if len(os.Args) != 2 {
- fmt.Printf("usage: %s <1 or 2>\n", os.Args[0])
- return
- }
-
- mode, err := strconv.Atoi(os.Args[1])
- if err != nil || mode != 1 && mode != 2 {
- fmt.Printf("mode should be 1 or 2 (given value is %s)\n", os.Args[1])
- return
- }
-
- fmt.Printf("client %d starts\n", mode)
-
- client, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"http://127.0.0.1:2379", "http://127.0.0.1:22379", "http://127.0.0.1:32379"},
- })
- if err != nil {
- fmt.Printf("failed to create an etcd client: %s\n", err)
- os.Exit(1)
- }
-
- fmt.Printf("creted etcd client\n")
-
- session, err := concurrency.NewSession(client, concurrency.WithTTL(sessionTTL))
- if err != nil {
- fmt.Printf("failed to create a session: %s\n", err)
- os.Exit(1)
- }
-
- locker := concurrency.NewLocker(session, "/lock")
- locker.Lock()
- defer locker.Unlock()
- version := session.Lease()
- fmt.Printf("acquired lock, version: %d\n", version)
-
- if mode == 1 {
- stopTheWorld()
- fmt.Printf("emulated stop the world GC, make sure the /lock/* key disappeared and hit any key after executing client 2: ")
- reader := bufio.NewReader(os.Stdin)
- reader.ReadByte()
- fmt.Printf("resuming client 1\n")
- } else {
- fmt.Printf("this is client 2, continuing\n")
- }
-
- err = write("key0", fmt.Sprintf("value from client %d", mode), int64(version))
- if err != nil {
- fmt.Printf("failed to write to storage: %s\n", err) // client 1 should show this message
- } else {
- fmt.Printf("successfully write a key to storage\n")
- }
-}
diff --git a/etcd-fix/Documentation/learning/lock/storage/.gitignore b/etcd-fix/Documentation/learning/lock/storage/.gitignore
deleted file mode 100644
index 5d252d7..0000000
--- a/etcd-fix/Documentation/learning/lock/storage/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-storage
\ No newline at end of file
diff --git a/etcd-fix/Documentation/learning/lock/storage/storage.go b/etcd-fix/Documentation/learning/lock/storage/storage.go
deleted file mode 100644
index 66ed6a7..0000000
--- a/etcd-fix/Documentation/learning/lock/storage/storage.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2020 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "os"
- "strings"
-)
-
-type value struct {
- val string
- version int64
-}
-
-var data = make(map[string]*value)
-
-type request struct {
- Op string `json:"op"`
- Key string `json:"key"`
- Val string `json:"val"`
- Version int64 `json:"version"`
-}
-
-type response struct {
- Val string `json:"val"`
- Version int64 `json:"version"`
- Err string `json:"err"`
-}
-
-func writeResponse(resp response, w http.ResponseWriter) {
- wBytes, err := json.Marshal(resp)
- if err != nil {
- fmt.Printf("failed to marshal json: %s\n", err)
- os.Exit(1)
- }
- _, err = w.Write(wBytes)
- if err != nil {
- fmt.Printf("failed to write a response: %s\n", err)
- os.Exit(1)
- }
-}
-
-func handler(w http.ResponseWriter, r *http.Request) {
- rBytes, err := ioutil.ReadAll(r.Body)
- if err != nil {
- fmt.Printf("failed to read http request: %s\n", err)
- os.Exit(1)
- }
-
- var req request
- err = json.Unmarshal(rBytes, &req)
- if err != nil {
- fmt.Printf("failed to unmarshal json: %s\n", err)
- os.Exit(1)
- }
-
- if strings.Compare(req.Op, "read") == 0 {
- if val, ok := data[req.Key]; ok {
- writeResponse(response{val.val, val.version, ""}, w)
- } else {
- writeResponse(response{"", -1, "key not found"}, w)
- }
- } else if strings.Compare(req.Op, "write") == 0 {
- if val, ok := data[req.Key]; ok {
- if req.Version != val.version {
- writeResponse(response{"", -1, fmt.Sprintf("given version (%d) is different from the existing version (%d)", req.Version, val.version)}, w)
- } else {
- data[req.Key].val = req.Val
- data[req.Key].version = req.Version
- writeResponse(response{req.Val, req.Version, ""}, w)
- }
- } else {
- data[req.Key] = &value{req.Val, req.Version}
- writeResponse(response{req.Val, req.Version, ""}, w)
- }
- } else {
- fmt.Printf("unknown op: %s\n", req.Op)
- return
- }
-}
-
-func main() {
- http.HandleFunc("/", handler)
- http.ListenAndServe(":8080", nil)
-}
diff --git a/etcd-fix/Documentation/learning/why.md b/etcd-fix/Documentation/learning/why.md
deleted file mode 100644
index dfa0fb7..0000000
--- a/etcd-fix/Documentation/learning/why.md
+++ /dev/null
@@ -1,145 +0,0 @@
----
-title: etcd versus other key-value stores
----
-
-The name "etcd" originated from two ideas, the unix "/etc" folder and "d"istributed systems. The "/etc" folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a "d"istributed "/etc" is "etcd".
-
-etcd is designed as a general substrate for large scale distributed systems. These are systems that will never tolerate split-brain operation and are willing to sacrifice availability to achieve this end. etcd stores metadata in a consistent and fault-tolerant way. An etcd cluster is meant to provide key-value storage with best of class stability, reliability, scalability and performance.
-
-Distributed systems use etcd as a consistent key-value store for configuration management, service discovery, and coordinating distributed work. Many [organizations][production-users] use etcd to implement production systems such as container schedulers, service discovery services, and distributed data storage. Common distributed patterns using etcd include [leader election][etcd-etcdctl-elect], [distributed locks][etcd-etcdctl-lock], and monitoring machine liveness.
-
-## Use cases
-
-- Container Linux by CoreOS: Applications running on [Container Linux][container-linux] get automatic, zero-downtime Linux kernel updates. Container Linux uses [locksmith] to coordinate updates. Locksmith implements a distributed semaphore over etcd to ensure only a subset of a cluster is rebooting at any given time.
-- [Kubernetes][kubernetes] stores configuration data into etcd for service discovery and cluster management; etcd's consistency is crucial for correctly scheduling and operating services. The Kubernetes API server persists cluster state into etcd. It uses etcd's watch API to monitor the cluster and roll out critical configuration changes.
-
-## Comparison chart
-
-Perhaps etcd already seems like a good fit, but as with all technological decisions, proceed with caution. Please note this documentation is written by the etcd team. Although the ideal is a disinterested comparison of technology and features, the authors’ expertise and biases obviously favor etcd. Use only as directed.
-
-The table below is a handy quick reference for spotting the differences among etcd and its most popular alternatives at a glance. Further commentary and details for each column are in the sections following the table.
-
-| | etcd | ZooKeeper | Consul | NewSQL (Cloud Spanner, CockroachDB, TiDB) |
-| --- | --- | --- | --- | --- |
-| Concurrency Primitives | [Lock RPCs][etcd-v3lock], [Election RPCs][etcd-v3election], [command line locks][etcd-etcdctl-lock], [command line elections][etcd-etcdctl-elect], [recipes][etcd-recipe] in go | External [curator recipes][curator] in Java | [Native lock API][consul-lock] | [Rare][newsql-leader], if any |
-| Linearizable Reads | [Yes][etcd-linread] | No | [Yes][consul-linread] | Sometimes |
-| Multi-version Concurrency Control | [Yes][etcd-mvcc] | No | No | Sometimes |
-| Transactions | [Field compares, Read, Write][etcd-txn] | [Version checks, Write][zk-txn] | [Field compare, Lock, Read, Write][consul-txn] | SQL-style |
-| Change Notification | [Historical and current key intervals][etcd-watch] | [Current keys and directories][zk-watch] | [Current keys and prefixes][consul-watch] | Triggers (sometimes) |
-| User permissions | [Role based][etcd-rbac] | [ACLs][zk-acl] | [ACLs][consul-acl] | Varies (per-table [GRANT][cockroach-grant], per-database [roles][spanner-roles]) |
-| HTTP/JSON API | [Yes][etcd-json] | No | [Yes][consul-json] | Rarely |
-| Membership Reconfiguration | [Yes][etcd-reconfig] | [>3.5.0][zk-reconfig] | [Yes][consul-reconfig] | Yes |
-| Maximum reliable database size | Several gigabytes | Hundreds of megabytes (sometimes several gigabytes) | Hundreds of MBs | Terabytes+ |
-| Minimum read linearization latency | Network RTT | No read linearization | RTT + fsync | Clock barriers (atomic, NTP) |
-
-### ZooKeeper
-
-ZooKeeper solves the same problem as etcd: distributed system coordination and metadata storage. However, etcd has the luxury of hindsight taken from engineering and operational experience with ZooKeeper’s design and implementation. The lessons learned from Zookeeper certainly informed etcd’s design, helping it support large scale systems like Kubernetes. The improvements etcd made over Zookeeper include:
-
-* Dynamic cluster membership reconfiguration
-* Stable read/write under high load
-* A multi-version concurrency control data model
-* Reliable key monitoring which never silently drop events
-* Lease primitives decoupling connections from sessions
-* APIs for safe distributed shared locks
-
-Furthermore, etcd supports a wide range of languages and frameworks out of the box. Whereas Zookeeper has its own custom Jute RPC protocol, which is totally unique to Zookeeper and limits its [supported language bindings][zk-bindings], etcd’s client protocol is built from [gRPC][grpc], a popular RPC framework with language bindings for go, C++, Java, and more. Likewise, gRPC can be serialized into JSON over HTTP, so even general command line utilities like `curl` can talk to it. Since systems can select from a variety of choices, they are built on etcd with native tooling rather than around etcd with a single fixed set of technologies.
-
-When considering features, support, and stability, new applications planning to use Zookeeper for a consistent key value store would do well to choose etcd instead.
-
-### Consul
-
-Consul is an end-to-end service discovery framework. It provides built-in health checking, failure detection, and DNS services. In addition, Consul exposes a key value store with RESTful HTTP APIs. [As it stands in Consul 1.0][dbtester-comparison-results], the storage system does not scale as well as other systems like etcd or Zookeeper in key-value operations; systems requiring millions of keys will suffer from high latencies and memory pressure. The key value API is missing, most notably, multi-version keys, conditional transactions, and reliable streaming watches.
-
-etcd and Consul solve different problems. If looking for a distributed consistent key value store, etcd is a better choice over Consul. If looking for end-to-end cluster service discovery, etcd will not have enough features; choose Kubernetes, Consul, or SmartStack.
-
-### NewSQL (Cloud Spanner, CockroachDB, TiDB)
-
-Both etcd and NewSQL databases (e.g., [Cockroach][cockroach], [TiDB][tidb], [Google Spanner][spanner]) provide strong data consistency guarantees with high availability. However, the significantly different system design parameters lead to significantly different client APIs and performance characteristics.
-
-NewSQL databases are meant to horizontally scale across data centers. These systems typically partition data across multiple consistent replication groups (shards), potentially distant, storing data sets on the order of terabytes and above. This sort of scaling makes them poor candidates for distributed coordination as they have long latencies from waiting on clocks and expect updates with mostly localized dependency graphs. The data is organized into tables, including SQL-style query facilities with richer semantics than etcd, but at the cost of additional complexity for processing, planning, and optimizing queries.
-
-In short, choose etcd for storing metadata or coordinating distributed applications. If storing more than a few GB of data or if full SQL queries are needed, choose a NewSQL database.
-
-## Using etcd for metadata
-
-etcd replicates all data within a single consistent replication group. For storing up to a few GB of data with consistent ordering, this is the most efficient approach. Each modification of cluster state, which may change multiple keys, is assigned a global unique ID, called a revision in etcd, from a monotonically increasing counter for reasoning over ordering. Since there’s only a single replication group, the modification request only needs to go through the raft protocol to commit. By limiting consensus to one replication group, etcd gets distributed consistency with a simple protocol while achieving low latency and high throughput.
-
-The replication behind etcd cannot horizontally scale because it lacks data sharding. In contrast, NewSQL databases usually shard data across multiple consistent replication groups, storing data sets on the order of terabytes and above. However, to assign each modification a global unique and increasing ID, each request must go through an additional coordination protocol among replication groups. This extra coordination step may potentially conflict on the global ID, forcing ordered requests to retry. The result is a more complicated approach with typically worse performance than etcd for strict ordering.
-
-If an application reasons primarily about metadata or metadata ordering, such as to coordinate processes, choose etcd. If the application needs a large data store spanning multiple data centers and does not heavily depend on strong global ordering properties, choose a NewSQL database.
-
-## Using etcd for distributed coordination
-
-etcd has distributed coordination primitives such as event watches, leases, elections, and distributed shared locks out of the box (Note that in the case of the distributed shared lock, users need to be aware about its non obvious properties. The details are described below). These primitives are both maintained and supported by the etcd developers; leaving these primitives to external libraries shirks the responsibility of developing foundational distributed software, essentially leaving the system incomplete. NewSQL databases usually expect these distributed coordination primitives to be authored by third parties. Likewise, ZooKeeper famously has a separate and independent [library][curator] of coordination recipes. Consul, which provides a native locking API, goes so far as to apologize that it’s “[not a bulletproof method][consul-bulletproof]”.
-
-In theory, it’s possible to build these primitives atop any storage systems providing strong consistency. However, the algorithms tend to be subtle; it is easy to develop a locking algorithm that appears to work, only to suddenly break due to thundering herd and timing skew. Furthermore, other primitives supported by etcd, such as transactional memory depend on etcd’s MVCC data model; simple strong consistency is not enough.
-
-For distributed coordination, choosing etcd can help prevent operational headaches and save engineering effort.
-
-### Notes on the usage of lock and lease
-etcd provides [lock APIs][etcd-v3lock] which are based on [the lease mechanism][lease] and [its implementation in etcd][etcdlease]. The basic idea of the lease mechanism is: a server grants a token, which is called a lease, to a requesting client. When the server grants a lease, it associates a TTL with the lease. When the server detects the passage of time longer than the TTL, it revokes the lease. While the client holds a non revoked lease it can claim that it owns access to a resource associated with the lease. In the case of etcd, the resource is a key in the etcd keyspace. etcd provides lock APIs with this scheme. However, the lock APIs cannot be used as mutual exclusion mechanism by themselves. The APIs are called lock because [for historical reasons][chubby]. The lock APIs can, however, be used as an optimization mechanism of mutual exclusion as described below.
-
-The most important aspect of the lease mechanism is that TTL is defined as a physical time interval. Both of the server and client measures passing of time with their own clocks. It allows a situation that the server revokes the lease but the client still claims it owns the lease.
-
-Then how does the lease mechanism guarantees mutual exclusion of the locking mechanism? Actually, the lease mechanism itself doesn't guarantee mutual exclusion. Owning a lease cannot guarantee the owner holds a lock of the resource.
-
-In the case of controlling mutual accesses to keys of etcd itself with etcd lock, mutual exclusion is implemented based on the mechanism of version number validation (it is sometimes called compare and swap in other systems like Consul). In etcd's RPCs like `Put` or `Txn`, we can specify required conditions about revision number and lease ID for the operations. If the conditions are not satisfied, the operation can fail. With this mechanism, etcd provides distributed locking for clients. It means that a client knows that it is acquiring a lock of a key when its requests are completed by etcd cluster successfully.
-
-In distributed locking literature similar designs are described:
-* In [the paper of Chubby][chubby], the concept of *sequencer* is introduced. We interpret that sequencer is an almost same to the combination of revision number and lease ID of etcd.
-* In [How to do distributed locking][fencing], Martin Kleppmann introduced the idea of *fencing token*. The authors interpret that fencing token is revision number in the case of etcd. In [Note on fencing and distributed locks][fencing-zk] Flavio Junqueira discussed how the idea of fencing token should be implemented in the case of zookeeper.
-* In [Practical Uses of Synchronized Clocks in Distributed Systems][physicalclock], we can find a description that Thor implements a distributed locking mechanism based on version number validation and lease.
-
-Why do etcd and other systems provide lease if they provide mutual exclusion based on version number validation? Well, leases provide an optimization mechanism for reducing a number of aborted requests.
-
-Note that in the case of etcd keys, it can be locked efficiently because of the mechanisms of lease and version number validation. If users need to protect resources which aren't related to etcd, the resources must provide the version number validation mechanism and consistency of replicas like keys of etcd. The lock feature of etcd itself cannot be used for protecting external resources.
-
-The [lock directory][executable-example] contains an executable example which follows [the scenario described in the article by Martin Kleppmann][fencing]. The example shows how stop the world GC of go runtime can cause false revoking of etcd lock and how version number validation can prevent access to the shared resource from a client which acquires a stale lock.
-
-[production-users]: ../../ADOPTERS.md
-[grpc]: https://www.grpc.io
-[consul-bulletproof]: https://www.consul.io/docs/internals/sessions.html
-[curator]: http://curator.apache.org/
-[cockroach]: https://github.com/cockroachdb/cockroach
-[spanner]: https://cloud.google.com/spanner/
-[tidb]: https://github.com/pingcap/tidb
-[etcd-v3lock]: https://godoc.org/github.com/etcd-io/etcd/server/etcdserver/api/v3lock/v3lockpb
-[etcd-v3election]: https://godoc.org/github.com/etcd-io/etcd/server/etcdserver/api/v3election/v3electionpb
-[etcd-etcdctl-lock]: ../../etcdctl/README.md#lock-options-lockname-command-arg1-arg2-
-[etcd-etcdctl-elect]: ../../etcdctl/README.md#elect-options-election-name-proposal
-[etcd-mvcc]: data_model.md
-[etcd-recipe]: https://godoc.org/github.com/etcd-io/etcd/client/v3/experimental/recipes
-[consul-lock]: https://www.consul.io/commands/lock
-[newsql-leader]: http://dl.acm.org/citation.cfm?id=2960999
-[etcd-reconfig]: ../op-guide/runtime-configuration.md
-[zk-reconfig]: https://zookeeper.apache.org/doc/current/zookeeperReconfig.html
-[consul-reconfig]: https://www.consul.io/docs/guides/servers.html
-[etcd-linread]: api_guarantees.md#linearizability
-[consul-linread]: https://www.consul.io/docs/agent/http.html#consistency
-[etcd-json]: ../dev-guide/api_grpc_gateway.md
-[consul-json]: https://www.consul.io/docs/agent/http.html#formatted-json-output
-[etcd-txn]: api.md#transaction
-[zk-txn]: https://zookeeper.apache.org/doc/r3.4.3/api/org/apache/zookeeper/ZooKeeper.html#multi(java.lang.Iterable)
-[consul-txn]: https://www.consul.io/docs/agent/http/kv.html#txn
-[etcd-watch]: api.md#watch-streams
-[zk-watch]: https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#ch_zkWatches
-[consul-watch]: https://www.consul.io/docs/agent/watches.html
-[etcd-commonname]: ../op-guide/authentication.md#using-tls-common-name
-[etcd-rbac]: ../op-guide/authentication.md#working-with-roles
-[zk-acl]: https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#sc_ZooKeeperAccessControl
-[consul-acl]: https://www.consul.io/docs/internals/acl.html
-[cockroach-grant]: https://www.cockroachlabs.com/docs/stable/grant.html
-[spanner-roles]: https://cloud.google.com/spanner/docs/iam#roles
-[zk-bindings]: https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#ch_bindings
-[container-linux]: https://coreos.com/why
-[locksmith]: https://github.com/coreos/locksmith
-[kubernetes]: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
-[dbtester-comparison-results]: https://github.com/coreos/dbtester/tree/master/test-results/2018Q1-02-etcd-zookeeper-consul
-[etcdlease]: https://godoc.org/github.com/etcd-io/etcd/client/v3/leasing
-[lease]: https://web.stanford.edu/class/cs240/readings/89-leases.pdf
-[chubby]: https://research.google/pubs/pub27897/
-[fencing]: https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
-[physicalclock]: http://www.dainf.cefetpr.br/~tacla/SDII/PracticalUseOfClocks.pdf
-[fencing-zk]: https://fpj.me/2016/02/10/note-on-fencing-and-distributed-locks/
-[executable-example]: lock/README.md
diff --git a/etcd-fix/Documentation/metrics.md b/etcd-fix/Documentation/metrics.md
deleted file mode 100644
index ba09770..0000000
--- a/etcd-fix/Documentation/metrics.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-title: Metrics
----
-
-etcd uses [Prometheus][prometheus] for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.
-
-The simplest way to see the available metrics is to cURL the metrics endpoint `/metrics`. The format is described [here](http://prometheus.io/docs/instrumenting/exposition_formats/).
-
-Follow the [Prometheus getting started doc][prometheus-getting-started] to spin up a Prometheus server to collect etcd metrics.
-
-The naming of metrics follows the suggested [Prometheus best practices][prometheus-naming]. A metric name has an `etcd` or `etcd_debugging` prefix as its namespace and a subsystem prefix (for example `wal` and `etcdserver`).
-
-## etcd namespace metrics
-
-The metrics under the `etcd` prefix are for monitoring and alerting. They are stable high level metrics. If there is any change of these metrics, it will be included in release notes.
-
-Metrics that are etcd2 related are documented [v2 metrics guide][v2-http-metrics].
-
-### Server
-
-These metrics describe the status of the etcd server. In order to detect outages or problems for troubleshooting, the server metrics of every production etcd cluster should be closely monitored.
-
-All these metrics are prefixed with `etcd_server_`
-
-| Name | Description | Type |
-|---------------------------|----------------------------------------------------------|---------|
-| has_leader | Whether or not a leader exists. 1 is existence, 0 is not.| Gauge |
-| leader_changes_seen_total | The number of leader changes seen. | Counter |
-| proposals_committed_total | The total number of consensus proposals committed. | Gauge |
-| proposals_applied_total | The total number of consensus proposals applied. | Gauge |
-| proposals_pending | The current number of pending proposals. | Gauge |
-| proposals_failed_total | The total number of failed proposals seen. | Counter |
-
-`has_leader` indicates whether the member has a leader. If a member does not have a leader, it is
-totally unavailable. If all the members in the cluster do not have any leader, the entire cluster
-is totally unavailable.
-
-`leader_changes_seen_total` counts the number of leader changes the member has seen since its start. Rapid leadership changes impact the performance of etcd significantly. It also signals that the leader is unstable, perhaps due to network connectivity issues or excessive load hitting the etcd cluster.
-
-`proposals_committed_total` records the total number of consensus proposals committed. This gauge should increase over time if the cluster is healthy. Several healthy members of an etcd cluster may have different total committed proposals at once. This discrepancy may be due to recovering from peers after starting, lagging behind the leader, or being the leader and therefore having the most commits. It is important to monitor this metric across all the members in the cluster; a consistently large lag between a single member and its leader indicates that member is slow or unhealthy.
-
-`proposals_applied_total` records the total number of consensus proposals applied. The etcd server applies every committed proposal asynchronously. The difference between `proposals_committed_total` and `proposals_applied_total` should usually be small (within a few thousands even under high load). If the difference between them continues to rise, it indicates that the etcd server is overloaded. This might happen when applying expensive queries like heavy range queries or large txn operations.
-
-`proposals_pending` indicates how many proposals are queued to commit. Rising pending proposals suggests there is a high client load or the member cannot commit proposals.
-
-`proposals_failed_total` are normally related to two issues: temporary failures related to a leader election or longer downtime caused by a loss of quorum in the cluster.
-
-### Disk
-
-These metrics describe the status of the disk operations.
-
-All these metrics are prefixed with `etcd_disk_`.
-
-| Name | Description | Type |
-|------------------------------------|-------------------------------------------------------|-----------|
-| wal_fsync_duration_seconds | The latency distributions of fsync called by wal | Histogram |
-| backend_commit_duration_seconds | The latency distributions of commit called by backend.| Histogram |
-
-A `wal_fsync` is called when etcd persists its log entries to disk before applying them.
-
-A `backend_commit` is called when etcd commits an incremental snapshot of its most recent changes to disk.
-
-High disk operation latencies (`wal_fsync_duration_seconds` or `backend_commit_duration_seconds`) often indicate disk issues. It may cause high request latency or make the cluster unstable.
-
-### Network
-
-These metrics describe the status of the network.
-
-All these metrics are prefixed with `etcd_network_`
-
-| Name | Description | Type |
-|---------------------------|--------------------------------------------------------------------|---------------|
-| peer_sent_bytes_total | The total number of bytes sent to the peer with ID `To`. | Counter(To) |
-| peer_received_bytes_total | The total number of bytes received from the peer with ID `From`. | Counter(From) |
-| peer_sent_failures_total | The total number of send failures from the peer with ID `To`. | Counter(To) |
-| peer_received_failures_total | The total number of receive failures from the peer with ID `From`. | Counter(From) |
-| peer_round_trip_time_seconds | Round-Trip-Time histogram between peers. | Histogram(To) |
-| client_grpc_sent_bytes_total | The total number of bytes sent to grpc clients. | Counter |
-| client_grpc_received_bytes_total| The total number of bytes received to grpc clients. | Counter |
-
-`peer_sent_bytes_total` counts the total number of bytes sent to a specific peer. Usually the leader member sends more data than other members since it is responsible for transmitting replicated data.
-
-`peer_received_bytes_total` counts the total number of bytes received from a specific peer. Usually follower members receive data only from the leader member.
-
-### gRPC requests
-
-These metrics are exposed via [go-grpc-prometheus][go-grpc-prometheus].
-
-## etcd_debugging namespace metrics
-
-The metrics under the `etcd_debugging` prefix are for debugging. They are very implementation dependent and volatile. They might be changed or removed without any warning in new etcd releases. Some of the metrics might be moved to the `etcd` prefix when they become more stable.
-
-
-### Snapshot
-
-| Name | Description | Type |
-|--------------------------------------------|------------------------------------------------------------|-----------|
-| snapshot_save_total_duration_seconds | The total latency distributions of save called by snapshot | Histogram |
-
-Abnormally high snapshot duration (`snapshot_save_total_duration_seconds`) indicates disk issues and might cause the cluster to be unstable.
-
-## Prometheus supplied metrics
-
-The Prometheus client library provides a number of metrics under the `go` and `process` namespaces. There are a few that are particularly interesting.
-
-| Name | Description | Type |
-|-----------------------------------|--------------------------------------------|--------------|
-| process_open_fds | Number of open file descriptors. | Gauge |
-| process_max_fds | Maximum number of open file descriptors. | Gauge |
-
-Heavy file descriptor (`process_open_fds`) usage (i.e., near the process's file descriptor limit, `process_max_fds`) indicates a potential file descriptor exhaustion issue. If the file descriptors are exhausted, etcd may panic because it cannot create new WAL files.
-
-[prometheus]: https://prometheus.io/
-[prometheus-getting-started]: https://prometheus.io/docs/introduction/getting_started/
-[prometheus-naming]: https://prometheus.io/docs/practices/naming/
-[v2-http-metrics]: /docs/v2/metrics#http-requests
-[go-grpc-prometheus]: https://github.com/grpc-ecosystem/go-grpc-prometheus
diff --git a/etcd-fix/Documentation/metrics/latest b/etcd-fix/Documentation/metrics/latest
deleted file mode 100644
index 63f8d0d..0000000
--- a/etcd-fix/Documentation/metrics/latest
+++ /dev/null
@@ -1,1129 +0,0 @@
-# server version: etcd_server_version{server_version="3.5.0-pre"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.5"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_last"
-# description: "The unix time of the last db compaction. Resets to 0 on start."
-# type: "gauge"
-etcd_debugging_mvcc_db_compaction_last
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.14.3"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="451af08594378132"}
-etcd_server_id{server_id="61791325a7fedcf8"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.5.0-pre"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.14.3"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "os_fd_limit"
-# description: "The file descriptor limit."
-# type: "gauge"
-os_fd_limit
-
-# name: "os_fd_used"
-# description: "The number of used file descriptors."
-# type: "gauge"
-os_fd_used
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.0 b/etcd-fix/Documentation/metrics/v3.1.0
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.0
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.1 b/etcd-fix/Documentation/metrics/v3.1.1
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.1
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.10 b/etcd-fix/Documentation/metrics/v3.1.10
deleted file mode 100644
index 003bb47..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.10
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.11 b/etcd-fix/Documentation/metrics/v3.1.11
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.11
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.12 b/etcd-fix/Documentation/metrics/v3.1.12
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.12
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.13 b/etcd-fix/Documentation/metrics/v3.1.13
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.13
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.14 b/etcd-fix/Documentation/metrics/v3.1.14
deleted file mode 100644
index b709c13..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.14
+++ /dev/null
@@ -1,516 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.15 b/etcd-fix/Documentation/metrics/v3.1.15
deleted file mode 100644
index b709c13..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.15
+++ /dev/null
@@ -1,516 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.16 b/etcd-fix/Documentation/metrics/v3.1.16
deleted file mode 100644
index d44713f..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.16
+++ /dev/null
@@ -1,516 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.17 b/etcd-fix/Documentation/metrics/v3.1.17
deleted file mode 100644
index b709c13..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.17
+++ /dev/null
@@ -1,516 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.18 b/etcd-fix/Documentation/metrics/v3.1.18
deleted file mode 100644
index 48df5dd..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.18
+++ /dev/null
@@ -1,521 +0,0 @@
-# server version: etcd_server_version{server_version="3.1.18"}
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.1.18"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.19 b/etcd-fix/Documentation/metrics/v3.1.19
deleted file mode 100644
index ead28e3..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.19
+++ /dev/null
@@ -1,598 +0,0 @@
-# server version: etcd_server_version{server_version="3.1.19"}
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.8.7"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.1.19"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.2 b/etcd-fix/Documentation/metrics/v3.1.2
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.2
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.20 b/etcd-fix/Documentation/metrics/v3.1.20
deleted file mode 100644
index b51c0bb..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.20
+++ /dev/null
@@ -1,795 +0,0 @@
-# server version: etcd_server_version{server_version="3.1.20"}
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.8.7"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.1.20"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.3 b/etcd-fix/Documentation/metrics/v3.1.3
deleted file mode 100644
index 003bb47..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.3
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.4 b/etcd-fix/Documentation/metrics/v3.1.4
deleted file mode 100644
index 003bb47..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.4
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.5 b/etcd-fix/Documentation/metrics/v3.1.5
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.5
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.6 b/etcd-fix/Documentation/metrics/v3.1.6
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.6
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.7 b/etcd-fix/Documentation/metrics/v3.1.7
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.7
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.8 b/etcd-fix/Documentation/metrics/v3.1.8
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.8
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.1.9 b/etcd-fix/Documentation/metrics/v3.1.9
deleted file mode 100644
index 58b6ab4..0000000
--- a/etcd-fix/Documentation/metrics/v3.1.9
+++ /dev/null
@@ -1,511 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.0 b/etcd-fix/Documentation/metrics/v3.2.0
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.0
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.1 b/etcd-fix/Documentation/metrics/v3.2.1
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.1
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.10 b/etcd-fix/Documentation/metrics/v3.2.10
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.10
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.11 b/etcd-fix/Documentation/metrics/v3.2.11
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.11
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.12 b/etcd-fix/Documentation/metrics/v3.2.12
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.12
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.13 b/etcd-fix/Documentation/metrics/v3.2.13
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.13
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.14 b/etcd-fix/Documentation/metrics/v3.2.14
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.14
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.15 b/etcd-fix/Documentation/metrics/v3.2.15
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.15
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.16 b/etcd-fix/Documentation/metrics/v3.2.16
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.16
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.17 b/etcd-fix/Documentation/metrics/v3.2.17
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.17
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.18 b/etcd-fix/Documentation/metrics/v3.2.18
deleted file mode 100644
index dc1b475..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.18
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.19 b/etcd-fix/Documentation/metrics/v3.2.19
deleted file mode 100644
index 37d9c27..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.19
+++ /dev/null
@@ -1,550 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.2 b/etcd-fix/Documentation/metrics/v3.2.2
deleted file mode 100644
index dc1b475..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.2
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.20 b/etcd-fix/Documentation/metrics/v3.2.20
deleted file mode 100644
index 37d9c27..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.20
+++ /dev/null
@@ -1,550 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.21 b/etcd-fix/Documentation/metrics/v3.2.21
deleted file mode 100644
index 37d9c27..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.21
+++ /dev/null
@@ -1,550 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.22 b/etcd-fix/Documentation/metrics/v3.2.22
deleted file mode 100644
index 37d9c27..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.22
+++ /dev/null
@@ -1,550 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.23 b/etcd-fix/Documentation/metrics/v3.2.23
deleted file mode 100644
index 10b28c4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.23
+++ /dev/null
@@ -1,555 +0,0 @@
-# server version: etcd_server_version{server_version="3.2.23"}
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.2.23"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.24 b/etcd-fix/Documentation/metrics/v3.2.24
deleted file mode 100644
index 8b8054d..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.24
+++ /dev/null
@@ -1,632 +0,0 @@
-# server version: etcd_server_version{server_version="3.2.24"}
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.8.7"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.2.24"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.25 b/etcd-fix/Documentation/metrics/v3.2.25
deleted file mode 100644
index aefdc89..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.25
+++ /dev/null
@@ -1,808 +0,0 @@
-# server version: etcd_server_version{server_version="3.2.25"}
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.8.7"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.2.25"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.3 b/etcd-fix/Documentation/metrics/v3.2.3
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.3
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.4 b/etcd-fix/Documentation/metrics/v3.2.4
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.4
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.5 b/etcd-fix/Documentation/metrics/v3.2.5
deleted file mode 100644
index dc1b475..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.5
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.6 b/etcd-fix/Documentation/metrics/v3.2.6
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.6
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.7 b/etcd-fix/Documentation/metrics/v3.2.7
deleted file mode 100644
index dc1b475..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.7
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Canceled"
-# - "OK"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.8 b/etcd-fix/Documentation/metrics/v3.2.8
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.8
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.2.9 b/etcd-fix/Documentation/metrics/v3.2.9
deleted file mode 100644
index 321b7f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.2.9
+++ /dev/null
@@ -1,545 +0,0 @@
-# server version: unknown
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes_total"
-# description: "Total number of heap bytes released to OS."
-# type: "counter"
-go_memstats_heap_released_bytes_total
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained by system. Sum of all system allocations."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "OK"
-# - "Unavailable"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "http_request_duration_microseconds"
-# description: "The HTTP request latencies in microseconds."
-# type: "summary"
-http_request_duration_microseconds{handler="prometheus",quantile="0.5"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.9"}
-http_request_duration_microseconds{handler="prometheus",quantile="0.99"}
-http_request_duration_microseconds_sum{handler="prometheus"}
-http_request_duration_microseconds_count{handler="prometheus"}
-
-# name: "http_request_size_bytes"
-# description: "The HTTP request sizes in bytes."
-# type: "summary"
-http_request_size_bytes{handler="prometheus",quantile="0.5"}
-http_request_size_bytes{handler="prometheus",quantile="0.9"}
-http_request_size_bytes{handler="prometheus",quantile="0.99"}
-http_request_size_bytes_sum{handler="prometheus"}
-http_request_size_bytes_count{handler="prometheus"}
-
-# name: "http_response_size_bytes"
-# description: "The HTTP response sizes in bytes."
-# type: "summary"
-http_response_size_bytes{handler="prometheus",quantile="0.5"}
-http_response_size_bytes{handler="prometheus",quantile="0.9"}
-http_response_size_bytes{handler="prometheus",quantile="0.99"}
-http_response_size_bytes_sum{handler="prometheus"}
-http_response_size_bytes_count{handler="prometheus"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.0 b/etcd-fix/Documentation/metrics/v3.3.0
deleted file mode 100644
index e99260b..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.0
+++ /dev/null
@@ -1,698 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.0"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.0"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.3"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.1 b/etcd-fix/Documentation/metrics/v3.3.1
deleted file mode 100644
index 995e21a..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.1
+++ /dev/null
@@ -1,698 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.1"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.1"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.4"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.10 b/etcd-fix/Documentation/metrics/v3.3.10
deleted file mode 100644
index 8064816..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.10
+++ /dev/null
@@ -1,860 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.10"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.10.4"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.10"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.10.4"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.11 b/etcd-fix/Documentation/metrics/v3.3.11
deleted file mode 100644
index bfab956..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.11
+++ /dev/null
@@ -1,890 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.11"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.10.7"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.11"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.10.7"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.12 b/etcd-fix/Documentation/metrics/v3.3.12
deleted file mode 100644
index 41160eb..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.12
+++ /dev/null
@@ -1,890 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.12"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.10.8"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.12"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.10.8"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.13 b/etcd-fix/Documentation/metrics/v3.3.13
deleted file mode 100644
index 1032d75..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.13
+++ /dev/null
@@ -1,890 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.13"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.10.8"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.13"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.10.8"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.14 b/etcd-fix/Documentation/metrics/v3.3.14
deleted file mode 100644
index 7107fb3..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.14
+++ /dev/null
@@ -1,899 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.14"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.14"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.15 b/etcd-fix/Documentation/metrics/v3.3.15
deleted file mode 100644
index f897be5..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.15
+++ /dev/null
@@ -1,899 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.15"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.15"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.16 b/etcd-fix/Documentation/metrics/v3.3.16
deleted file mode 100644
index e5a4e81..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.16
+++ /dev/null
@@ -1,909 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.16"}
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.16"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.17 b/etcd-fix/Documentation/metrics/v3.3.17
deleted file mode 100644
index a42296a..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.17
+++ /dev/null
@@ -1,909 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.17"}
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.17"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.18 b/etcd-fix/Documentation/metrics/v3.3.18
deleted file mode 100644
index e01bc09..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.18
+++ /dev/null
@@ -1,919 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.18"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.3"}
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.18"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.19 b/etcd-fix/Documentation/metrics/v3.3.19
deleted file mode 100644
index 2fa2669..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.19
+++ /dev/null
@@ -1,925 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.19"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.3"}
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.12"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.19"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.12"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.2 b/etcd-fix/Documentation/metrics/v3.3.2
deleted file mode 100644
index 8834f24..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.2
+++ /dev/null
@@ -1,698 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.2"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.2"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.4"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.20 b/etcd-fix/Documentation/metrics/v3.3.20
deleted file mode 100644
index feadb27..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.20
+++ /dev/null
@@ -1,930 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.20"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.3"}
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.20"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.21 b/etcd-fix/Documentation/metrics/v3.3.21
deleted file mode 100644
index 7aa492b..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.21
+++ /dev/null
@@ -1,935 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.21"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.3"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.21"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.22 b/etcd-fix/Documentation/metrics/v3.3.22
deleted file mode 100644
index 64c69cc..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.22
+++ /dev/null
@@ -1,935 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.22"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.3"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.22"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.23 b/etcd-fix/Documentation/metrics/v3.3.23
deleted file mode 100644
index 64c69cc..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.23
+++ /dev/null
@@ -1,935 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.22"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.3"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.22"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.24 b/etcd-fix/Documentation/metrics/v3.3.24
deleted file mode 100644
index f13e191..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.24
+++ /dev/null
@@ -1,945 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.24"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.3"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.24"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "os_fd_limit"
-# description: "The file descriptor limit."
-# type: "gauge"
-os_fd_limit
-
-# name: "os_fd_used"
-# description: "The number of used file descriptors."
-# type: "gauge"
-os_fd_used
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.3 b/etcd-fix/Documentation/metrics/v3.3.3
deleted file mode 100644
index f1fa4db..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.3
+++ /dev/null
@@ -1,698 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.3"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.3"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.5"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.4 b/etcd-fix/Documentation/metrics/v3.3.4
deleted file mode 100644
index 3fa79f5..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.4
+++ /dev/null
@@ -1,703 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.4"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.4"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.5"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.5 b/etcd-fix/Documentation/metrics/v3.3.5
deleted file mode 100644
index 6ac1894..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.5
+++ /dev/null
@@ -1,703 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.5"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.5"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.6"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.6 b/etcd-fix/Documentation/metrics/v3.3.6
deleted file mode 100644
index 8231f9c..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.6
+++ /dev/null
@@ -1,703 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.6"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.6"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.6"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.7 b/etcd-fix/Documentation/metrics/v3.3.7
deleted file mode 100644
index efb40d8..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.7
+++ /dev/null
@@ -1,703 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.7"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.7"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.6"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.8 b/etcd-fix/Documentation/metrics/v3.3.8
deleted file mode 100644
index 464f621..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.8
+++ /dev/null
@@ -1,703 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.8"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.8"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.9.7"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.3.9 b/etcd-fix/Documentation/metrics/v3.3.9
deleted file mode 100644
index 0543220..0000000
--- a/etcd-fix/Documentation/metrics/v3.3.9
+++ /dev/null
@@ -1,802 +0,0 @@
-# server version: etcd_server_version{server_version="3.3.9"}
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes. Use etcd_mvcc_db_total_size_in_bytes"
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by wal."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers."
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.10.3"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.3.9"}
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.10.3"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.0 b/etcd-fix/Documentation/metrics/v3.4.0
deleted file mode 100644
index 8b30baa..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.0
+++ /dev/null
@@ -1,1064 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.0"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4.0"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.0"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.1 b/etcd-fix/Documentation/metrics/v3.4.1
deleted file mode 100644
index 8c96cb5..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.1
+++ /dev/null
@@ -1,1074 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.1"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4.0"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.1"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.10 b/etcd-fix/Documentation/metrics/v3.4.10
deleted file mode 100644
index 3f41624..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.10
+++ /dev/null
@@ -1,1130 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.10"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.10"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.11 b/etcd-fix/Documentation/metrics/v3.4.11
deleted file mode 100644
index 37b7960..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.11
+++ /dev/null
@@ -1,1140 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.11"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.11"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "os_fd_limit"
-# description: "The file descriptor limit."
-# type: "gauge"
-os_fd_limit
-
-# name: "os_fd_used"
-# description: "The number of used file descriptors."
-# type: "gauge"
-os_fd_used
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.12 b/etcd-fix/Documentation/metrics/v3.4.12
deleted file mode 100644
index 530eb1a..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.12
+++ /dev/null
@@ -1,1140 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.12"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.12"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "os_fd_limit"
-# description: "The file descriptor limit."
-# type: "gauge"
-os_fd_limit
-
-# name: "os_fd_used"
-# description: "The number of used file descriptors."
-# type: "gauge"
-os_fd_used
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.13 b/etcd-fix/Documentation/metrics/v3.4.13
deleted file mode 100644
index 0bfdf8b..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.13
+++ /dev/null
@@ -1,1140 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.13"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.13"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "os_fd_limit"
-# description: "The file descriptor limit."
-# type: "gauge"
-os_fd_limit
-
-# name: "os_fd_used"
-# description: "The number of used file descriptors."
-# type: "gauge"
-os_fd_used
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.2 b/etcd-fix/Documentation/metrics/v3.4.2
deleted file mode 100644
index 9d895a8..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.2
+++ /dev/null
@@ -1,1074 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.2"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4.0"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.9"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.2"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.9"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.3 b/etcd-fix/Documentation/metrics/v3.4.3
deleted file mode 100644
index bf66746..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.3
+++ /dev/null
@@ -1,1074 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.3"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.12"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.3"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.12"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.4 b/etcd-fix/Documentation/metrics/v3.4.4
deleted file mode 100644
index 51191ee..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.4
+++ /dev/null
@@ -1,1114 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.4"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.12"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.4"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.12"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.5 b/etcd-fix/Documentation/metrics/v3.4.5
deleted file mode 100644
index 5b849a7..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.5
+++ /dev/null
@@ -1,1120 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.5"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.12"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.5"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.12"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.6 b/etcd-fix/Documentation/metrics/v3.4.6
deleted file mode 100644
index c2478b4..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.6
+++ /dev/null
@@ -1,1120 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.6"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.12"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.6"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.12"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.7 b/etcd-fix/Documentation/metrics/v3.4.7
deleted file mode 100644
index 2305bda..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.7
+++ /dev/null
@@ -1,1125 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.7"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.7"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.8 b/etcd-fix/Documentation/metrics/v3.4.8
deleted file mode 100644
index b56d8f4..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.8
+++ /dev/null
@@ -1,1130 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.8"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.8"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/metrics/v3.4.9 b/etcd-fix/Documentation/metrics/v3.4.9
deleted file mode 100644
index 72355e6..0000000
--- a/etcd-fix/Documentation/metrics/v3.4.9
+++ /dev/null
@@ -1,1130 +0,0 @@
-# server version: etcd_server_version{server_version="3.4.9"}
-
-# name: "etcd_cluster_version"
-# description: "Which version is running. 1 for 'cluster_version' label with current cluster version"
-# type: "gauge"
-etcd_cluster_version{cluster_version="3.4"}
-
-# name: "etcd_debugging_auth_revision"
-# description: "The current revision of auth store."
-# type: "gauge"
-etcd_debugging_auth_revision
-
-# name: "etcd_debugging_disk_backend_commit_rebalance_duration_seconds"
-# description: "The latency distributions of commit.rebalance called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_sum
-etcd_debugging_disk_backend_commit_rebalance_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_spill_duration_seconds"
-# description: "The latency distributions of commit.spill called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_spill_duration_seconds_sum
-etcd_debugging_disk_backend_commit_spill_duration_seconds_count
-
-# name: "etcd_debugging_disk_backend_commit_write_duration_seconds"
-# description: "The latency distributions of commit.write called by bboltdb backend."
-# type: "histogram"
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.001"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.002"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.004"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.008"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.016"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.032"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.064"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.128"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.256"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="0.512"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="1.024"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="2.048"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="4.096"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="8.192"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_disk_backend_commit_write_duration_seconds_sum
-etcd_debugging_disk_backend_commit_write_duration_seconds_count
-
-# name: "etcd_debugging_lease_granted_total"
-# description: "The total number of granted leases."
-# type: "counter"
-etcd_debugging_lease_granted_total
-
-# name: "etcd_debugging_lease_renewed_total"
-# description: "The number of renewed leases seen by the leader."
-# type: "counter"
-etcd_debugging_lease_renewed_total
-
-# name: "etcd_debugging_lease_revoked_total"
-# description: "The total number of revoked leases."
-# type: "counter"
-etcd_debugging_lease_revoked_total
-
-# name: "etcd_debugging_lease_ttl_total"
-# description: "Bucketed histogram of lease TTLs."
-# type: "histogram"
-etcd_debugging_lease_ttl_total_bucket{le="1"}
-etcd_debugging_lease_ttl_total_bucket{le="2"}
-etcd_debugging_lease_ttl_total_bucket{le="4"}
-etcd_debugging_lease_ttl_total_bucket{le="8"}
-etcd_debugging_lease_ttl_total_bucket{le="16"}
-etcd_debugging_lease_ttl_total_bucket{le="32"}
-etcd_debugging_lease_ttl_total_bucket{le="64"}
-etcd_debugging_lease_ttl_total_bucket{le="128"}
-etcd_debugging_lease_ttl_total_bucket{le="256"}
-etcd_debugging_lease_ttl_total_bucket{le="512"}
-etcd_debugging_lease_ttl_total_bucket{le="1024"}
-etcd_debugging_lease_ttl_total_bucket{le="2048"}
-etcd_debugging_lease_ttl_total_bucket{le="4096"}
-etcd_debugging_lease_ttl_total_bucket{le="8192"}
-etcd_debugging_lease_ttl_total_bucket{le="16384"}
-etcd_debugging_lease_ttl_total_bucket{le="32768"}
-etcd_debugging_lease_ttl_total_bucket{le="65536"}
-etcd_debugging_lease_ttl_total_bucket{le="131072"}
-etcd_debugging_lease_ttl_total_bucket{le="262144"}
-etcd_debugging_lease_ttl_total_bucket{le="524288"}
-etcd_debugging_lease_ttl_total_bucket{le="1.048576e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="2.097152e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="4.194304e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="8.388608e+06"}
-etcd_debugging_lease_ttl_total_bucket{le="+Inf"}
-etcd_debugging_lease_ttl_total_sum
-etcd_debugging_lease_ttl_total_count
-
-# name: "etcd_debugging_mvcc_compact_revision"
-# description: "The revision of the last compaction in store."
-# type: "gauge"
-etcd_debugging_mvcc_compact_revision
-
-# name: "etcd_debugging_mvcc_current_revision"
-# description: "The current revision of store."
-# type: "gauge"
-etcd_debugging_mvcc_current_revision
-
-# name: "etcd_debugging_mvcc_db_compaction_keys_total"
-# description: "Total number of db keys compacted."
-# type: "counter"
-etcd_debugging_mvcc_db_compaction_keys_total
-
-# name: "etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of db compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_compaction_total_duration_milliseconds"
-# description: "Bucketed histogram of db compaction total duration."
-# type: "histogram"
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="100"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="1600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="3200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="6400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="12800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="25600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="51200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="102400"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="204800"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="409600"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="819200"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_sum
-etcd_debugging_mvcc_db_compaction_total_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_debugging_mvcc_db_total_size_in_bytes
-
-# name: "etcd_debugging_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_delete_total
-
-# name: "etcd_debugging_mvcc_events_total"
-# description: "Total number of events sent by this member."
-# type: "counter"
-etcd_debugging_mvcc_events_total
-
-# name: "etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds"
-# description: "Bucketed histogram of index compaction pause duration."
-# type: "histogram"
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="0.5"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="8"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="16"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="32"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="64"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="128"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="256"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="512"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="1024"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="2048"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="4096"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_bucket{le="+Inf"}
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_sum
-etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds_count
-
-# name: "etcd_debugging_mvcc_keys_total"
-# description: "Total number of keys."
-# type: "gauge"
-etcd_debugging_mvcc_keys_total
-
-# name: "etcd_debugging_mvcc_pending_events_total"
-# description: "Total number of pending events to be sent."
-# type: "gauge"
-etcd_debugging_mvcc_pending_events_total
-
-# name: "etcd_debugging_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_put_total
-
-# name: "etcd_debugging_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_range_total
-
-# name: "etcd_debugging_mvcc_slow_watcher_total"
-# description: "Total number of unsynced slow watchers."
-# type: "gauge"
-etcd_debugging_mvcc_slow_watcher_total
-
-# name: "etcd_debugging_mvcc_total_put_size_in_bytes"
-# description: "The total size of put kv pairs seen by this member."
-# type: "gauge"
-etcd_debugging_mvcc_total_put_size_in_bytes
-
-# name: "etcd_debugging_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_debugging_mvcc_txn_total
-
-# name: "etcd_debugging_mvcc_watch_stream_total"
-# description: "Total number of watch streams."
-# type: "gauge"
-etcd_debugging_mvcc_watch_stream_total
-
-# name: "etcd_debugging_mvcc_watcher_total"
-# description: "Total number of watchers."
-# type: "gauge"
-etcd_debugging_mvcc_watcher_total
-
-# name: "etcd_debugging_server_lease_expired_total"
-# description: "The total number of expired leases."
-# type: "counter"
-etcd_debugging_server_lease_expired_total
-
-# name: "etcd_debugging_snap_save_marshalling_duration_seconds"
-# description: "The marshalling cost distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_marshalling_duration_seconds_sum
-etcd_debugging_snap_save_marshalling_duration_seconds_count
-
-# name: "etcd_debugging_snap_save_total_duration_seconds"
-# description: "The total latency distributions of save called by snapshot."
-# type: "histogram"
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"}
-etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_debugging_snap_save_total_duration_seconds_sum
-etcd_debugging_snap_save_total_duration_seconds_count
-
-# name: "etcd_debugging_store_expires_total"
-# description: "Total number of expired keys."
-# type: "counter"
-etcd_debugging_store_expires_total
-
-# name: "etcd_debugging_store_reads_total"
-# description: "Total number of reads action by (get/getRecursive), local to this member."
-# type: "counter"
-etcd_debugging_store_reads_total{action="getRecursive"}
-
-# name: "etcd_debugging_store_watch_requests_total"
-# description: "Total number of incoming watch requests (new or reestablished)."
-# type: "counter"
-etcd_debugging_store_watch_requests_total
-
-# name: "etcd_debugging_store_watchers"
-# description: "Count of currently active watchers."
-# type: "gauge"
-etcd_debugging_store_watchers
-
-# name: "etcd_debugging_store_writes_total"
-# description: "Total number of writes (e.g. set/compareAndDelete) seen by this member."
-# type: "counter"
-etcd_debugging_store_writes_total{action="create"}
-etcd_debugging_store_writes_total{action="set"}
-
-# name: "etcd_disk_backend_commit_duration_seconds"
-# description: "The latency distributions of commit called by backend."
-# type: "histogram"
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"}
-etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_commit_duration_seconds_sum
-etcd_disk_backend_commit_duration_seconds_count
-
-# name: "etcd_disk_backend_defrag_duration_seconds"
-# description: "The latency distribution of backend defragmentation."
-# type: "histogram"
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.1"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="0.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="1.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="3.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="6.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="12.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="25.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="51.2"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="102.4"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="204.8"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="409.6"}
-etcd_disk_backend_defrag_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_defrag_duration_seconds_sum
-etcd_disk_backend_defrag_duration_seconds_count
-
-# name: "etcd_disk_backend_snapshot_duration_seconds"
-# description: "The latency distribution of backend snapshots."
-# type: "histogram"
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.01"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.02"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.04"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.08"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.16"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.32"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="0.64"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="1.28"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="2.56"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="5.12"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="10.24"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="20.48"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="40.96"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="81.92"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="163.84"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="327.68"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="655.36"}
-etcd_disk_backend_snapshot_duration_seconds_bucket{le="+Inf"}
-etcd_disk_backend_snapshot_duration_seconds_sum
-etcd_disk_backend_snapshot_duration_seconds_count
-
-# name: "etcd_disk_wal_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by WAL."
-# type: "histogram"
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"}
-etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_disk_wal_fsync_duration_seconds_sum
-etcd_disk_wal_fsync_duration_seconds_count
-
-# name: "etcd_disk_wal_write_bytes_total"
-# description: "Total number of bytes written in WAL."
-# type: "gauge"
-etcd_disk_wal_write_bytes_total
-
-# name: "etcd_grpc_proxy_cache_hits_total"
-# description: "Total number of cache hits"
-# type: "gauge"
-etcd_grpc_proxy_cache_hits_total
-
-# name: "etcd_grpc_proxy_cache_keys_total"
-# description: "Total number of keys/ranges cached"
-# type: "gauge"
-etcd_grpc_proxy_cache_keys_total
-
-# name: "etcd_grpc_proxy_cache_misses_total"
-# description: "Total number of cache misses"
-# type: "gauge"
-etcd_grpc_proxy_cache_misses_total
-
-# name: "etcd_grpc_proxy_events_coalescing_total"
-# description: "Total number of events coalescing"
-# type: "counter"
-etcd_grpc_proxy_events_coalescing_total
-
-# name: "etcd_grpc_proxy_watchers_coalescing_total"
-# description: "Total number of current watchers coalescing"
-# type: "gauge"
-etcd_grpc_proxy_watchers_coalescing_total
-
-# name: "etcd_mvcc_db_open_read_transactions"
-# description: "The number of currently open read transactions"
-# type: "gauge"
-etcd_mvcc_db_open_read_transactions
-
-# name: "etcd_mvcc_db_total_size_in_bytes"
-# description: "Total size of the underlying database physically allocated in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_bytes
-
-# name: "etcd_mvcc_db_total_size_in_use_in_bytes"
-# description: "Total size of the underlying database logically in use in bytes."
-# type: "gauge"
-etcd_mvcc_db_total_size_in_use_in_bytes
-
-# name: "etcd_mvcc_delete_total"
-# description: "Total number of deletes seen by this member."
-# type: "counter"
-etcd_mvcc_delete_total
-
-# name: "etcd_mvcc_hash_duration_seconds"
-# description: "The latency distribution of storage hash operation."
-# type: "histogram"
-etcd_mvcc_hash_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_duration_seconds_sum
-etcd_mvcc_hash_duration_seconds_count
-
-# name: "etcd_mvcc_hash_rev_duration_seconds"
-# description: "The latency distribution of storage hash by revision operation."
-# type: "histogram"
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.01"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.02"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.04"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.08"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.16"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.32"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="0.64"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="1.28"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="2.56"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="5.12"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="10.24"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="20.48"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="40.96"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="81.92"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="163.84"}
-etcd_mvcc_hash_rev_duration_seconds_bucket{le="+Inf"}
-etcd_mvcc_hash_rev_duration_seconds_sum
-etcd_mvcc_hash_rev_duration_seconds_count
-
-# name: "etcd_mvcc_put_total"
-# description: "Total number of puts seen by this member."
-# type: "counter"
-etcd_mvcc_put_total
-
-# name: "etcd_mvcc_range_total"
-# description: "Total number of ranges seen by this member."
-# type: "counter"
-etcd_mvcc_range_total
-
-# name: "etcd_mvcc_txn_total"
-# description: "Total number of txns seen by this member."
-# type: "counter"
-etcd_mvcc_txn_total
-
-# name: "etcd_network_active_peers"
-# description: "The current number of active peer connections."
-# type: "gauge"
-etcd_network_active_peers{Local="LOCAL_NODE_ID",Remote="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_client_grpc_received_bytes_total"
-# description: "The total number of bytes received from grpc clients."
-# type: "counter"
-etcd_network_client_grpc_received_bytes_total
-
-# name: "etcd_network_client_grpc_sent_bytes_total"
-# description: "The total number of bytes sent to grpc clients."
-# type: "counter"
-etcd_network_client_grpc_sent_bytes_total
-
-# name: "etcd_network_peer_received_bytes_total"
-# description: "The total number of bytes received from peers."
-# type: "counter"
-etcd_network_peer_received_bytes_total{From="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_round_trip_time_seconds"
-# description: "Round-Trip-Time histogram between peers"
-# type: "histogram"
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="+Inf"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0001"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0002"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0004"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0008"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0016"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0032"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0064"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0128"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0256"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.0512"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.1024"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.2048"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.4096"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="0.8192"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="1.6384"}
-etcd_network_peer_round_trip_time_seconds_bucket{To="REMOTE_PEER_NODE_ID",le="3.2768"}
-etcd_network_peer_round_trip_time_seconds_count{To="REMOTE_PEER_NODE_ID"}
-etcd_network_peer_round_trip_time_seconds_sum{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_network_peer_sent_bytes_total"
-# description: "The total number of bytes sent to peers."
-# type: "counter"
-etcd_network_peer_sent_bytes_total{To="REMOTE_PEER_NODE_ID"}
-
-# name: "etcd_server_client_requests_total"
-# description: "The total number of client requests per client version."
-# type: "counter"
-etcd_server_client_requests_total{client_api_version="3.5",type="stream"}
-etcd_server_client_requests_total{client_api_version="3.5",type="unary"}
-
-# name: "etcd_server_go_version"
-# description: "Which Go version server is running with. 1 for 'server_go_version' label with current version."
-# type: "gauge"
-etcd_server_go_version{server_go_version="go1.12.17"}
-
-# name: "etcd_server_has_leader"
-# description: "Whether or not a leader exists. 1 is existence, 0 is not."
-# type: "gauge"
-etcd_server_has_leader
-
-# name: "etcd_server_health_failures"
-# description: "The total number of failed health checks"
-# type: "counter"
-etcd_server_health_failures
-
-# name: "etcd_server_health_success"
-# description: "The total number of successful health checks"
-# type: "counter"
-etcd_server_health_success
-
-# name: "etcd_server_heartbeat_send_failures_total"
-# description: "The total number of leader heartbeat send failures (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_heartbeat_send_failures_total
-
-# name: "etcd_server_id"
-# description: "Server or member ID in hexadecimal format. 1 for 'server_id' label with current ID."
-# type: "gauge"
-etcd_server_id{server_id="7339c4e5e833c029"}
-
-# name: "etcd_server_is_leader"
-# description: "Whether or not this member is a leader. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_leader
-
-# name: "etcd_server_is_learner"
-# description: "Whether or not this member is a learner. 1 if is, 0 otherwise."
-# type: "gauge"
-etcd_server_is_learner
-
-# name: "etcd_server_leader_changes_seen_total"
-# description: "The number of leader changes seen."
-# type: "counter"
-etcd_server_leader_changes_seen_total
-
-# name: "etcd_server_learner_promote_successes"
-# description: "The total number of successful learner promotions while this member is leader."
-# type: "counter"
-etcd_server_learner_promote_successes
-
-# name: "etcd_server_proposals_applied_total"
-# description: "The total number of consensus proposals applied."
-# type: "gauge"
-etcd_server_proposals_applied_total
-
-# name: "etcd_server_proposals_committed_total"
-# description: "The total number of consensus proposals committed."
-# type: "gauge"
-etcd_server_proposals_committed_total
-
-# name: "etcd_server_proposals_failed_total"
-# description: "The total number of failed proposals seen."
-# type: "counter"
-etcd_server_proposals_failed_total
-
-# name: "etcd_server_proposals_pending"
-# description: "The current number of pending proposals to commit."
-# type: "gauge"
-etcd_server_proposals_pending
-
-# name: "etcd_server_quota_backend_bytes"
-# description: "Current backend storage quota size in bytes."
-# type: "gauge"
-etcd_server_quota_backend_bytes
-
-# name: "etcd_server_read_indexes_failed_total"
-# description: "The total number of failed read indexes seen."
-# type: "counter"
-etcd_server_read_indexes_failed_total
-
-# name: "etcd_server_slow_apply_total"
-# description: "The total number of slow apply requests (likely overloaded from slow disk)."
-# type: "counter"
-etcd_server_slow_apply_total
-
-# name: "etcd_server_slow_read_indexes_total"
-# description: "The total number of pending read indexes not in sync with leader's or timed out read index requests."
-# type: "counter"
-etcd_server_slow_read_indexes_total
-
-# name: "etcd_server_snapshot_apply_in_progress_total"
-# description: "1 if the server is applying the incoming snapshot. 0 if none."
-# type: "gauge"
-etcd_server_snapshot_apply_in_progress_total
-
-# name: "etcd_server_version"
-# description: "Which version is running. 1 for 'server_version' label with current version."
-# type: "gauge"
-etcd_server_version{server_version="3.4.9"}
-
-# name: "etcd_snap_db_fsync_duration_seconds"
-# description: "The latency distributions of fsyncing .snap.db file"
-# type: "histogram"
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_db_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_fsync_duration_seconds_sum
-etcd_snap_db_fsync_duration_seconds_count
-
-# name: "etcd_snap_db_save_total_duration_seconds"
-# description: "The total latency distributions of v3 snapshot save"
-# type: "histogram"
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.1"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="0.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="1.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="3.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="6.4"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="12.8"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="25.6"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="51.2"}
-etcd_snap_db_save_total_duration_seconds_bucket{le="+Inf"}
-etcd_snap_db_save_total_duration_seconds_sum
-etcd_snap_db_save_total_duration_seconds_count
-
-# name: "etcd_snap_fsync_duration_seconds"
-# description: "The latency distributions of fsync called by snap."
-# type: "histogram"
-etcd_snap_fsync_duration_seconds_bucket{le="0.001"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.002"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.004"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.008"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.016"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.032"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.064"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.128"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.256"}
-etcd_snap_fsync_duration_seconds_bucket{le="0.512"}
-etcd_snap_fsync_duration_seconds_bucket{le="1.024"}
-etcd_snap_fsync_duration_seconds_bucket{le="2.048"}
-etcd_snap_fsync_duration_seconds_bucket{le="4.096"}
-etcd_snap_fsync_duration_seconds_bucket{le="8.192"}
-etcd_snap_fsync_duration_seconds_bucket{le="+Inf"}
-etcd_snap_fsync_duration_seconds_sum
-etcd_snap_fsync_duration_seconds_count
-
-# name: "go_gc_duration_seconds"
-# description: "A summary of the GC invocation durations."
-# type: "summary"
-go_gc_duration_seconds{quantile="0"}
-go_gc_duration_seconds{quantile="0.25"}
-go_gc_duration_seconds{quantile="0.5"}
-go_gc_duration_seconds{quantile="0.75"}
-go_gc_duration_seconds{quantile="1"}
-go_gc_duration_seconds_sum
-go_gc_duration_seconds_count
-
-# name: "go_goroutines"
-# description: "Number of goroutines that currently exist."
-# type: "gauge"
-go_goroutines
-
-# name: "go_info"
-# description: "Information about the Go environment."
-# type: "gauge"
-go_info{version="go1.12.17"}
-
-# name: "go_memstats_alloc_bytes"
-# description: "Number of bytes allocated and still in use."
-# type: "gauge"
-go_memstats_alloc_bytes
-
-# name: "go_memstats_alloc_bytes_total"
-# description: "Total number of bytes allocated, even if freed."
-# type: "counter"
-go_memstats_alloc_bytes_total
-
-# name: "go_memstats_buck_hash_sys_bytes"
-# description: "Number of bytes used by the profiling bucket hash table."
-# type: "gauge"
-go_memstats_buck_hash_sys_bytes
-
-# name: "go_memstats_frees_total"
-# description: "Total number of frees."
-# type: "counter"
-go_memstats_frees_total
-
-# name: "go_memstats_gc_cpu_fraction"
-# description: "The fraction of this program's available CPU time used by the GC since the program started."
-# type: "gauge"
-go_memstats_gc_cpu_fraction
-
-# name: "go_memstats_gc_sys_bytes"
-# description: "Number of bytes used for garbage collection system metadata."
-# type: "gauge"
-go_memstats_gc_sys_bytes
-
-# name: "go_memstats_heap_alloc_bytes"
-# description: "Number of heap bytes allocated and still in use."
-# type: "gauge"
-go_memstats_heap_alloc_bytes
-
-# name: "go_memstats_heap_idle_bytes"
-# description: "Number of heap bytes waiting to be used."
-# type: "gauge"
-go_memstats_heap_idle_bytes
-
-# name: "go_memstats_heap_inuse_bytes"
-# description: "Number of heap bytes that are in use."
-# type: "gauge"
-go_memstats_heap_inuse_bytes
-
-# name: "go_memstats_heap_objects"
-# description: "Number of allocated objects."
-# type: "gauge"
-go_memstats_heap_objects
-
-# name: "go_memstats_heap_released_bytes"
-# description: "Number of heap bytes released to OS."
-# type: "gauge"
-go_memstats_heap_released_bytes
-
-# name: "go_memstats_heap_sys_bytes"
-# description: "Number of heap bytes obtained from system."
-# type: "gauge"
-go_memstats_heap_sys_bytes
-
-# name: "go_memstats_last_gc_time_seconds"
-# description: "Number of seconds since 1970 of last garbage collection."
-# type: "gauge"
-go_memstats_last_gc_time_seconds
-
-# name: "go_memstats_lookups_total"
-# description: "Total number of pointer lookups."
-# type: "counter"
-go_memstats_lookups_total
-
-# name: "go_memstats_mallocs_total"
-# description: "Total number of mallocs."
-# type: "counter"
-go_memstats_mallocs_total
-
-# name: "go_memstats_mcache_inuse_bytes"
-# description: "Number of bytes in use by mcache structures."
-# type: "gauge"
-go_memstats_mcache_inuse_bytes
-
-# name: "go_memstats_mcache_sys_bytes"
-# description: "Number of bytes used for mcache structures obtained from system."
-# type: "gauge"
-go_memstats_mcache_sys_bytes
-
-# name: "go_memstats_mspan_inuse_bytes"
-# description: "Number of bytes in use by mspan structures."
-# type: "gauge"
-go_memstats_mspan_inuse_bytes
-
-# name: "go_memstats_mspan_sys_bytes"
-# description: "Number of bytes used for mspan structures obtained from system."
-# type: "gauge"
-go_memstats_mspan_sys_bytes
-
-# name: "go_memstats_next_gc_bytes"
-# description: "Number of heap bytes when next garbage collection will take place."
-# type: "gauge"
-go_memstats_next_gc_bytes
-
-# name: "go_memstats_other_sys_bytes"
-# description: "Number of bytes used for other system allocations."
-# type: "gauge"
-go_memstats_other_sys_bytes
-
-# name: "go_memstats_stack_inuse_bytes"
-# description: "Number of bytes in use by the stack allocator."
-# type: "gauge"
-go_memstats_stack_inuse_bytes
-
-# name: "go_memstats_stack_sys_bytes"
-# description: "Number of bytes obtained from system for stack allocator."
-# type: "gauge"
-go_memstats_stack_sys_bytes
-
-# name: "go_memstats_sys_bytes"
-# description: "Number of bytes obtained from system."
-# type: "gauge"
-go_memstats_sys_bytes
-
-# name: "go_threads"
-# description: "Number of OS threads created."
-# type: "gauge"
-go_threads
-
-# name: "grpc_server_handled_total"
-# description: "Total number of RPCs completed on the server, regardless of success or failure."
-# type: "counter"
-# gRPC codes:
-# - "Aborted"
-# - "AlreadyExists"
-# - "Canceled"
-# - "DataLoss"
-# - "DeadlineExceeded"
-# - "FailedPrecondition"
-# - "Internal"
-# - "InvalidArgument"
-# - "NotFound"
-# - "OK"
-# - "OutOfRange"
-# - "PermissionDenied"
-# - "ResourceExhausted"
-# - "Unauthenticated"
-# - "Unavailable"
-# - "Unimplemented"
-# - "Unknown"
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_handled_total{grpc_code="CODE",grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_received_total"
-# description: "Total number of RPC stream messages received on the server."
-# type: "counter"
-grpc_server_msg_received_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_received_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_received_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_msg_sent_total"
-# description: "Total number of gRPC stream messages sent by the server."
-# type: "counter"
-grpc_server_msg_sent_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_msg_sent_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_msg_sent_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "grpc_server_started_total"
-# description: "Total number of RPCs started on the server."
-# type: "counter"
-grpc_server_started_total{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"}
-grpc_server_started_total{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"}
-grpc_server_started_total{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}
-grpc_server_started_total{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"}
-
-# name: "process_cpu_seconds_total"
-# description: "Total user and system CPU time spent in seconds."
-# type: "counter"
-process_cpu_seconds_total
-
-# name: "process_max_fds"
-# description: "Maximum number of open file descriptors."
-# type: "gauge"
-process_max_fds
-
-# name: "process_open_fds"
-# description: "Number of open file descriptors."
-# type: "gauge"
-process_open_fds
-
-# name: "process_resident_memory_bytes"
-# description: "Resident memory size in bytes."
-# type: "gauge"
-process_resident_memory_bytes
-
-# name: "process_start_time_seconds"
-# description: "Start time of the process since unix epoch in seconds."
-# type: "gauge"
-process_start_time_seconds
-
-# name: "process_virtual_memory_bytes"
-# description: "Virtual memory size in bytes."
-# type: "gauge"
-process_virtual_memory_bytes
-
-# name: "process_virtual_memory_max_bytes"
-# description: "Maximum amount of virtual memory available in bytes."
-# type: "gauge"
-process_virtual_memory_max_bytes
-
-# name: "promhttp_metric_handler_requests_in_flight"
-# description: "Current number of scrapes being served."
-# type: "gauge"
-promhttp_metric_handler_requests_in_flight
-
-# name: "promhttp_metric_handler_requests_total"
-# description: "Total number of scrapes by HTTP status code."
-# type: "counter"
-promhttp_metric_handler_requests_total{code="200"}
-promhttp_metric_handler_requests_total{code="500"}
-promhttp_metric_handler_requests_total{code="503"}
-
diff --git a/etcd-fix/Documentation/op-guide/_index.md b/etcd-fix/Documentation/op-guide/_index.md
deleted file mode 100644
index 87bcb91..0000000
--- a/etcd-fix/Documentation/op-guide/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Operations guide
-weight: 4000
----
diff --git a/etcd-fix/Documentation/op-guide/authentication.md b/etcd-fix/Documentation/op-guide/authentication.md
deleted file mode 100644
index ef2a8f9..0000000
--- a/etcd-fix/Documentation/op-guide/authentication.md
+++ /dev/null
@@ -1,178 +0,0 @@
----
-title: Role-based access control
----
-
-## Overview
-
-Authentication was added in etcd 2.1. The etcd v3 API slightly modified the authentication feature's API and user interface to better fit the new data model. This guide is intended to help users set up basic authentication and role-based access control in etcd v3.
-
-## Special users and roles
-
-There is one special user, `root`, and one special role, `root`.
-
-### User `root`
-
-The `root` user, which has full access to etcd, must be created before activating authentication. The idea behind the `root` user is for administrative purposes: managing roles and ordinary users. The `root` user must have the `root` role and is allowed to change anything inside etcd.
-
-### Role `root`
-
-The role `root` may be granted to any user, in addition to the root user. A user with the `root` role has both global read-write access and permission to update the cluster's authentication configuration. Furthermore, the `root` role grants privileges for general cluster maintenance, including modifying cluster membership, defragmenting the store, and taking snapshots.
-
-## Working with users
-
-The `user` subcommand for `etcdctl` handles all things having to do with user accounts.
-
-A listing of users can be found with:
-
-```
-$ etcdctl user list
-```
-
-Creating a user is as easy as
-
-```
-$ etcdctl user add myusername
-```
-
-Creating a new user will prompt for a new password. The password can be supplied from standard input when an option `--interactive=false` is given. `--new-user-password` can also be used for supplying the password.
-
-Roles can be granted and revoked for a user with:
-
-```
-$ etcdctl user grant-role myusername foo
-$ etcdctl user revoke-role myusername bar
-```
-
-The user's settings can be inspected with:
-
-```
-$ etcdctl user get myusername
-```
-
-And the password for a user can be changed with
-
-```
-$ etcdctl user passwd myusername
-```
-
-Changing the password will prompt again for a new password. The password can be supplied from standard input when an option `--interactive=false` is given.
-
-Delete an account with:
-```
-$ etcdctl user delete myusername
-```
-
-
-## Working with roles
-
-The `role` subcommand for `etcdctl` handles all things having to do with access controls for particular roles, as were granted to individual users.
-
-List roles with:
-
-```
-$ etcdctl role list
-```
-
-Create a new role with:
-
-```
-$ etcdctl role add myrolename
-```
-
-A role has no password; it merely defines a new set of access rights.
-
-Roles are granted access to a single key or a range of keys.
-
-The range can be specified as an interval [start-key, end-key) where start-key should be lexically less than end-key in an alphabetical manner.
-
-Access can be granted as either read, write, or both, as in the following examples:
-
-```
-# Give read access to a key /foo
-$ etcdctl role grant-permission myrolename read /foo
-
-# Give read access to keys with a prefix /foo/. The prefix is equal to the range [/foo/, /foo0)
-$ etcdctl role grant-permission myrolename --prefix=true read /foo/
-
-# Give write-only access to the key at /foo/bar
-$ etcdctl role grant-permission myrolename write /foo/bar
-
-# Give full access to keys in a range of [key1, key5)
-$ etcdctl role grant-permission myrolename readwrite key1 key5
-
-# Give full access to keys with a prefix /pub/
-$ etcdctl role grant-permission myrolename --prefix=true readwrite /pub/
-```
-
-To see what's granted, we can look at the role at any time:
-
-```
-$ etcdctl role get myrolename
-```
-
-Revocation of permissions is done the same logical way:
-
-```
-$ etcdctl role revoke-permission myrolename /foo/bar
-```
-
-As is removing a role entirely:
-
-```
-$ etcdctl role delete myrolename
-```
-
-## Enabling authentication
-
-The minimal steps to enabling auth are as follows. The administrator can set up users and roles before or after enabling authentication, as a matter of preference.
-
-Make sure the root user is created:
-
-```
-$ etcdctl user add root
-Password of root:
-```
-
-Enable authentication:
-
-```
-$ etcdctl auth enable
-```
-
-After this, etcd is running with authentication enabled. To disable it for any reason, use the reciprocal command:
-
-```
-$ etcdctl --user root:rootpw auth disable
-```
-
-## Using `etcdctl` to authenticate
-
-`etcdctl` supports a similar flag as `curl` for authentication.
-
-```
-$ etcdctl --user user:password get foo
-```
-
-The password can be taken from a prompt:
-
-```
-$ etcdctl --user user get foo
-```
-
-The password can also be taken from a command line flag `--password`:
-
-```
-$ etcdctl --user user --password password get foo
-```
-
-
-Otherwise, all `etcdctl` commands remain the same. Users and roles can still be created and modified, but require authentication by a user with the root role.
-
-## Using TLS Common Name
-As of version v3.2 if an etcd server is launched with the option `--client-cert-auth=true`, the field of Common Name (CN) in the client's TLS cert will be used as an etcd user. In this case, the common name authenticates the user and the client does not need a password. Note that if both of 1. `--client-cert-auth=true` is passed and CN is provided by the client, and 2. username and password are provided by the client, the username and password based authentication is prioritized. Note that this feature cannot be used with gRPC-proxy and gRPC-gateway. This is because gRPC-proxy terminates TLS from its client so all the clients share a cert of the proxy. gRPC-gateway uses a TLS connection internally for transforming HTTP request to gRPC request so it shares the same limitation. Therefore the clients cannot provide their CN to the server correctly. gRPC-proxy will cause an error and stop if a given cert has non empty CN. gRPC-proxy returns an error which indicates that the client has an non empty CN in its cert.
-
-As of version v3.3 if an etcd server is launched with the option `--peer-cert-allowed-cn` or `--peer-cert-allowed-hostname` filtering of inter-peer connections is enabled. Nodes can only join the etcd cluster if their TLS certificate identity match the allowed one.
-See [etcd security page](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md) for more details.
-
-## Notes on password strength
-The `etcdctl` and etcd API do not enforce a specific password length during user creation or user password update operations. It is the responsibility of the administrator to enforce these requirements.
diff --git a/etcd-fix/Documentation/op-guide/clustering.md b/etcd-fix/Documentation/op-guide/clustering.md
deleted file mode 100644
index 99d4114..0000000
--- a/etcd-fix/Documentation/op-guide/clustering.md
+++ /dev/null
@@ -1,498 +0,0 @@
----
-title: Clustering Guide
----
-
-## Overview
-
-Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.
-
-Once an etcd cluster is up and running, adding or removing members is done via [runtime reconfiguration][runtime-conf]. To better understand the design behind runtime reconfiguration, we suggest reading [the runtime configuration design document][runtime-reconf-design].
-
-This guide will cover the following mechanisms for bootstrapping an etcd cluster:
-
-* [Static](#static)
-* [etcd Discovery](#etcd-discovery)
-* [DNS Discovery](#dns-discovery)
-
-Each of the bootstrapping mechanisms will be used to create a three machine etcd cluster with the following details:
-
-|Name|Address|Hostname|
-|------|---------|------------------|
-|infra0|10.0.1.10|infra0.example.com|
-|infra1|10.0.1.11|infra1.example.com|
-|infra2|10.0.1.12|infra2.example.com|
-
-## Static
-
-As we know the cluster members, their addresses and the size of the cluster before starting, we can use an offline bootstrap configuration by setting the `initial-cluster` flag. Each machine will get either the following environment variables or command line:
-
-```
-ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380"
-ETCD_INITIAL_CLUSTER_STATE=new
-```
-
-```
---initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
---initial-cluster-state new
-```
-
-Note that the URLs specified in `initial-cluster` are the _advertised peer URLs_, i.e. they should match the value of `initial-advertise-peer-urls` on the respective nodes.
-
-If spinning up multiple clusters (or creating and destroying a single cluster) with same configuration for testing purpose, it is highly recommended that each cluster is given a unique `initial-cluster-token`. By doing this, etcd can generate unique cluster IDs and member IDs for the clusters even if they otherwise have the exact same configuration. This can protect etcd from cross-cluster-interaction, which might corrupt the clusters.
-
-etcd listens on [`listen-client-urls`][conf-listen-client] to accept client traffic. etcd member advertises the URLs specified in [`advertise-client-urls`][conf-adv-client] to other members, proxies, clients. Please make sure the `advertise-client-urls` are reachable from intended clients. A common mistake is setting `advertise-client-urls` to localhost or leave it as default if the remote clients should reach etcd.
-
-On each machine, start etcd with these flags:
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \
- --listen-peer-urls http://10.0.1.10:2380 \
- --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.10:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
- --initial-cluster-state new
-```
-```
-$ etcd --name infra1 --initial-advertise-peer-urls http://10.0.1.11:2380 \
- --listen-peer-urls http://10.0.1.11:2380 \
- --listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.11:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
- --initial-cluster-state new
-```
-```
-$ etcd --name infra2 --initial-advertise-peer-urls http://10.0.1.12:2380 \
- --listen-peer-urls http://10.0.1.12:2380 \
- --listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.12:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
- --initial-cluster-state new
-```
-
-The command line parameters starting with `--initial-cluster` will be ignored on subsequent runs of etcd. Feel free to remove the environment variables or command line flags after the initial bootstrap process. If the configuration needs changes later (for example, adding or removing members to/from the cluster), see the [runtime configuration][runtime-conf] guide.
-
-### TLS
-
-etcd supports encrypted communication through the TLS protocol. TLS channels can be used for encrypted internal cluster communication between peers as well as encrypted client traffic. This section provides examples for setting up a cluster with peer and client TLS. Additional information detailing etcd's TLS support can be found in the [security guide][security-guide].
-
-#### Self-signed certificates
-
-A cluster using self-signed certificates both encrypts traffic and authenticates its connections. To start a cluster with self-signed certificates, each cluster member should have a unique key pair (`member.crt`, `member.key`) signed by a shared cluster CA certificate (`ca.crt`) for both peer connections and client connections. Certificates may be generated by following the etcd [TLS setup][tls-setup] example.
-
-On each machine, etcd would be started with these flags:
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls https://10.0.1.10:2380 \
- --listen-peer-urls https://10.0.1.10:2380 \
- --listen-client-urls https://10.0.1.10:2379,https://127.0.0.1:2379 \
- --advertise-client-urls https://10.0.1.10:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=https://10.0.1.10:2380,infra1=https://10.0.1.11:2380,infra2=https://10.0.1.12:2380 \
- --initial-cluster-state new \
- --client-cert-auth --trusted-ca-file=/path/to/ca-client.crt \
- --cert-file=/path/to/infra0-client.crt --key-file=/path/to/infra0-client.key \
- --peer-client-cert-auth --peer-trusted-ca-file=ca-peer.crt \
- --peer-cert-file=/path/to/infra0-peer.crt --peer-key-file=/path/to/infra0-peer.key
-```
-```
-$ etcd --name infra1 --initial-advertise-peer-urls https://10.0.1.11:2380 \
- --listen-peer-urls https://10.0.1.11:2380 \
- --listen-client-urls https://10.0.1.11:2379,https://127.0.0.1:2379 \
- --advertise-client-urls https://10.0.1.11:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=https://10.0.1.10:2380,infra1=https://10.0.1.11:2380,infra2=https://10.0.1.12:2380 \
- --initial-cluster-state new \
- --client-cert-auth --trusted-ca-file=/path/to/ca-client.crt \
- --cert-file=/path/to/infra1-client.crt --key-file=/path/to/infra1-client.key \
- --peer-client-cert-auth --peer-trusted-ca-file=ca-peer.crt \
- --peer-cert-file=/path/to/infra1-peer.crt --peer-key-file=/path/to/infra1-peer.key
-```
-```
-$ etcd --name infra2 --initial-advertise-peer-urls https://10.0.1.12:2380 \
- --listen-peer-urls https://10.0.1.12:2380 \
- --listen-client-urls https://10.0.1.12:2379,https://127.0.0.1:2379 \
- --advertise-client-urls https://10.0.1.12:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=https://10.0.1.10:2380,infra1=https://10.0.1.11:2380,infra2=https://10.0.1.12:2380 \
- --initial-cluster-state new \
- --client-cert-auth --trusted-ca-file=/path/to/ca-client.crt \
- --cert-file=/path/to/infra2-client.crt --key-file=/path/to/infra2-client.key \
- --peer-client-cert-auth --peer-trusted-ca-file=ca-peer.crt \
- --peer-cert-file=/path/to/infra2-peer.crt --peer-key-file=/path/to/infra2-peer.key
-```
-
-#### Automatic certificates
-
-If the cluster needs encrypted communication but does not require authenticated connections, etcd can be configured to automatically generate its keys. On initialization, each member creates its own set of keys based on its advertised IP addresses and hosts.
-
-On each machine, etcd would be started with these flags:
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls https://10.0.1.10:2380 \
- --listen-peer-urls https://10.0.1.10:2380 \
- --listen-client-urls https://10.0.1.10:2379,https://127.0.0.1:2379 \
- --advertise-client-urls https://10.0.1.10:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=https://10.0.1.10:2380,infra1=https://10.0.1.11:2380,infra2=https://10.0.1.12:2380 \
- --initial-cluster-state new \
- --auto-tls \
- --peer-auto-tls
-```
-```
-$ etcd --name infra1 --initial-advertise-peer-urls https://10.0.1.11:2380 \
- --listen-peer-urls https://10.0.1.11:2380 \
- --listen-client-urls https://10.0.1.11:2379,https://127.0.0.1:2379 \
- --advertise-client-urls https://10.0.1.11:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=https://10.0.1.10:2380,infra1=https://10.0.1.11:2380,infra2=https://10.0.1.12:2380 \
- --initial-cluster-state new \
- --auto-tls \
- --peer-auto-tls
-```
-```
-$ etcd --name infra2 --initial-advertise-peer-urls https://10.0.1.12:2380 \
- --listen-peer-urls https://10.0.1.12:2380 \
- --listen-client-urls https://10.0.1.12:2379,https://127.0.0.1:2379 \
- --advertise-client-urls https://10.0.1.12:2379 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-cluster infra0=https://10.0.1.10:2380,infra1=https://10.0.1.11:2380,infra2=https://10.0.1.12:2380 \
- --initial-cluster-state new \
- --auto-tls \
- --peer-auto-tls
-```
-
-### Error cases
-
-In the following example, we have not included our new host in the list of enumerated nodes. If this is a new cluster, the node _must_ be added to the list of initial cluster members.
-
-```
-$ etcd --name infra1 --initial-advertise-peer-urls http://10.0.1.11:2380 \
- --listen-peer-urls https://10.0.1.11:2380 \
- --listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.11:2379 \
- --initial-cluster infra0=http://10.0.1.10:2380 \
- --initial-cluster-state new
-etcd: infra1 not listed in the initial cluster config
-exit 1
-```
-
-In this example, we are attempting to map a node (infra0) on a different address (127.0.0.1:2380) than its enumerated address in the cluster list (10.0.1.10:2380). If this node is to listen on multiple addresses, all addresses _must_ be reflected in the "initial-cluster" configuration directive.
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls http://127.0.0.1:2380 \
- --listen-peer-urls http://10.0.1.10:2380 \
- --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.10:2379 \
- --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
- --initial-cluster-state=new
-etcd: error setting up initial cluster: infra0 has different advertised URLs in the cluster and advertised peer URLs list
-exit 1
-```
-
-If a peer is configured with a different set of configuration arguments and attempts to join this cluster, etcd will report a cluster ID mismatch will exit.
-
-```
-$ etcd --name infra3 --initial-advertise-peer-urls http://10.0.1.13:2380 \
- --listen-peer-urls http://10.0.1.13:2380 \
- --listen-client-urls http://10.0.1.13:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.13:2379 \
- --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra3=http://10.0.1.13:2380 \
- --initial-cluster-state=new
-etcd: conflicting cluster ID to the target cluster (c6ab534d07e8fcc4 != bc25ea2a74fb18b0). Exiting.
-exit 1
-```
-
-## Discovery
-
-In a number of cases, the IPs of the cluster peers may not be known ahead of time. This is common when utilizing cloud providers or when the network uses DHCP. In these cases, rather than specifying a static configuration, use an existing etcd cluster to bootstrap a new one. This process is called "discovery".
-
-There two methods that can be used for discovery:
-
-* etcd discovery service
-* DNS SRV records
-
-### etcd discovery
-
-To better understand the design of the discovery service protocol, we suggest reading the discovery service protocol [documentation][discovery-proto].
-
-#### Lifetime of a discovery URL
-
-A discovery URL identifies a unique etcd cluster. Instead of reusing an existing discovery URL, each etcd instance shares a new discovery URL to bootstrap the new cluster.
-
-Moreover, discovery URLs should ONLY be used for the initial bootstrapping of a cluster. To change cluster membership after the cluster is already running, see the [runtime reconfiguration][runtime-conf] guide.
-
-#### Custom etcd discovery service
-
-Discovery uses an existing cluster to bootstrap itself. If using a private etcd cluster, create a URL like so:
-
-```
-$ curl -X PUT https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/_config/size -d value=3
-```
-
-By setting the size key to the URL, a discovery URL is created with an expected cluster size of 3.
-
-The URL to use in this case will be `https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83` and the etcd members will use the `https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83` directory for registration as they start.
-
-**Each member must have a different name flag specified. `Hostname` or `machine-id` can be a good choice. Or discovery will fail due to duplicated name.**
-
-Now we start etcd with those relevant flags for each member:
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \
- --listen-peer-urls http://10.0.1.10:2380 \
- --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.10:2379 \
- --discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83
-```
-```
-$ etcd --name infra1 --initial-advertise-peer-urls http://10.0.1.11:2380 \
- --listen-peer-urls http://10.0.1.11:2380 \
- --listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.11:2379 \
- --discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83
-```
-```
-$ etcd --name infra2 --initial-advertise-peer-urls http://10.0.1.12:2380 \
- --listen-peer-urls http://10.0.1.12:2380 \
- --listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.12:2379 \
- --discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83
-```
-
-This will cause each member to register itself with the custom etcd discovery service and begin the cluster once all machines have been registered.
-
-#### Public etcd discovery service
-
-If no exiting cluster is available, use the public discovery service hosted at `discovery.etcd.io`. To create a private discovery URL using the "new" endpoint, use the command:
-
-```
-$ curl https://discovery.etcd.io/new?size=3
-https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-```
-
-This will create the cluster with an initial size of 3 members. If no size is specified, a default of 3 is used.
-
-```
-ETCD_DISCOVERY=https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-```
-
-```
---discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-```
-
-**Each member must have a different name flag specified or else discovery will fail due to duplicated names. `Hostname` or `machine-id` can be a good choice.**
-
-Now we start etcd with those relevant flags for each member:
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \
- --listen-peer-urls http://10.0.1.10:2380 \
- --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.10:2379 \
- --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-```
-```
-$ etcd --name infra1 --initial-advertise-peer-urls http://10.0.1.11:2380 \
- --listen-peer-urls http://10.0.1.11:2380 \
- --listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.11:2379 \
- --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-```
-```
-$ etcd --name infra2 --initial-advertise-peer-urls http://10.0.1.12:2380 \
- --listen-peer-urls http://10.0.1.12:2380 \
- --listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.12:2379 \
- --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-```
-
-This will cause each member to register itself with the discovery service and begin the cluster once all members have been registered.
-
-Use the environment variable `ETCD_DISCOVERY_PROXY` to cause etcd to use an HTTP proxy to connect to the discovery service.
-
-#### Error and warning cases
-
-##### Discovery server errors
-
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \
- --listen-peer-urls http://10.0.1.10:2380 \
- --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.10:2379 \
- --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-etcd: error: the cluster doesn’t have a size configuration value in https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de/_config
-exit 1
-```
-
-##### Warnings
-
-This is a harmless warning indicating the discovery URL will be ignored on this machine.
-
-```
-$ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \
- --listen-peer-urls http://10.0.1.10:2380 \
- --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://10.0.1.10:2379 \
- --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
-etcdserver: discovery token ignored since a cluster has already been initialized. Valid log found at /var/lib/etcd
-```
-
-### DNS discovery
-
-DNS [SRV records][rfc-srv] can be used as a discovery mechanism.
-The `--discovery-srv` flag can be used to set the DNS domain name where the discovery SRV records can be found.
-Setting `--discovery-srv example.com` causes DNS SRV records to be looked up in the listed order:
-
-* _etcd-server-ssl._tcp.example.com
-* _etcd-server._tcp.example.com
-
-If `_etcd-server-ssl._tcp.example.com` is found then etcd will attempt the bootstrapping process over TLS.
-
-To help clients discover the etcd cluster, the following DNS SRV records are looked up in the listed order:
-
-* _etcd-client._tcp.example.com
-* _etcd-client-ssl._tcp.example.com
-
-If `_etcd-client-ssl._tcp.example.com` is found, clients will attempt to communicate with the etcd cluster over SSL/TLS.
-
-If etcd is using TLS, the discovery SRV record (e.g. `example.com`) must be included in the SSL certificate DNS SAN along with the hostname, or clustering will fail with log messages like the following:
-
-```
-[...] rejected connection from "10.0.1.11:53162" (error "remote error: tls: bad certificate", ServerName "example.com")
-```
-
-If etcd is using TLS without a custom certificate authority, the discovery domain (e.g., example.com) must match the SRV record domain (e.g., infra1.example.com). This is to mitigate attacks that forge SRV records to point to a different domain; the domain would have a valid certificate under PKI but be controlled by an unknown third party.
-
-The `-discovery-srv-name` flag additionally configures a suffix to the SRV name that is queried during discovery.
-Use this flag to differentiate between multiple etcd clusters under the same domain.
-For example, if `discovery-srv=example.com` and `-discovery-srv-name=foo` are set, the following DNS SRV queries are made:
-
-* _etcd-server-ssl-foo._tcp.example.com
-* _etcd-server-foo._tcp.example.com
-
-#### Create DNS SRV records
-
-```
-$ dig +noall +answer SRV _etcd-server._tcp.example.com
-_etcd-server._tcp.example.com. 300 IN SRV 0 0 2380 infra0.example.com.
-_etcd-server._tcp.example.com. 300 IN SRV 0 0 2380 infra1.example.com.
-_etcd-server._tcp.example.com. 300 IN SRV 0 0 2380 infra2.example.com.
-```
-
-```
-$ dig +noall +answer SRV _etcd-client._tcp.example.com
-_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra0.example.com.
-_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra1.example.com.
-_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra2.example.com.
-```
-
-```
-$ dig +noall +answer infra0.example.com infra1.example.com infra2.example.com
-infra0.example.com. 300 IN A 10.0.1.10
-infra1.example.com. 300 IN A 10.0.1.11
-infra2.example.com. 300 IN A 10.0.1.12
-```
-
-#### Bootstrap the etcd cluster using DNS
-
-etcd cluster members can advertise domain names or IP address, the bootstrap process will resolve DNS A records.
-Since 3.2 (3.1 prints warnings) `--listen-peer-urls` and `--listen-client-urls` will reject domain name for the network interface binding.
-
-The resolved address in `--initial-advertise-peer-urls` *must match* one of the resolved addresses in the SRV targets. The etcd member reads the resolved address to find out if it belongs to the cluster defined in the SRV records.
-
-```
-$ etcd --name infra0 \
---discovery-srv example.com \
---initial-advertise-peer-urls http://infra0.example.com:2380 \
---initial-cluster-token etcd-cluster-1 \
---initial-cluster-state new \
---advertise-client-urls http://infra0.example.com:2379 \
---listen-client-urls http://0.0.0.0:2379 \
---listen-peer-urls http://0.0.0.0:2380
-```
-
-```
-$ etcd --name infra1 \
---discovery-srv example.com \
---initial-advertise-peer-urls http://infra1.example.com:2380 \
---initial-cluster-token etcd-cluster-1 \
---initial-cluster-state new \
---advertise-client-urls http://infra1.example.com:2379 \
---listen-client-urls http://0.0.0.0:2379 \
---listen-peer-urls http://0.0.0.0:2380
-```
-
-```
-$ etcd --name infra2 \
---discovery-srv example.com \
---initial-advertise-peer-urls http://infra2.example.com:2380 \
---initial-cluster-token etcd-cluster-1 \
---initial-cluster-state new \
---advertise-client-urls http://infra2.example.com:2379 \
---listen-client-urls http://0.0.0.0:2379 \
---listen-peer-urls http://0.0.0.0:2380
-```
-
-The cluster can also bootstrap using IP addresses instead of domain names:
-
-```
-$ etcd --name infra0 \
---discovery-srv example.com \
---initial-advertise-peer-urls http://10.0.1.10:2380 \
---initial-cluster-token etcd-cluster-1 \
---initial-cluster-state new \
---advertise-client-urls http://10.0.1.10:2379 \
---listen-client-urls http://10.0.1.10:2379 \
---listen-peer-urls http://10.0.1.10:2380
-```
-
-```
-$ etcd --name infra1 \
---discovery-srv example.com \
---initial-advertise-peer-urls http://10.0.1.11:2380 \
---initial-cluster-token etcd-cluster-1 \
---initial-cluster-state new \
---advertise-client-urls http://10.0.1.11:2379 \
---listen-client-urls http://10.0.1.11:2379 \
---listen-peer-urls http://10.0.1.11:2380
-```
-
-```
-$ etcd --name infra2 \
---discovery-srv example.com \
---initial-advertise-peer-urls http://10.0.1.12:2380 \
---initial-cluster-token etcd-cluster-1 \
---initial-cluster-state new \
---advertise-client-urls http://10.0.1.12:2379 \
---listen-client-urls http://10.0.1.12:2379 \
---listen-peer-urls http://10.0.1.12:2380
-```
-
-Since v3.1.0 (except v3.2.9), when `etcd --discovery-srv=example.com` is configured with TLS, server will only authenticate peers/clients when the provided certs have root domain `example.com` as an entry in Subject Alternative Name (SAN) field. See [Notes for DNS SRV][security-guide-dns-srv].
-
-### Gateway
-
-etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. Please read [gateway guide][gateway] for more information.
-
-### Proxy
-
-When the `--proxy` flag is set, etcd runs in [proxy mode][proxy]. This proxy mode only supports the etcd v2 API; there are no plans to support the v3 API. Instead, for v3 API support, there will be a new proxy with enhanced features following the etcd 3.0 release.
-
-To setup an etcd cluster with proxies of v2 API, please read the the [clustering doc in etcd 2.3 release][clustering_etcd2].
-
-[conf-adv-client]: configuration.md#--advertise-client-urls
-[conf-listen-client]: configuration.md#--listen-client-urls
-[discovery-proto]: ../dev-internal/discovery_protocol.md
-[rfc-srv]: http://www.ietf.org/rfc/rfc2052.txt
-[runtime-conf]: runtime-configuration.md
-[runtime-reconf-design]: runtime-reconf-design.md
-[proxy]: https://github.com/coreos/etcd/blob/release-2.3/Documentation/proxy.md
-[clustering_etcd2]: https://github.com/coreos/etcd/blob/release-2.3/Documentation/clustering.md
-[security-guide]: security.md
-[security-guide-dns-srv]: security.md#notes-for-dns-srv
-[tls-setup]: ../../hack/tls-setup
-[gateway]: gateway.md
diff --git a/etcd-fix/Documentation/op-guide/configuration.md b/etcd-fix/Documentation/op-guide/configuration.md
deleted file mode 100644
index 01ef434..0000000
--- a/etcd-fix/Documentation/op-guide/configuration.md
+++ /dev/null
@@ -1,478 +0,0 @@
----
-title: Configuration flags
----
-
-etcd is configurable through a configuration file, various command-line flags, and environment variables.
-
-A reusable configuration file is a YAML file made with name and value of one or more command-line flags described below. In order to use this file, specify the file path as a value to the `--config-file` flag or `ETCD_CONFIG_FILE` environment variable. The [sample configuration file][sample-config-file] can be used as a starting point to create a new configuration file as needed.
-
-Options set on the command line take precedence over those from the environment. If a configuration file is provided, other command line flags and environment variables will be ignored.
-For example, `etcd --config-file etcd.conf.yml.sample --data-dir /tmp` will ignore the `--data-dir` flag.
-
-The format of environment variable for flag `--my-flag` is `ETCD_MY_FLAG`. It applies to all flags.
-
-The [official etcd ports][iana-ports] are 2379 for client requests and 2380 for peer communication. The etcd ports can be set to accept TLS traffic, non-TLS traffic, or both TLS and non-TLS traffic.
-
-To start etcd automatically using custom settings at startup in Linux, using a [systemd][systemd-intro] unit is highly recommended.
-
-## Member flags
-
-### --name
-+ Human-readable name for this member.
-+ default: "default"
-+ env variable: ETCD_NAME
-+ This value is referenced as this node's own entries listed in the `--initial-cluster` flag (e.g., `default=http://localhost:2380`). This needs to match the key used in the flag if using [static bootstrapping][build-cluster]. When using discovery, each member must have a unique name. `Hostname` or `machine-id` can be a good choice.
-
-### --data-dir
-+ Path to the data directory.
-+ default: "${name}.etcd"
-+ env variable: ETCD_DATA_DIR
-
-### --wal-dir
-+ Path to the dedicated wal directory. If this flag is set, etcd will write the WAL files to the walDir rather than the dataDir. This allows a dedicated disk to be used, and helps avoid io competition between logging and other IO operations.
-+ default: ""
-+ env variable: ETCD_WAL_DIR
-
-### --snapshot-count
-+ Number of committed transactions to trigger a snapshot to disk.
-+ default: "100000"
-+ env variable: ETCD_SNAPSHOT_COUNT
-
-### --heartbeat-interval
-+ Time (in milliseconds) of a heartbeat interval.
-+ default: "100"
-+ env variable: ETCD_HEARTBEAT_INTERVAL
-
-### --election-timeout
-+ Time (in milliseconds) for an election to timeout. See [Documentation/tuning.md][tuning] for details.
-+ default: "1000"
-+ env variable: ETCD_ELECTION_TIMEOUT
-
-### --listen-peer-urls
-+ List of URLs to listen on for peer traffic. This flag tells the etcd to accept incoming requests from its peers on the specified scheme://IP:port combinations. Scheme can be http or https. Alternatively, use `unix://` or `unixs://` for unix sockets. If 0.0.0.0 is specified as the IP, etcd listens to the given port on all interfaces. If an IP address is given as well as a port, etcd will listen on the given port and interface. Multiple URLs may be used to specify a number of addresses and ports to listen on. The etcd will respond to requests from any of the listed addresses and ports.
-+ default: "http://localhost:2380"
-+ env variable: ETCD_LISTEN_PEER_URLS
-+ example: "http://10.0.0.1:2380"
-+ invalid example: "http://example.com:2380" (domain name is invalid for binding)
-
-### --listen-client-urls
-+ List of URLs to listen on for client traffic. This flag tells the etcd to accept incoming requests from the clients on the specified scheme://IP:port combinations. Scheme can be either http or https. Alternatively, use `unix://` or `unixs://` for unix sockets. If 0.0.0.0 is specified as the IP, etcd listens to the given port on all interfaces. If an IP address is given as well as a port, etcd will listen on the given port and interface. Multiple URLs may be used to specify a number of addresses and ports to listen on. The etcd will respond to requests from any of the listed addresses and ports.
-+ default: "http://localhost:2379"
-+ env variable: ETCD_LISTEN_CLIENT_URLS
-+ example: "http://10.0.0.1:2379"
-+ invalid example: "http://example.com:2379" (domain name is invalid for binding)
-
-### --max-snapshots
-+ Maximum number of snapshot files to retain (0 is unlimited)
-+ default: 5
-+ env variable: ETCD_MAX_SNAPSHOTS
-+ The default for users on Windows is unlimited, and manual purging down to 5 (or some preference for safety) is recommended.
-
-### --max-wals
-+ Maximum number of wal files to retain (0 is unlimited)
-+ default: 5
-+ env variable: ETCD_MAX_WALS
-+ The default for users on Windows is unlimited, and manual purging down to 5 (or some preference for safety) is recommended.
-
-### --cors
-+ Comma-separated white list of origins for CORS (cross-origin resource sharing).
-+ default: ""
-+ env variable: ETCD_CORS
-
-### --quota-backend-bytes
-+ Raise alarms when backend size exceeds the given quota (0 defaults to low space quota).
-+ default: 0
-+ env variable: ETCD_QUOTA_BACKEND_BYTES
-
-### --backend-batch-limit
-+ BackendBatchLimit is the maximum operations before commit the backend transaction.
-+ default: 0
-+ env variable: ETCD_BACKEND_BATCH_LIMIT
-
-### --backend-bbolt-freelist-type
-+ The freelist type that etcd backend(bboltdb) uses (array and map are supported types).
-+ default: map
-+ env variable: ETCD_BACKEND_BBOLT_FREELIST_TYPE
-
-### --backend-batch-interval
-+ BackendBatchInterval is the maximum time before commit the backend transaction.
-+ default: 0
-+ env variable: ETCD_BACKEND_BATCH_INTERVAL
-
-### --max-txn-ops
-+ Maximum number of operations permitted in a transaction.
-+ default: 128
-+ env variable: ETCD_MAX_TXN_OPS
-
-### --max-request-bytes
-+ Maximum client request size in bytes the server will accept.
-+ default: 1572864
-+ env variable: ETCD_MAX_REQUEST_BYTES
-
-### --grpc-keepalive-min-time
-+ Minimum duration interval that a client should wait before pinging server.
-+ default: 5s
-+ env variable: ETCD_GRPC_KEEPALIVE_MIN_TIME
-
-### --grpc-keepalive-interval
-+ Frequency duration of server-to-client ping to check if a connection is alive (0 to disable).
-+ default: 2h
-+ env variable: ETCD_GRPC_KEEPALIVE_INTERVAL
-
-### --grpc-keepalive-timeout
-+ Additional duration of wait before closing a non-responsive connection (0 to disable).
-+ default: 20s
-+ env variable: ETCD_GRPC_KEEPALIVE_TIMEOUT
-
-## Clustering flags
-
-`--initial-advertise-peer-urls`, `--initial-cluster`, `--initial-cluster-state`, and `--initial-cluster-token` flags are used in bootstrapping ([static bootstrap][build-cluster], [discovery-service bootstrap][discovery] or [runtime reconfiguration][reconfig]) a new member, and ignored when restarting an existing member.
-
-`--discovery` prefix flags need to be set when using [discovery service][discovery].
-
-### --initial-advertise-peer-urls
-
-+ List of this member's peer URLs to advertise to the rest of the cluster. These addresses are used for communicating etcd data around the cluster. At least one must be routable to all cluster members. These URLs can contain domain names.
-+ default: "http://localhost:2380"
-+ env variable: ETCD_INITIAL_ADVERTISE_PEER_URLS
-+ example: "http://example.com:2380, http://10.0.0.1:2380"
-
-### --initial-cluster
-+ Initial cluster configuration for bootstrapping.
-+ default: "default=http://localhost:2380"
-+ env variable: ETCD_INITIAL_CLUSTER
-+ The key is the value of the `--name` flag for each node provided. The default uses `default` for the key because this is the default for the `--name` flag.
-
-### --initial-cluster-state
-+ Initial cluster state ("new" or "existing"). Set to `new` for all members present during initial static or DNS bootstrapping. If this option is set to `existing`, etcd will attempt to join the existing cluster. If the wrong value is set, etcd will attempt to start but fail safely.
-+ default: "new"
-+ env variable: ETCD_INITIAL_CLUSTER_STATE
-
-[static bootstrap]: clustering.md#static
-
-### --initial-cluster-token
-+ Initial cluster token for the etcd cluster during bootstrap.
-+ default: "etcd-cluster"
-+ env variable: ETCD_INITIAL_CLUSTER_TOKEN
-
-### --advertise-client-urls
-+ List of this member's client URLs to advertise to the rest of the cluster. These URLs can contain domain names.
-+ default: "http://localhost:2379"
-+ env variable: ETCD_ADVERTISE_CLIENT_URLS
-+ example: "http://example.com:2379, http://10.0.0.1:2379"
-+ Be careful if advertising URLs such as http://localhost:2379 from a cluster member and are using the proxy feature of etcd. This will cause loops, because the proxy will be forwarding requests to itself until its resources (memory, file descriptors) are eventually depleted.
-
-### --discovery
-+ Discovery URL used to bootstrap the cluster.
-+ default: ""
-+ env variable: ETCD_DISCOVERY
-
-### --discovery-srv
-+ DNS srv domain used to bootstrap the cluster.
-+ default: ""
-+ env variable: ETCD_DISCOVERY_SRV
-
-### --discovery-srv-name
-+ Suffix to the DNS srv name queried when bootstrapping using DNS.
-+ default: ""
-+ env variable: ETCD_DISCOVERY_SRV_NAME
-
-### --discovery-fallback
-+ Expected behavior ("exit" or "proxy") when discovery services fails. "proxy" supports v2 API only.
-+ default: "proxy"
-+ env variable: ETCD_DISCOVERY_FALLBACK
-
-### --discovery-proxy
-+ HTTP proxy to use for traffic to discovery service.
-+ default: ""
-+ env variable: ETCD_DISCOVERY_PROXY
-
-### --strict-reconfig-check
-+ Reject reconfiguration requests that would cause quorum loss.
-+ default: true
-+ env variable: ETCD_STRICT_RECONFIG_CHECK
-
-### --auto-compaction-retention
-+ Auto compaction retention for mvcc key value store in hour. 0 means disable auto compaction.
-+ default: 0
-+ env variable: ETCD_AUTO_COMPACTION_RETENTION
-
-### --auto-compaction-mode
-+ Interpret 'auto-compaction-retention' one of: 'periodic', 'revision'. 'periodic' for duration based retention, defaulting to hours if no time unit is provided (e.g. '5m'). 'revision' for revision number based retention.
-+ default: periodic
-+ env variable: ETCD_AUTO_COMPACTION_MODE
-
-### --enable-v2
-+ Accept etcd V2 client requests
-+ default: false
-+ env variable: ETCD_ENABLE_V2
-
-## Proxy flags
-
-`--proxy` prefix flags configures etcd to run in [proxy mode][proxy]. "proxy" supports v2 API only.
-
-### --proxy
-+ Proxy mode setting ("off", "readonly" or "on").
-+ default: "off"
-+ env variable: ETCD_PROXY
-
-### --proxy-failure-wait
-+ Time (in milliseconds) an endpoint will be held in a failed state before being reconsidered for proxied requests.
-+ default: 5000
-+ env variable: ETCD_PROXY_FAILURE_WAIT
-
-### --proxy-refresh-interval
-+ Time (in milliseconds) of the endpoints refresh interval.
-+ default: 30000
-+ env variable: ETCD_PROXY_REFRESH_INTERVAL
-
-### --proxy-dial-timeout
-+ Time (in milliseconds) for a dial to timeout or 0 to disable the timeout
-+ default: 1000
-+ env variable: ETCD_PROXY_DIAL_TIMEOUT
-
-### --proxy-write-timeout
-+ Time (in milliseconds) for a write to timeout or 0 to disable the timeout.
-+ default: 5000
-+ env variable: ETCD_PROXY_WRITE_TIMEOUT
-
-### --proxy-read-timeout
-+ Time (in milliseconds) for a read to timeout or 0 to disable the timeout.
-+ Don't change this value if using watches because use long polling requests.
-+ default: 0
-+ env variable: ETCD_PROXY_READ_TIMEOUT
-
-## Security flags
-
-The security flags help to [build a secure etcd cluster][security].
-
-### --ca-file
-
-**DEPRECATED**
-
-+ Path to the client server TLS CA file. `--ca-file ca.crt` could be replaced by `--trusted-ca-file ca.crt --client-cert-auth` and etcd will perform the same.
-+ default: ""
-+ env variable: ETCD_CA_FILE
-
-### --cert-file
-+ Path to the client server TLS cert file.
-+ default: ""
-+ env variable: ETCD_CERT_FILE
-
-### --key-file
-+ Path to the client server TLS key file.
-+ default: ""
-+ env variable: ETCD_KEY_FILE
-
-### --client-cert-auth
-+ Enable client cert authentication.
-+ default: false
-+ env variable: ETCD_CLIENT_CERT_AUTH
-+ CN authentication is not supported by gRPC-gateway.
-
-### --client-crl-file
-+ Path to the client certificate revocation list file.
-+ default: ""
-+ env variable: ETCD_CLIENT_CRL_FILE
-
-### --client-cert-allowed-hostname
-+ Allowed Allowed TLS name for client cert authentication.
-+ default: ""
-+ env variable: ETCD_CLIENT_CERT_ALLOWED_HOSTNAME
-
-### --trusted-ca-file
-+ Path to the client server TLS trusted CA cert file.
-+ default: ""
-+ env variable: ETCD_TRUSTED_CA_FILE
-
-### --auto-tls
-+ Client TLS using generated certificates
-+ default: false
-+ env variable: ETCD_AUTO_TLS
-
-### --peer-ca-file
-
-**DEPRECATED**
-
-+ Path to the peer server TLS CA file. `--peer-ca-file ca.crt` could be replaced by `--peer-trusted-ca-file ca.crt --peer-client-cert-auth` and etcd will perform the same.
-+ default: ""
-+ env variable: ETCD_PEER_CA_FILE
-
-### --peer-cert-file
-+ Path to the peer server TLS cert file. This is the cert for peer-to-peer traffic, used both for server and client.
-+ default: ""
-+ env variable: ETCD_PEER_CERT_FILE
-
-### --peer-key-file
-+ Path to the peer server TLS key file. This is the key for peer-to-peer traffic, used both for server and client.
-+ default: ""
-+ env variable: ETCD_PEER_KEY_FILE
-
-### --peer-client-cert-auth
-+ Enable peer client cert authentication.
-+ default: false
-+ env variable: ETCD_PEER_CLIENT_CERT_AUTH
-
-### --peer-crl-file
-+ Path to the peer certificate revocation list file.
-+ default: ""
-+ env variable: ETCD_PEER_CRL_FILE
-
-### --peer-trusted-ca-file
-+ Path to the peer server TLS trusted CA file.
-+ default: ""
-+ env variable: ETCD_PEER_TRUSTED_CA_FILE
-
-### --peer-auto-tls
-+ Peer TLS using generated certificates
-+ default: false
-+ env variable: ETCD_PEER_AUTO_TLS
-
-### --peer-cert-allowed-cn
-+ Allowed CommonName for inter peer authentication.
-+ default: ""
-+ env variable: ETCD_PEER_CERT_ALLOWED_CN
-
-### --peer-cert-allowed-hostname
-+ Allowed TLS certificate name for inter peer authentication.
-+ default: ""
-+ env variable: ETCD_PEER_CERT_ALLOWED_HOSTNAME
-
-### --cipher-suites
-+ Comma-separated list of supported TLS cipher suites between server/client and peers.
-+ default: ""
-+ env variable: ETCD_CIPHER_SUITES
-
-## Logging flags
-
-### --logger
-
-**Available from v3.4.**
-**WARNING: `--logger=capnslog` to be deprecated in v3.5.**
-
-+ Specify 'zap' for structured logging or 'capnslog'.
-+ default: capnslog
-+ env variable: ETCD_LOGGER
-
-### --log-outputs
-+ Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd, or list of comma separated output targets.
-+ default: default
-+ env variable: ETCD_LOG_OUTPUTS
-+ 'default' use 'stderr' config for v3.4 during zap logger migraion
-
-### --log-level
-
-**Available from v3.4.**
-
-+ Configures log level. Only supports debug, info, warn, error, panic, or fatal.
-+ default: info
-+ env variable: ETCD_LOG_LEVEL
-+ 'default' use 'info'.
-
-### --debug
-
-**WARNING: to be deprecated in v3.5.**
-
-+ Drop the default log level to DEBUG for all subpackages.
-+ default: false (INFO for all packages)
-+ env variable: ETCD_DEBUG
-
-### --log-package-levels
-
-**WARNING: to be deprecated in v3.5.**
-
-+ Set individual etcd subpackages to specific log levels. An example being `etcdserver=WARNING,security=DEBUG`
-+ default: "" (INFO for all packages)
-+ env variable: ETCD_LOG_PACKAGE_LEVELS
-
-## Unsafe flags
-
-Please be CAUTIOUS when using unsafe flags because it will break the guarantees given by the consensus protocol.
-For example, it may panic if other members in the cluster are still alive.
-Follow the instructions when using these flags.
-
-### --force-new-cluster
-+ Force to create a new one-member cluster. It commits configuration changes forcing to remove all existing members in the cluster and add itself, but is strongly discouraged. Please review the [disaster recovery][recovery] documentation for preferred v3 recovery procedures.
-+ default: false
-+ env variable: ETCD_FORCE_NEW_CLUSTER
-
-## Miscellaneous flags
-
-### --version
-+ Print the version and exit.
-+ default: false
-
-### --config-file
-+ Load server configuration from a file. Note that if a configuration file is provided, other command line flags and environment variables will be ignored.
-+ default: ""
-+ example: [sample configuration file][sample-config-file]
-+ env variable: ETCD_CONFIG_FILE
-
-## Profiling flags
-
-### --enable-pprof
-+ Enable runtime profiling data via HTTP server. Address is at client URL + "/debug/pprof/"
-+ default: false
-+ env variable: ETCD_ENABLE_PPROF
-
-### --metrics
-+ Set level of detail for exported metrics, specify 'extensive' to include server side grpc histogram metrics.
-+ default: basic
-+ env variable: ETCD_METRICS
-
-### --listen-metrics-urls
-+ List of additional URLs to listen on that will respond to both the `/metrics` and `/health` endpoints
-+ default: ""
-+ env variable: ETCD_LISTEN_METRICS_URLS
-
-## Auth flags
-
-### --auth-token
-+ Specify a token type and token specific options, especially for JWT. Its format is "type,var1=val1,var2=val2,...". Possible type is 'simple' or 'jwt'. Possible variables are 'sign-method' for specifying a sign method of jwt (its possible values are 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', 'RS512', 'PS256', 'PS384', or 'PS512'), 'pub-key' for specifying a path to a public key for verifying jwt, 'priv-key' for specifying a path to a private key for signing jwt, and 'ttl' for specifying TTL of jwt tokens.
-+ For asymmetric algorithms ('RS', 'PS', 'ES'), the public key is optional, as the private key contains enough information to both sign and verify tokens.
-+ Example option of JWT: '--auth-token jwt,pub-key=app.rsa.pub,priv-key=app.rsa,sign-method=RS512,ttl=10m'
-+ default: "simple"
-+ env variable: ETCD_AUTH_TOKEN
-
-### --bcrypt-cost
-+ Specify the cost / strength of the bcrypt algorithm for hashing auth passwords. Valid values are between 4 and 31.
-+ default: 10
-+ env variable: (not supported)
-
-### --auth-token-ttl
-+ Time (in seconds) of the auth-token-ttl. Support `--auth-token=simple` model only.
-+ default: 300
-+ env variable: (not supported)
-
-## Experimental flags
-
-### --experimental-corrupt-check-time
-+ Duration of time between cluster corruption check passes
-+ default: 0s
-+ env variable: ETCD_EXPERIMENTAL_CORRUPT_CHECK_TIME
-
-### --experimental-compaction-batch-limit
-+ Sets the maximum revisions deleted in each compaction batch.
-+ default: 1000
-+ env variable: ETCD_EXPERIMENTAL_COMPACTION_BATCH_LIMIT
-
-[build-cluster]: clustering.md#static
-[reconfig]: runtime-configuration.md
-[discovery]: clustering.md#discovery
-[iana-ports]: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt
-[proxy]: /docs/v2/proxy
-[restore]: /docs/v2/admin_guide#restoring-a-backup
-[security]: ../security
-[systemd-intro]: http://freedesktop.org/wiki/Software/systemd/
-[tuning]: ../tuning.md#time-parameters
-[sample-config-file]: ../../etcd.conf.yml.sample
-[recovery]: ../recovery#disaster-recovery
-
-### --experimental-peer-skip-client-san-verification
-+ Skip verification of SAN field in client certificate for peer connections. This can be helpful e.g. if
-cluster members run in different networks behind a NAT.
-
- In this case make sure to use peer certificates based on
-a private certificate authority using `--peer-cert-file`, `--peer-key-file`, `--peer-trusted-ca-file`
-+ default: false
-+ env variable: ETCD_EXPERIMENTAL_PEER_SKIP_CLIENT_SAN_VERIFICATION
diff --git a/etcd-fix/Documentation/op-guide/container.md b/etcd-fix/Documentation/op-guide/container.md
deleted file mode 100644
index 3c7693a..0000000
--- a/etcd-fix/Documentation/op-guide/container.md
+++ /dev/null
@@ -1,222 +0,0 @@
----
-title: Run etcd clusters inside containers
----
-
-The following guide shows how to run etcd with rkt and Docker using the [static bootstrap process](clustering.md#static).
-
-## rkt
-
-### Running a single node etcd
-
-The following rkt run command will expose the etcd client API on port 2379 and expose the peer API on port 2380.
-
-Use the host IP address when configuring etcd.
-
-```
-export NODE1=192.168.1.21
-```
-
-Trust the CoreOS [App Signing Key](https://coreos.com/security/app-signing-key/).
-
-```
-sudo rkt trust --prefix quay.io/coreos/etcd
-# gpg key fingerprint is: 18AD 5014 C99E F7E3 BA5F 6CE9 50BD D3E0 FC8A 365E
-```
-
-Run the `v3.2` version of etcd or specify another release version.
-
-```
-sudo rkt run --net=default:IP=${NODE1} quay.io/coreos/etcd:v3.2 -- -name=node1 -advertise-client-urls=http://${NODE1}:2379 -initial-advertise-peer-urls=http://${NODE1}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE1}:2380 -initial-cluster=node1=http://${NODE1}:2380
-```
-
-List the cluster member.
-
-```
-etcdctl --endpoints=http://192.168.1.21:2379 member list
-```
-
-### Running a 3 node etcd cluster
-
-Setup a 3 node cluster with rkt locally, using the `-initial-cluster` flag.
-
-```sh
-export NODE1=172.16.28.21
-export NODE2=172.16.28.22
-export NODE3=172.16.28.23
-```
-
-```
-# node 1
-sudo rkt run --net=default:IP=${NODE1} quay.io/coreos/etcd:v3.2 -- -name=node1 -advertise-client-urls=http://${NODE1}:2379 -initial-advertise-peer-urls=http://${NODE1}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE1}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380
-
-# node 2
-sudo rkt run --net=default:IP=${NODE2} quay.io/coreos/etcd:v3.2 -- -name=node2 -advertise-client-urls=http://${NODE2}:2379 -initial-advertise-peer-urls=http://${NODE2}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE2}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380
-
-# node 3
-sudo rkt run --net=default:IP=${NODE3} quay.io/coreos/etcd:v3.2 -- -name=node3 -advertise-client-urls=http://${NODE3}:2379 -initial-advertise-peer-urls=http://${NODE3}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE3}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380
-```
-
-Verify the cluster is healthy and can be reached.
-
-```
-ETCDCTL_API=3 etcdctl --endpoints=http://172.16.28.21:2379,http://172.16.28.22:2379,http://172.16.28.23:2379 endpoint health
-```
-
-### DNS
-
-Production clusters which refer to peers by DNS name known to the local resolver must mount the [host's DNS configuration](https://coreos.com/kubernetes/docs/latest/kubelet-wrapper.html#customizing-rkt-options).
-
-## Docker
-
-In order to expose the etcd API to clients outside of Docker host, use the host IP address of the container. Please see [`docker inspect`](https://docs.docker.com/engine/reference/commandline/inspect) for more detail on how to get the IP address. Alternatively, specify `--net=host` flag to `docker run` command to skip placing the container inside of a separate network stack.
-
-### Running a single node etcd
-
-Use the host IP address when configuring etcd:
-
-```
-export NODE1=192.168.1.21
-```
-
-Configure a Docker volume to store etcd data:
-
-```
-docker volume create --name etcd-data
-export DATA_DIR="etcd-data"
-```
-
-Run the latest version of etcd:
-
-```
-REGISTRY=quay.io/coreos/etcd
-# available from v3.2.5
-REGISTRY=gcr.io/etcd-development/etcd
-
-docker run \
- -p 2379:2379 \
- -p 2380:2380 \
- --volume=${DATA_DIR}:/etcd-data \
- --name etcd ${REGISTRY}:latest \
- /usr/local/bin/etcd \
- --data-dir=/etcd-data --name node1 \
- --initial-advertise-peer-urls http://${NODE1}:2380 --listen-peer-urls http://0.0.0.0:2380 \
- --advertise-client-urls http://${NODE1}:2379 --listen-client-urls http://0.0.0.0:2379 \
- --initial-cluster node1=http://${NODE1}:2380
-```
-
-List the cluster member:
-
-```
-etcdctl --endpoints=http://${NODE1}:2379 member list
-```
-
-### Running a 3 node etcd cluster
-
-```
-REGISTRY=quay.io/coreos/etcd
-# available from v3.2.5
-REGISTRY=gcr.io/etcd-development/etcd
-
-# For each machine
-ETCD_VERSION=latest
-TOKEN=my-etcd-token
-CLUSTER_STATE=new
-NAME_1=etcd-node-0
-NAME_2=etcd-node-1
-NAME_3=etcd-node-2
-HOST_1=10.20.30.1
-HOST_2=10.20.30.2
-HOST_3=10.20.30.3
-CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
-DATA_DIR=/var/lib/etcd
-
-# For node 1
-THIS_NAME=${NAME_1}
-THIS_IP=${HOST_1}
-docker run \
- -p 2379:2379 \
- -p 2380:2380 \
- --volume=${DATA_DIR}:/etcd-data \
- --name etcd ${REGISTRY}:${ETCD_VERSION} \
- /usr/local/bin/etcd \
- --data-dir=/etcd-data --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-
-# For node 2
-THIS_NAME=${NAME_2}
-THIS_IP=${HOST_2}
-docker run \
- -p 2379:2379 \
- -p 2380:2380 \
- --volume=${DATA_DIR}:/etcd-data \
- --name etcd ${REGISTRY}:${ETCD_VERSION} \
- /usr/local/bin/etcd \
- --data-dir=/etcd-data --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-
-# For node 3
-THIS_NAME=${NAME_3}
-THIS_IP=${HOST_3}
-docker run \
- -p 2379:2379 \
- -p 2380:2380 \
- --volume=${DATA_DIR}:/etcd-data \
- --name etcd ${REGISTRY}:${ETCD_VERSION} \
- /usr/local/bin/etcd \
- --data-dir=/etcd-data --name ${THIS_NAME} \
- --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
- --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
- --initial-cluster ${CLUSTER} \
- --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
-```
-
-To run `etcdctl` using API version 3:
-
-```
-docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl put foo bar"
-```
-
-## Bare Metal
-
-To provision a 3 node etcd cluster on bare-metal, the examples in the [baremetal repo](https://github.com/coreos/coreos-baremetal/tree/master/examples) may be useful.
-
-## Mounting a certificate volume
-
-The etcd release container does not include default root certificates. To use HTTPS with certificates trusted by a root authority (e.g., for discovery), mount a certificate directory into the etcd container:
-
-```
-REGISTRY=quay.io/coreos/etcd
-# available from v3.2.5
-REGISTRY=docker://gcr.io/etcd-development/etcd
-
-rkt run \
- --insecure-options=image \
- --volume etcd-ssl-certs-bundle,kind=host,source=/etc/ssl/certs/ca-certificates.crt \
- --mount volume=etcd-ssl-certs-bundle,target=/etc/ssl/certs/ca-certificates.crt \
- ${REGISTRY}:latest -- --name my-name \
- --initial-advertise-peer-urls http://localhost:2380 --listen-peer-urls http://localhost:2380 \
- --advertise-client-urls http://localhost:2379 --listen-client-urls http://localhost:2379 \
- --discovery https://discovery.etcd.io/c11fbcdc16972e45253491a24fcf45e1
-```
-
-```
-REGISTRY=quay.io/coreos/etcd
-# available from v3.2.5
-REGISTRY=gcr.io/etcd-development/etcd
-
-docker run \
- -p 2379:2379 \
- -p 2380:2380 \
- --volume=/etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt \
- ${REGISTRY}:latest \
- /usr/local/bin/etcd --name my-name \
- --initial-advertise-peer-urls http://localhost:2380 --listen-peer-urls http://localhost:2380 \
- --advertise-client-urls http://localhost:2379 --listen-client-urls http://localhost:2379 \
- --discovery https://discovery.etcd.io/86a9ff6c8cb8b4c4544c1a2f88f8b801
-```
diff --git a/etcd-fix/Documentation/op-guide/etcd-sample-grafana.png b/etcd-fix/Documentation/op-guide/etcd-sample-grafana.png
deleted file mode 100644
index 4789603..0000000
Binary files a/etcd-fix/Documentation/op-guide/etcd-sample-grafana.png and /dev/null differ
diff --git a/etcd-fix/Documentation/op-guide/failures.md b/etcd-fix/Documentation/op-guide/failures.md
deleted file mode 100644
index 6c8011b..0000000
--- a/etcd-fix/Documentation/op-guide/failures.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: Failure modes
----
-
-Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.
-
-In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or [unrecoverable failures][unrecoverable], always [back up][backup] the etcd cluster.
-
-## Minor followers failure
-
-When fewer than half of the followers fail, the etcd cluster can still accept requests and make progress without any major disruption. For example, two follower failures will not affect a five member etcd cluster’s operation. However, clients will lose connectivity to the failed members. Client libraries should hide these interruptions from users for read requests by automatically reconnecting to other members. Operators should expect the system load on the other members to increase due to the reconnections.
-
-## Leader failure
-
-When a leader fails, the etcd cluster automatically elects a new leader. The election does not happen instantly once the leader fails. It takes about an election timeout to elect a new leader since the failure detection model is timeout based.
-
-During the leader election the cluster cannot process any writes. Write requests sent during the election are queued for processing until a new leader is elected.
-
-Writes already sent to the old leader but not yet committed may be lost. The new leader has the power to rewrite any uncommitted entries from the previous leader. From the user perspective, some write requests might time out after a new leader election. However, no committed writes are ever lost.
-
-The new leader extends timeouts automatically for all leases. This mechanism ensures a lease will not expire before the granted TTL even if it was granted by the old leader.
-
-## Majority failure
-
-When the majority members of the cluster fail, the etcd cluster fails and cannot accept more writes.
-
-The etcd cluster can only recover from a majority failure once the majority of members become available. If a majority of members cannot come back online, then the operator must start [disaster recovery][unrecoverable] to recover the cluster.
-
-Once a majority of members works, the etcd cluster elects a new leader automatically and returns to a healthy state. The new leader extends timeouts automatically for all leases. This mechanism ensures no lease expires due to server side unavailability.
-
-## Network partition
-
-A network partition is similar to a minor followers failure or a leader failure. A network partition divides the etcd cluster into two parts; one with a member majority and the other with a member minority. The majority side becomes the available cluster and the minority side is unavailable. There is no “split-brain” in etcd because cluster members are explicitly added/removed with each such change is approved by the current majority of members.
-
-If the leader is on the majority side, then from the majority point of view the failure is a minority follower failure. If the leader is on the minority side, then it is a leader failure. The leader on the minority side steps down and the majority side elects a new leader.
-
-Once the network partition clears, the minority side automatically recognizes the leader from the majority side and recovers its state.
-
-## Failure during bootstrapping
-
-A cluster bootstrap is only successful if all required members successfully start. If any failure happens during bootstrapping, remove the data directories on all members and re-bootstrap the cluster with a new cluster-token or new discovery token.
-
-Of course, it is possible to recover a failed bootstrapped cluster like recovering a running cluster. However, it almost always takes more time and resources to recover that cluster than bootstrapping a new one, since there is no data to recover.
-
-[backup]: maintenance.md#snapshot-backup
-[unrecoverable]: recovery.md#disaster-recovery
diff --git a/etcd-fix/Documentation/op-guide/gateway.md b/etcd-fix/Documentation/op-guide/gateway.md
deleted file mode 100644
index 412b3dc..0000000
--- a/etcd-fix/Documentation/op-guide/gateway.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: etcd gateway
----
-
-## What is etcd gateway
-
-etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses. It does not terminate TLS connections, do TLS handshakes on behalf of its clients, or verify if the connection is secured.
-
-The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.
-
-## When to use etcd gateway
-
-Every application that accesses etcd must first have the address of an etcd cluster client endpoint. If multiple applications on the same server access the same etcd cluster, every application still needs to know the advertised client endpoints of the etcd cluster. If the etcd cluster is reconfigured to have different endpoints, every application may also need to update its endpoint list. This wide-scale reconfiguration is both tedious and error prone.
-
-etcd gateway solves this problem by serving as a stable local endpoint. A typical etcd gateway configuration has each machine running a gateway listening on a local address and every etcd application connecting to its local gateway. The upshot is only the gateway needs to update its endpoints instead of updating each and every application.
-
-In summary, to automatically propagate cluster endpoint changes, the etcd gateway runs on every machine serving multiple applications accessing the same etcd cluster.
-
-## When not to use etcd gateway
-
-- Improving performance
-
-The gateway is not designed for improving etcd cluster performance. It does not provide caching, watch coalescing or batching. The etcd team is developing a caching proxy designed for improving cluster scalability.
-
-- Running on a cluster management system
-
-Advanced cluster management systems like Kubernetes natively support service discovery. Applications can access an etcd cluster with a DNS name or a virtual IP address managed by the system. For example, kube-proxy is equivalent to etcd gateway.
-
-## Start etcd gateway
-
-Consider an etcd cluster with the following static endpoints:
-
-|Name|Address|Hostname|
-|------|---------|------------------|
-|infra0|10.0.1.10|infra0.example.com|
-|infra1|10.0.1.11|infra1.example.com|
-|infra2|10.0.1.12|infra2.example.com|
-
-Start the etcd gateway to use these static endpoints with the command:
-
-```bash
-$ etcd gateway start --endpoints=infra0.example.com,infra1.example.com,infra2.example.com
-2016-08-16 11:21:18.867350 I | tcpproxy: ready to proxy client requests to [...]
-```
-
-Alternatively, if using DNS for service discovery, consider the DNS SRV entries:
-
-```bash
-$ dig +noall +answer SRV _etcd-client._tcp.example.com
-_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra0.example.com.
-_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra1.example.com.
-_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra2.example.com.
-```
-
-```bash
-$ dig +noall +answer infra0.example.com infra1.example.com infra2.example.com
-infra0.example.com. 300 IN A 10.0.1.10
-infra1.example.com. 300 IN A 10.0.1.11
-infra2.example.com. 300 IN A 10.0.1.12
-```
-
-Start the etcd gateway to fetch the endpoints from the DNS SRV entries with the command:
-
-```bash
-$ etcd gateway start --discovery-srv=example.com
-2016-08-16 11:21:18.867350 I | tcpproxy: ready to proxy client requests to [...]
-```
-
-## Configuration flags
-
-### etcd cluster
-
-#### --endpoints
-
- * Comma-separated list of etcd server targets for forwarding client connections.
- * Default: `127.0.0.1:2379`
- * Invalid example: `https://127.0.0.1:2379` (gateway does not terminate TLS). Note that the gateway does not verify the HTTP schema or inspect the requests, it only forwards requests to the given endpoints.
-
-#### --discovery-srv
-
- * DNS domain used to bootstrap cluster endpoints through SRV recrods.
- * Default: (not set)
-
-### Network
-
-#### --listen-addr
-
- * Interface and port to bind for accepting client requests.
- * Default: `127.0.0.1:23790`
-
-#### --retry-delay
-
- * Duration of delay before retrying to connect to failed endpoints.
- * Default: 1m0s
- * Invalid example: "123" (expects time unit in format)
-
-### Security
-
-#### --insecure-discovery
-
- * Accept SRV records that are insecure or susceptible to man-in-the-middle attacks.
- * Default: `false`
-
-#### --trusted-ca-file
-
- * Path to the client TLS CA file for the etcd cluster to verify the endpoints returned from SRV discovery. Note that it is ONLY used for authenticating the discovered endpoints rather than creating connections for data transferring. The gateway never terminates TLS connections or create TLS connections on behalf of its clients.
- * Default: (not set)
diff --git a/etcd-fix/Documentation/op-guide/grafana.json b/etcd-fix/Documentation/op-guide/grafana.json
deleted file mode 100644
index 84baf15..0000000
--- a/etcd-fix/Documentation/op-guide/grafana.json
+++ /dev/null
@@ -1,1225 +0,0 @@
-{
- "etcd.json": {
- "annotations": {
- "list": [
-
- ]
- },
- "description": "etcd sample Grafana dashboard with Prometheus",
- "editable": true,
- "gnetId": null,
- "hideControls": false,
- "links": [
-
- ],
- "refresh": "10s",
- "rows": [
- {
- "collapse": false,
- "editable": true,
- "height": "250px",
- "panels": [
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "rgba(245, 54, 54, 0.9)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(50, 172, 45, 0.97)"
- ],
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "id": 28,
- "interval": null,
- "isNew": true,
- "links": [
-
- ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 3,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "targets": [
- {
- "expr": "sum(etcd_server_has_leader{job=\"$cluster\"})",
- "intervalFactor": 2,
- "legendFormat": "",
- "metric": "etcd_server_has_leader",
- "refId": "A",
- "step": 20
- }
- ],
- "thresholds": "",
- "title": "Up",
- "type": "singlestat",
- "valueFontSize": "200%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "avg"
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 0,
- "id": 23,
- "isNew": true,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 5,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(grpc_server_started_total{job=\"$cluster\",grpc_type=\"unary\"}[5m]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "RPC Rate",
- "metric": "grpc_server_started_total",
- "refId": "A",
- "step": 2
- },
- {
- "expr": "sum(rate(grpc_server_handled_total{job=\"$cluster\",grpc_type=\"unary\",grpc_code!=\"OK\"}[5m]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "RPC Failed Rate",
- "metric": "grpc_server_handled_total",
- "refId": "B",
- "step": 2
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "RPC Rate",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 0,
- "id": 41,
- "isNew": true,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 4,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(grpc_server_started_total{job=\"$cluster\",grpc_service=\"etcdserverpb.Watch\",grpc_type=\"bidi_stream\"}) - sum(grpc_server_handled_total{job=\"$cluster\",grpc_service=\"etcdserverpb.Watch\",grpc_type=\"bidi_stream\"})",
- "intervalFactor": 2,
- "legendFormat": "Watch Streams",
- "metric": "grpc_server_handled_total",
- "refId": "A",
- "step": 4
- },
- {
- "expr": "sum(grpc_server_started_total{job=\"$cluster\",grpc_service=\"etcdserverpb.Lease\",grpc_type=\"bidi_stream\"}) - sum(grpc_server_handled_total{job=\"$cluster\",grpc_service=\"etcdserverpb.Lease\",grpc_type=\"bidi_stream\"})",
- "intervalFactor": 2,
- "legendFormat": "Lease Streams",
- "metric": "grpc_server_handled_total",
- "refId": "B",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Active Streams",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": "",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "showTitle": false,
- "title": "Row"
- },
- {
- "collapse": false,
- "editable": true,
- "height": "250px",
- "panels": [
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "decimals": null,
- "editable": true,
- "error": false,
- "fill": 0,
- "grid": {
-
- },
- "id": 1,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "etcd_mvcc_db_total_size_in_bytes{job=\"$cluster\"}",
- "hide": false,
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} DB Size",
- "metric": "",
- "refId": "A",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "DB Size",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 0,
- "grid": {
-
- },
- "id": 3,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 1,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 4,
- "stack": false,
- "steppedLine": true,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(etcd_disk_wal_fsync_duration_seconds_bucket{job=\"$cluster\"}[5m])) by (instance, le))",
- "hide": false,
- "intervalFactor": 2,
- "legendFormat": "{{instance}} WAL fsync",
- "metric": "etcd_disk_wal_fsync_duration_seconds_bucket",
- "refId": "A",
- "step": 4
- },
- {
- "expr": "histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket{job=\"$cluster\"}[5m])) by (instance, le))",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} DB fsync",
- "metric": "etcd_disk_backend_commit_duration_seconds_bucket",
- "refId": "B",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Disk Sync Duration",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "s",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 0,
- "id": 29,
- "isNew": true,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "process_resident_memory_bytes{job=\"$cluster\"}",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} Resident Memory",
- "metric": "process_resident_memory_bytes",
- "refId": "A",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "title": "New row"
- },
- {
- "collapse": false,
- "editable": true,
- "height": "250px",
- "panels": [
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 5,
- "id": 22,
- "isNew": true,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 3,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(etcd_network_client_grpc_received_bytes_total{job=\"$cluster\"}[5m])",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} Client Traffic In",
- "metric": "etcd_network_client_grpc_received_bytes_total",
- "refId": "A",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Client Traffic In",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 5,
- "id": 21,
- "isNew": true,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 3,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(etcd_network_client_grpc_sent_bytes_total{job=\"$cluster\"}[5m])",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} Client Traffic Out",
- "metric": "etcd_network_client_grpc_sent_bytes_total",
- "refId": "A",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Client Traffic Out",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 0,
- "id": 20,
- "isNew": true,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 3,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(etcd_network_peer_received_bytes_total{job=\"$cluster\"}[5m])) by (instance)",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} Peer Traffic In",
- "metric": "etcd_network_peer_received_bytes_total",
- "refId": "A",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Peer Traffic In",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "decimals": null,
- "editable": true,
- "error": false,
- "fill": 0,
- "grid": {
-
- },
- "id": 16,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 3,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(etcd_network_peer_sent_bytes_total{job=\"$cluster\"}[5m])) by (instance)",
- "hide": false,
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} Peer Traffic Out",
- "metric": "etcd_network_peer_sent_bytes_total",
- "refId": "A",
- "step": 4
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Peer Traffic Out",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "title": "New row"
- },
- {
- "collapse": false,
- "editable": true,
- "height": "250px",
- "panels": [
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "editable": true,
- "error": false,
- "fill": 0,
- "id": 40,
- "isNew": true,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 6,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(etcd_server_proposals_failed_total{job=\"$cluster\"}[5m]))",
- "intervalFactor": 2,
- "legendFormat": "Proposal Failure Rate",
- "metric": "etcd_server_proposals_failed_total",
- "refId": "A",
- "step": 2
- },
- {
- "expr": "sum(etcd_server_proposals_pending{job=\"$cluster\"})",
- "intervalFactor": 2,
- "legendFormat": "Proposal Pending Total",
- "metric": "etcd_server_proposals_pending",
- "refId": "B",
- "step": 2
- },
- {
- "expr": "sum(rate(etcd_server_proposals_committed_total{job=\"$cluster\"}[5m]))",
- "intervalFactor": 2,
- "legendFormat": "Proposal Commit Rate",
- "metric": "etcd_server_proposals_committed_total",
- "refId": "C",
- "step": 2
- },
- {
- "expr": "sum(rate(etcd_server_proposals_applied_total{job=\"$cluster\"}[5m]))",
- "intervalFactor": 2,
- "legendFormat": "Proposal Apply Rate",
- "refId": "D",
- "step": 2
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Raft Proposals",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": "",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- },
- {
- "aliasColors": {
-
- },
- "bars": false,
- "datasource": "$datasource",
- "decimals": 0,
- "editable": true,
- "error": false,
- "fill": 0,
- "id": 19,
- "isNew": true,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [
-
- ],
- "nullPointMode": "connected",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
-
- ],
- "span": 6,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "changes(etcd_server_leader_changes_seen_total{job=\"$cluster\"}[1d])",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} Total Leader Elections Per Day",
- "metric": "etcd_server_leader_changes_seen_total",
- "refId": "A",
- "step": 2
- }
- ],
- "thresholds": [
-
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Total Leader Elections Per Day",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
-
- ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "title": "New row"
- }
- ],
- "schemaVersion": 13,
- "sharedCrosshair": false,
- "style": "dark",
- "tags": [
-
- ],
- "templating": {
- "list": [
- {
- "current": {
- "text": "Prometheus",
- "value": "Prometheus"
- },
- "hide": 0,
- "label": null,
- "name": "datasource",
- "options": [
-
- ],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "type": "datasource"
- },
- {
- "allValue": null,
- "current": {
- "text": "prod",
- "value": "prod"
- },
- "datasource": "$datasource",
- "hide": 0,
- "includeAll": false,
- "label": "cluster",
- "multi": false,
- "name": "cluster",
- "options": [
-
- ],
- "query": "label_values(etcd_server_has_leader, job)",
- "refresh": 1,
- "regex": "",
- "sort": 2,
- "tagValuesQuery": "",
- "tags": [
-
- ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- }
- ]
- },
- "time": {
- "from": "now-15m",
- "to": "now"
- },
- "timepicker": {
- "now": true,
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
- "timezone": "browser",
- "title": "etcd",
- "uid": "c2f4e12cdf69feb95caa41a5a1b423d9",
- "version": 215
- }
-}
diff --git a/etcd-fix/Documentation/op-guide/grpc_proxy.md b/etcd-fix/Documentation/op-guide/grpc_proxy.md
deleted file mode 100644
index d065771..0000000
--- a/etcd-fix/Documentation/op-guide/grpc_proxy.md
+++ /dev/null
@@ -1,252 +0,0 @@
----
-title: gRPC proxy
----
-
-The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.
-
-The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.
-
-## Scalable watch API
-
-The gRPC proxy coalesces multiple client watchers (`c-watchers`) on the same key or range into a single watcher (`s-watcher`) connected to an etcd server. The proxy broadcasts all events from the `s-watcher` to its `c-watchers`.
-
-Assuming N clients watch the same key, one gRPC proxy can reduce the watch load on the etcd server from N to 1. Users can deploy multiple gRPC proxies to further distribute server load.
-
-In the following example, three clients watch on key A. The gRPC proxy coalesces the three watchers, creating a single watcher attached to the etcd server.
-
-```
- +-------------+
- | etcd server |
- +------+------+
- ^ watch key A (s-watcher)
- |
- +-------+-----+
- | gRPC proxy | <-------+
- | | |
- ++-----+------+ |watch key A (c-watcher)
-watch key A ^ ^ watch key A |
-(c-watcher) | | (c-watcher) |
- +-------+-+ ++--------+ +----+----+
- | client | | client | | client |
- | | | | | |
- +---------+ +---------+ +---------+
-```
-
-### Limitations
-
-To effectively coalesce multiple client watchers into a single watcher, the gRPC proxy coalesces new `c-watchers` into an existing `s-watcher` when possible. This coalesced `s-watcher` may be out of sync with the etcd server due to network delays or buffered undelivered events. When the watch revision is unspecified, the gRPC proxy will not guarantee the `c-watcher` will start watching from the most recent store revision. For example, if a client watches from an etcd server with revision 1000, that watcher will begin at revision 1000. If a client watches from the gRPC proxy, may begin watching from revision 990.
-
-Similar limitations apply to cancellation. When the watcher is cancelled, the etcd server’s revision may be greater than the cancellation response revision.
-
-These two limitations should not cause problems for most use cases. In the future, there may be additional options to force the watcher to bypass the gRPC proxy for more accurate revision responses.
-
-## Scalable lease API
-
-To keep its leases alive, a client must establish at least one gRPC stream to an etcd server for sending periodic heartbeats. If an etcd workload involves heavy lease activity spread over many clients, these streams may contribute to excessive CPU utilization. To reduce the total number of streams on the core cluster, the proxy supports lease stream coalescing.
-
-Assuming N clients are updating leases, a single gRPC proxy reduces the stream load on the etcd server from N to 1. Deployments may have additional gRPC proxies to further distribute streams across multiple proxies.
-
-In the following example, three clients update three independent leases (`L1`, `L2`, and `L3`). The gRPC proxy coalesces the three client lease streams (`c-streams`) into a single lease keep alive stream (`s-stream`) attached to an etcd server. The proxy forwards client-side lease heartbeats from the c-streams to the s-stream, then returns the responses to the corresponding c-streams.
-
-```
- +-------------+
- | etcd server |
- +------+------+
- ^
- | heartbeat L1, L2, L3
- | (s-stream)
- v
- +-------+-----+
- | gRPC proxy +<-----------+
- +---+------+--+ | heartbeat L3
- ^ ^ | (c-stream)
-heartbeat L1 | | heartbeat L2 |
-(c-stream) v v (c-stream) v
- +------+-+ +-+------+ +-----+--+
- | client | | client | | client |
- +--------+ +--------+ +--------+
-```
-
-## Abusive clients protection
-
-The gRPC proxy caches responses for requests when it does not break consistency requirements. This can protect the etcd server from abusive clients in tight for loops.
-
-## Start etcd gRPC proxy
-
-Consider an etcd cluster with the following static endpoints:
-
-|Name|Address|Hostname|
-|------|---------|------------------|
-|infra0|10.0.1.10|infra0.example.com|
-|infra1|10.0.1.11|infra1.example.com|
-|infra2|10.0.1.12|infra2.example.com|
-
-Start the etcd gRPC proxy to use these static endpoints with the command:
-
-```bash
-$ etcd grpc-proxy start --endpoints=infra0.example.com,infra1.example.com,infra2.example.com --listen-addr=127.0.0.1:2379
-```
-
-The etcd gRPC proxy starts and listens on port 2379. It forwards client requests to one of the three endpoints provided above.
-
-Sending requests through the proxy:
-
-```bash
-$ ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 put foo bar
-OK
-$ ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 get foo
-foo
-bar
-```
-
-## Client endpoint synchronization and name resolution
-
-The proxy supports registering its endpoints for discovery by writing to a user-defined endpoint. This serves two purposes. First, it allows clients to synchronize their endpoints against a set of proxy endpoints for high availability. Second, it is an endpoint provider for etcd [gRPC naming](../dev-guide/grpc_naming.md).
-
-Register proxy(s) by providing a user-defined prefix:
-
-```bash
-$ etcd grpc-proxy start --endpoints=localhost:2379 \
- --listen-addr=127.0.0.1:23790 \
- --advertise-client-url=127.0.0.1:23790 \
- --resolver-prefix="___grpc_proxy_endpoint" \
- --resolver-ttl=60
-
-$ etcd grpc-proxy start --endpoints=localhost:2379 \
- --listen-addr=127.0.0.1:23791 \
- --advertise-client-url=127.0.0.1:23791 \
- --resolver-prefix="___grpc_proxy_endpoint" \
- --resolver-ttl=60
-```
-
-The proxy will list all its members for member list:
-
-```bash
-ETCDCTL_API=3 etcdctl --endpoints=http://localhost:23790 member list --write-out table
-
-+----+---------+--------------------------------+------------+-----------------+
-| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |
-+----+---------+--------------------------------+------------+-----------------+
-| 0 | started | Gyu-Hos-MBP.sfo.coreos.systems | | 127.0.0.1:23791 |
-| 0 | started | Gyu-Hos-MBP.sfo.coreos.systems | | 127.0.0.1:23790 |
-+----+---------+--------------------------------+------------+-----------------+
-```
-
-This lets clients automatically discover proxy endpoints through Sync:
-
-```go
-cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"http://localhost:23790"},
-})
-if err != nil {
- log.Fatal(err)
-}
-defer cli.Close()
-
-// fetch registered grpc-proxy endpoints
-if err := cli.Sync(context.Background()); err != nil {
- log.Fatal(err)
-}
-```
-
-Note that if a proxy is configured without a resolver prefix,
-
-```bash
-$ etcd grpc-proxy start --endpoints=localhost:2379 \
- --listen-addr=127.0.0.1:23792 \
- --advertise-client-url=127.0.0.1:23792
-```
-
-The member list API to the grpc-proxy returns its own `advertise-client-url`:
-
-```bash
-ETCDCTL_API=3 etcdctl --endpoints=http://localhost:23792 member list --write-out table
-
-+----+---------+--------------------------------+------------+-----------------+
-| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |
-+----+---------+--------------------------------+------------+-----------------+
-| 0 | started | Gyu-Hos-MBP.sfo.coreos.systems | | 127.0.0.1:23792 |
-+----+---------+--------------------------------+------------+-----------------+
-```
-
-## Namespacing
-
-Suppose an application expects full control over the entire key space, but the etcd cluster is shared with other applications. To let all appications run without interfering with each other, the proxy can partition the etcd keyspace so clients appear to have access to the complete keyspace. When the proxy is given the flag `--namespace`, all client requests going into the proxy are translated to have a user-defined prefix on the keys. Accesses to the etcd cluster will be under the prefix and responses from the proxy will strip away the prefix; to the client, it appears as if there is no prefix at all.
-
-To namespace a proxy, start it with `--namespace`:
-
-```bash
-$ etcd grpc-proxy start --endpoints=localhost:2379 \
- --listen-addr=127.0.0.1:23790 \
- --namespace=my-prefix/
-```
-
-Accesses to the proxy are now transparently prefixed on the etcd cluster:
-
-```bash
-$ ETCDCTL_API=3 etcdctl --endpoints=localhost:23790 put my-key abc
-# OK
-$ ETCDCTL_API=3 etcdctl --endpoints=localhost:23790 get my-key
-# my-key
-# abc
-$ ETCDCTL_API=3 etcdctl --endpoints=localhost:2379 get my-prefix/my-key
-# my-prefix/my-key
-# abc
-```
-
-## TLS termination
-
-Terminate TLS from a secure etcd cluster with the gRPC proxy by serving an unencrypted local endpoint.
-
-To try it out, start a single member etcd cluster with client https:
-
-```sh
-$ etcd --listen-client-urls https://localhost:2379 --advertise-client-urls https://localhost:2379 --cert-file=peer.crt --key-file=peer.key --trusted-ca-file=ca.crt --client-cert-auth
-```
-
-Confirm the client port is serving https:
-
-```sh
-# fails
-$ ETCDCTL_API=3 etcdctl --endpoints=http://localhost:2379 endpoint status
-# works
-$ ETCDCTL_API=3 etcdctl --endpoints=https://localhost:2379 --cert=client.crt --key=client.key --cacert=ca.crt endpoint status
-```
-
-Next, start a gRPC proxy on `localhost:12379` by connecting to the etcd endpoint `https://localhost:2379` using the client certificates:
-
-```sh
-$ etcd grpc-proxy start --endpoints=https://localhost:2379 --listen-addr localhost:12379 --cert client.crt --key client.key --cacert=ca.crt --insecure-skip-tls-verify &
-```
-
-Finally, test the TLS termination by putting a key into the proxy over http:
-
-```sh
-$ ETCDCTL_API=3 etcdctl --endpoints=http://localhost:12379 put abc def
-# OK
-```
-
-## Metrics and Health
-
-The gRPC proxy exposes `/health` and Prometheus `/metrics` endpoints for the etcd members defined by `--endpoints`. An alternative define an additional URL that will respond to both the `/metrics` and `/health` endpoints with the `--metrics-addr` flag.
-
-```bash
-$ etcd grpc-proxy start \
- --endpoints https://localhost:2379 \
- --metrics-addr https://0.0.0.0:4443 \
- --listen-addr 127.0.0.1:23790 \
- --key client.key \
- --key-file proxy-server.key \
- --cert client.crt \
- --cert-file proxy-server.crt \
- --cacert ca.pem \
- --trusted-ca-file proxy-ca.pem
- ```
-
-### Known issue
-
-The main interface of the proxy serves both HTTP2 and HTTP/1.1. If proxy is setup with TLS as show in the above example, when using a client such as cURL against the listening interface will require explicitly setting the protocol to HTTP/1.1 on the request to return `/metrics` or `/health`. By using the `--metrics-addr` flag the secondary interface will not have this requirement.
-
-```bash
- $ curl --cacert proxy-ca.pem --key proxy-client.key --cert proxy-client.crt https://127.0.0.1:23790/metrics --http1.1
-```
diff --git a/etcd-fix/Documentation/op-guide/hardware.md b/etcd-fix/Documentation/op-guide/hardware.md
deleted file mode 100644
index 98a4d61..0000000
--- a/etcd-fix/Documentation/op-guide/hardware.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Hardware recommendations
----
-
-etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.
-
-## CPUs
-
-Few etcd deployments require a lot of CPU capacity. Typical clusters need two to four cores to run smoothly.
-Heavily loaded etcd deployments, serving thousands of clients or tens of thousands of requests per second, tend to be CPU bound since etcd can serve requests from memory. Such heavy deployments usually need eight to sixteen dedicated cores.
-
-
-## Memory
-
-etcd has a relatively small memory footprint but its performance still depends on having enough memory. An etcd server will aggressively cache key-value data and spends most of the rest of its memory tracking watchers. Typically 8GB is enough. For heavy deployments with thousands of watchers and millions of keys, allocate 16GB to 64GB memory accordingly.
-
-
-## Disks
-
-Fast disks are the most critical factor for etcd deployment performance and stability.
-
-A slow disk will increase etcd request latency and potentially hurt cluster stability. Since etcd’s consensus protocol depends on persistently storing metadata to a log, a majority of etcd cluster members must write every request down to disk. Additionally, etcd will also incrementally checkpoint its state to disk so it can truncate this log. If these writes take too long, heartbeats may time out and trigger an election, undermining the stability of the cluster. In general, to tell whether a disk is fast enough for etcd, a benchmarking tool such as [fio][fio] can be used. Read [here][fio-blog-post] for an example.
-
-etcd is very sensitive to disk write latency. Typically 50 sequential IOPS (e.g., a 7200 RPM disk) is required. For heavily loaded clusters, 500 sequential IOPS (e.g., a typical local SSD or a high performance virtualized block device) is recommended. Note that most cloud providers publish concurrent IOPS rather than sequential IOPS; the published concurrent IOPS can be 10x greater than the sequential IOPS. To measure actual sequential IOPS, we suggest using a disk benchmarking tool such as [diskbench][diskbench] or [fio][fio].
-
-etcd requires only modest disk bandwidth but more disk bandwidth buys faster recovery times when a failed member has to catch up with the cluster. Typically 10MB/s will recover 100MB data within 15 seconds. For large clusters, 100MB/s or higher is suggested for recovering 1GB data within 15 seconds.
-
-When possible, back etcd’s storage with a SSD. A SSD usually provides lower write latencies and with less variance than a spinning disk, thus improving the stability and reliability of etcd. If using spinning disk, get the fastest disks possible (15,000 RPM). Using RAID 0 is also an effective way to increase disk speed, for both spinning disks and SSD. With at least three cluster members, mirroring and/or parity variants of RAID are unnecessary; etcd's consistent replication already gets high availability.
-
-
-## Network
-
-Multi-member etcd deployments benefit from a fast and reliable network. In order for etcd to be both consistent and partition tolerant, an unreliable network with partitioning outages will lead to poor availability. Low latency ensures etcd members can communicate fast. High bandwidth can reduce the time to recover a failed etcd member. 1GbE is sufficient for common etcd deployments. For large etcd clusters, a 10GbE network will reduce mean time to recovery.
-
-Deploy etcd members within a single data center when possible to avoid latency overheads and lessen the possibility of partitioning events. If a failure domain in another data center is required, choose a data center closer to the existing one. Please also read the [tuning][tuning] documentation for more information on cross data center deployment.
-
-
-## Example hardware configurations
-
-Here are a few example hardware setups on AWS and GCE environments. As mentioned before, but must be stressed regardless, administrators should test an etcd deployment with a simulated workload before putting it into production.
-
-Note that these configurations assume these machines are totally dedicated to etcd. Running other applications along with etcd on these machines may cause resource contentions and lead to cluster instability.
-
-### Small cluster
-
-A small cluster serves fewer than 100 clients, fewer than 200 of requests per second, and stores no more than 100MB of data.
-
-Example application workload: A 50-node Kubernetes cluster
-
-| Provider | Type | vCPUs | Memory (GB) | Max concurrent IOPS | Disk bandwidth (MB/s) |
-|----------|------|-------|--------|------|----------------|
-| AWS | m4.large | 2 | 8 | 3600 | 56.25 |
-| GCE | n1-standard-2 + 50GB PD SSD | 2 | 7.5 | 1500 | 25 |
-
-
-### Medium cluster
-
-A medium cluster serves fewer than 500 clients, fewer than 1,000 of requests per second, and stores no more than 500MB of data.
-
-Example application workload: A 250-node Kubernetes cluster
-
-| Provider | Type | vCPUs | Memory (GB) | Max concurrent IOPS | Disk bandwidth (MB/s) |
-|----------|------|-------|--------|------|----------------|
-| AWS | m4.xlarge | 4 | 16 | 6000 | 93.75 |
-| GCE | n1-standard-4 + 150GB PD SSD | 4 | 15 | 4500 | 75 |
-
-
-### Large cluster
-
-A large cluster serves fewer than 1,500 clients, fewer than 10,000 of requests per second, and stores no more than 1GB of data.
-
-Example application workload: A 1,000-node Kubernetes cluster
-
-| Provider | Type | vCPUs | Memory (GB) | Max concurrent IOPS | Disk bandwidth (MB/s) |
-|----------|------|-------|--------|------|----------------|
-| AWS | m4.2xlarge | 8 | 32 | 8000 | 125 |
-| GCE | n1-standard-8 + 250GB PD SSD | 8 | 30 | 7500 | 125 |
-
-
-### xLarge cluster
-
-An xLarge cluster serves more than 1,500 clients, more than 10,000 of requests per second, and stores more than 1GB data.
-
-Example application workload: A 3,000 node Kubernetes cluster
-
-| Provider | Type | vCPUs | Memory (GB) | Max concurrent IOPS | Disk bandwidth (MB/s) |
-|----------|------|-------|--------|------|----------------|
-| AWS | m4.4xlarge | 16 | 64 | 16,000 | 250 |
-| GCE | n1-standard-16 + 500GB PD SSD | 16 | 60 | 15,000 | 250 |
-
-
-[diskbench]: https://github.com/ongardie/diskbenchmark
-[fio]: https://github.com/axboe/fio
-[fio-blog-post]: https://www.ibm.com/cloud/blog/using-fio-to-tell-whether-your-storage-is-fast-enough-for-etcd
-[tuning]: ../tuning.md
-
diff --git a/etcd-fix/Documentation/op-guide/maintenance.md b/etcd-fix/Documentation/op-guide/maintenance.md
deleted file mode 100644
index 843ee65..0000000
--- a/etcd-fix/Documentation/op-guide/maintenance.md
+++ /dev/null
@@ -1,172 +0,0 @@
----
-title: Maintenance
----
-
-## Overview
-
-An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application's needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.
-
-All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.
-
-## Raft log retention
-
-`etcd --snapshot-count` configures the number of applied Raft entries to hold in-memory before compaction. When `--snapshot-count` reaches, server first persists snapshot data onto disk, and then truncates old entries. When a slow follower requests logs before a compacted index, leader sends the snapshot forcing the follower to overwrite its state.
-
-Higher `--snapshot-count` holds more Raft entries in memory until snapshot, thus causing [recurrent higher memory usage](https://github.com/kubernetes/kubernetes/issues/60589#issuecomment-371977156). Since leader retains latest Raft entries for longer, a slow follower has more time to catch up before leader snapshot. `--snapshot-count` is a tradeoff between higher memory usage and better availabilities of slow followers.
-
-Since v3.2, the default value of `--snapshot-count` has [changed from from 10,000 to 100,000](https://github.com/etcd-io/etcd/pull/7160).
-
-In performance-wise, `--snapshot-count` greater than 100,000 may impact the write throughput. Higher number of in-memory objects can slow down [Go GC mark phase `runtime.scanobject`](https://golang.org/src/runtime/mgc.go), and infrequent memory reclamation makes allocation slow. Performance varies depending on the workloads and system environments. However, in general, too frequent compaction affects cluster availabilities and write throughputs. Too infrequent compaction is also harmful placing too much pressure on Go garbage collector. See https://www.slideshare.net/mitakeh/understanding-performance-aspects-of-etcd-and-raft for more research results.
-
-## History compaction: v3 API Key-Value Database
-
-Since etcd keeps an exact history of its keyspace, this history should be periodically compacted to avoid performance degradation and eventual storage space exhaustion. Compacting the keyspace history drops all information about keys superseded prior to a given keyspace revision. The space used by these keys then becomes available for additional writes to the keyspace.
-
-The keyspace can be compacted automatically with `etcd`'s time windowed history retention policy, or manually with `etcdctl`. The `etcdctl` method provides fine-grained control over the compacting process whereas automatic compacting fits applications that only need key history for some length of time.
-
-An `etcdctl` initiated compaction works as follows:
-
-```sh
-# compact up to revision 3
-$ etcdctl compact 3
-```
-
-Revisions prior to the compaction revision become inaccessible:
-
-```sh
-$ etcdctl get --rev=2 somekey
-Error: rpc error: code = 11 desc = etcdserver: mvcc: required revision has been compacted
-```
-
-### Auto Compaction
-
-`etcd` can be set to automatically compact the keyspace with the `--auto-compaction-*` option with a period of hours:
-
-```sh
-# keep one hour of history
-$ etcd --auto-compaction-retention=1
-```
-
-[v3.0.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.0.md) and [v3.1.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.1.md) with `--auto-compaction-retention=10` run periodic compaction on v3 key-value store for every 10-hour. Compactor only supports periodic compaction. Compactor records latest revisions every 5-minute, until it reaches the first compaction period (e.g. 10-hour). In order to retain key-value history of last compaction period, it uses the last revision that was fetched before compaction period, from the revision records that were collected every 5-minute. When `--auto-compaction-retention=10`, compactor uses revision 100 for compact revision where revision 100 is the latest revision fetched from 10 hours ago. If compaction succeeds or requested revision has already been compacted, it resets period timer and starts over with new historical revision records (e.g. restart revision collect and compact for the next 10-hour period). If compaction fails, it retries in 5 minutes.
-
-[v3.2.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md) compactor runs [every hour](https://github.com/etcd-io/etcd/pull/7875). Compactor only supports periodic compaction. Compactor continues to record latest revisions every 5-minute. For every hour, it uses the last revision that was fetched before compaction period, from the revision records that were collected every 5-minute. That is, for every hour, compactor discards historical data created before compaction period. The retention window of compaction period moves to next hour. 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. If compaction succeeds or requested revision has already been compacted, it resets period timer and removes used compacted revision from historical revision records (e.g. start next revision collect and compaction from previously collected revisions). If compaction fails, it retries in 5 minutes.
-
-In [v3.3.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md), [v3.3.1](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md), and [v3.3.2](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md), `--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). For instance, `--auto-compaction-mode=periodic --auto-compaction-retention=72h` automatically `Compact` with 72-hour retention windown, for every 7.2-hour. For instance, `--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 `--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. Futhermore, 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 granularity.
-
-When `--auto-compaction-retention=10h`, etcd first waits 10-hour for the first compaction, and then does compaction every hour (1/10 of 10-hour) afterwards like this:
-
-```
-0Hr (rev = 1)
-1hr (rev = 10)
-...
-8hr (rev = 80)
-9hr (rev = 90)
-10hr (rev = 100, Compact(1))
-11hr (rev = 110, Compact(10))
-...
-```
-
-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.
-
-In [v3.3.3](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md), `--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). Previously, `--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.** Previously, `--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 `--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 `--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 `--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.
-
-## Defragmentation
-
-After compacting the keyspace, the backend database may exhibit internal fragmentation. Any internal fragmentation is space that is free to use by the backend but still consumes storage space. Compacting old revisions internally fragments `etcd` by leaving gaps in backend database. Fragmented space is available for use by `etcd` but unavailable to the host filesystem. In other words, deleting application data does not reclaim the space on disk.
-
-The process of defragmentation releases this storage space back to the file system. Defragmentation is issued on a per-member so that cluster-wide latency spikes may be avoided.
-
-To defragment an etcd member, use the `etcdctl defrag` command:
-
-```sh
-$ etcdctl defrag
-Finished defragmenting etcd member[127.0.0.1:2379]
-```
-
-**Note that defragmentation to a live member blocks the system from reading and writing data while rebuilding its states**.
-
-**Note that defragmentation request does not get replicated over cluster. That is, the request is only applied to the local node. Specify all members in `--endpoints` flag or `--cluster` flag to automatically find all cluster members.**
-
-Run defragment operations for all endpoints in the cluster associated with the default endpoint:
-
-```bash
-$ etcdctl defrag --cluster
-Finished defragmenting etcd member[http://127.0.0.1:2379]
-Finished defragmenting etcd member[http://127.0.0.1:22379]
-Finished defragmenting etcd member[http://127.0.0.1:32379]
-```
-
-To defragment an etcd data directory directly, while etcd is not running, use the command:
-
-``` sh
-$ etcdctl defrag --data-dir
-```
-
-## Space quota
-
-The space quota in `etcd` ensures the cluster operates in a reliable fashion. Without a space quota, `etcd` may suffer from poor performance if the keyspace grows excessively large, or it may simply run out of storage space, leading to unpredictable cluster behavior. If the keyspace's backend database for any member exceeds the space quota, `etcd` raises a cluster-wide alarm that puts the cluster into a maintenance mode which only accepts key reads and deletes. Only after freeing enough space in the keyspace and defragmenting the backend database, along with clearing the space quota alarm can the cluster resume normal operation.
-
-By default, `etcd` sets a conservative space quota suitable for most applications, but it may be configured on the command line, in bytes:
-
-```sh
-# set a very small 16MB quota
-$ etcd --quota-backend-bytes=$((16*1024*1024))
-```
-
-The space quota can be triggered with a loop:
-
-```sh
-# fill keyspace
-$ while [ 1 ]; do dd if=/dev/urandom bs=1024 count=1024 | ETCDCTL_API=3 etcdctl put key || break; done
-...
-Error: rpc error: code = 8 desc = etcdserver: mvcc: database space exceeded
-# confirm quota space is exceeded
-$ ETCDCTL_API=3 etcdctl --write-out=table endpoint status
-+----------------+------------------+-----------+---------+-----------+-----------+------------+
-| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
-+----------------+------------------+-----------+---------+-----------+-----------+------------+
-| 127.0.0.1:2379 | bf9071f4639c75cc | 2.3.0+git | 18 MB | true | 2 | 3332 |
-+----------------+------------------+-----------+---------+-----------+-----------+------------+
-# confirm alarm is raised
-$ ETCDCTL_API=3 etcdctl alarm list
-memberID:13803658152347727308 alarm:NOSPACE
-```
-
-Removing excessive keyspace data and defragmenting the backend database will put the cluster back within the quota limits:
-
-```sh
-# get current revision
-$ rev=$(ETCDCTL_API=3 etcdctl --endpoints=:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
-# compact away all old revisions
-$ ETCDCTL_API=3 etcdctl compact $rev
-compacted revision 1516
-# defragment away excessive space
-$ ETCDCTL_API=3 etcdctl defrag
-Finished defragmenting etcd member[127.0.0.1:2379]
-# disarm alarm
-$ ETCDCTL_API=3 etcdctl alarm disarm
-memberID:13803658152347727308 alarm:NOSPACE
-# test puts are allowed again
-$ ETCDCTL_API=3 etcdctl put newkey 123
-OK
-```
-
-The metric `etcd_mvcc_db_total_size_in_use_in_bytes` indicates the actual database usage after a history compaction, while `etcd_debugging_mvcc_db_total_size_in_bytes` shows the database size including free space waiting for defragmentation. The latter increases only when the former is close to it, meaning when both of these metrics are close to the quota, a history compaction is required to avoid triggering the space quota.
-
-`etcd_debugging_mvcc_db_total_size_in_bytes` is renamed to `etcd_mvcc_db_total_size_in_bytes` from v3.4.
-
-## Snapshot backup
-
-Snapshotting the `etcd` cluster on a regular basis serves as a durable backup for an etcd keyspace. By taking periodic snapshots of an etcd member's backend database, an `etcd` cluster can be recovered to a point in time with a known good state.
-
-A snapshot is taken with `etcdctl`:
-
-```sh
-$ etcdctl snapshot save backup.db
-$ etcdctl --write-out=table snapshot status backup.db
-+----------+----------+------------+------------+
-| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
-+----------+----------+------------+------------+
-| fe01cf57 | 10 | 7 | 2.1 MB |
-+----------+----------+------------+------------+
-```
diff --git a/etcd-fix/Documentation/op-guide/monitoring.md b/etcd-fix/Documentation/op-guide/monitoring.md
deleted file mode 100644
index 348da3b..0000000
--- a/etcd-fix/Documentation/op-guide/monitoring.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-title: Monitoring etcd
----
-
-Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.
-
-## Debug endpoint
-
-If `--debug` is set, the etcd server exports debugging information on its client port under the `/debug` path. Take care when setting `--debug`, since there will be degraded performance and verbose logging.
-
-The `/debug/pprof` endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here `go tool pprof` gets the top 10 functions where etcd spends its time:
-
-```sh
-$ go tool pprof http://localhost:2379/debug/pprof/profile
-Fetching profile from http://localhost:2379/debug/pprof/profile
-Please wait... (30s)
-Saved profile in /home/etcd/pprof/pprof.etcd.localhost:2379.samples.cpu.001.pb.gz
-Entering interactive mode (type "help" for commands)
-(pprof) top10
-310ms of 480ms total (64.58%)
-Showing top 10 nodes out of 157 (cum >= 10ms)
- flat flat% sum% cum cum%
- 130ms 27.08% 27.08% 130ms 27.08% runtime.futex
- 70ms 14.58% 41.67% 70ms 14.58% syscall.Syscall
- 20ms 4.17% 45.83% 20ms 4.17% github.com/coreos/etcd/vendor/golang.org/x/net/http2/hpack.huffmanDecode
- 20ms 4.17% 50.00% 30ms 6.25% runtime.pcvalue
- 20ms 4.17% 54.17% 50ms 10.42% runtime.schedule
- 10ms 2.08% 56.25% 10ms 2.08% github.com/coreos/etcd/vendor/github.com/coreos/etcd/etcdserver.(*EtcdServer).AuthInfoFromCtx
- 10ms 2.08% 58.33% 10ms 2.08% github.com/coreos/etcd/vendor/github.com/coreos/etcd/etcdserver.(*EtcdServer).Lead
- 10ms 2.08% 60.42% 10ms 2.08% github.com/coreos/etcd/vendor/github.com/coreos/etcd/pkg/wait.(*timeList).Trigger
- 10ms 2.08% 62.50% 10ms 2.08% github.com/coreos/etcd/vendor/github.com/prometheus/client_golang/prometheus.(*MetricVec).hashLabelValues
- 10ms 2.08% 64.58% 10ms 2.08% github.com/coreos/etcd/vendor/golang.org/x/net/http2.(*Framer).WriteHeaders
-```
-
-The `/debug/requests` endpoint gives gRPC traces and performance statistics through a web browser. For example, here is a `Range` request for the key `abc`:
-
-```
-When Elapsed (s)
-2017/08/18 17:34:51.999317 0.000244 /etcdserverpb.KV/Range
-17:34:51.999382 . 65 ... RPC: from 127.0.0.1:47204 deadline:4.999377747s
-17:34:51.999395 . 13 ... recv: key:"abc"
-17:34:51.999499 . 104 ... OK
-17:34:51.999535 . 36 ... sent: header: kvs: count:1
-```
-
-## Metrics endpoint
-
-Each etcd server exports metrics under the `/metrics` path on its client port and optionally on locations given by `--listen-metrics-urls`.
-
-The metrics can be fetched with `curl`:
-
-```sh
-$ curl -L http://localhost:2379/metrics | grep -v debugging # ignore unstable debugging metrics
-
-# HELP etcd_disk_backend_commit_duration_seconds The latency distributions of commit called by backend.
-# TYPE etcd_disk_backend_commit_duration_seconds histogram
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"} 72756
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"} 401587
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"} 405979
-etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"} 406464
-...
-```
-
-## Health Check
-
-Since v3.3.0, in addition to responding to the `/metrics` endpoint, any locations specified by `--listen-metrics-urls` will also respond to the `/health` endpoint. This can be useful if the standard endpoint is configured with mutual (client) TLS authentication, but a load balancer or monitoring service still needs access to the health check.
-
-## Prometheus
-
-Running a [Prometheus][prometheus] monitoring service is the easiest way to ingest and record etcd's metrics.
-
-First, install Prometheus:
-
-```sh
-PROMETHEUS_VERSION="2.0.0"
-wget https://github.com/prometheus/prometheus/releases/download/v$PROMETHEUS_VERSION/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz -O /tmp/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz
-tar -xvzf /tmp/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz --directory /tmp/ --strip-components=1
-/tmp/prometheus -version
-```
-
-Set Prometheus's scraper to target the etcd cluster endpoints:
-
-```sh
-cat > /tmp/test-etcd.yaml <> /tmp/test-etcd.log 2>&1 &
-```
-
-Now Prometheus will scrape etcd metrics every 10 seconds.
-
-
-### Alerting
-
-There is a set of [default alerts](../etcd-mixin) for etcd v3 clusters for Prometheus.
-
-> Note: `job` labels may need to be adjusted to fit a particular need. The rules were written to apply to a single cluster so it is recommended to choose labels unique to a cluster.
-
-### Grafana
-
-[Grafana][grafana] has built-in Prometheus support; just add a Prometheus data source:
-
-```
-Name: test-etcd
-Type: Prometheus
-Url: http://localhost:9090
-Access: proxy
-```
-
-Then import the default [etcd dashboard template][template] and customize. For instance, if Prometheus data source name is `my-etcd`, the `datasource` field values in JSON also need to be `my-etcd`.
-
-Sample dashboard:
-
-![](./etcd-sample-grafana.png)
-
-
-[prometheus]: https://prometheus.io/
-[grafana]: http://grafana.org/
-[template]: ./grafana.json
diff --git a/etcd-fix/Documentation/op-guide/performance.md b/etcd-fix/Documentation/op-guide/performance.md
deleted file mode 100644
index 40bb7f9..0000000
--- a/etcd-fix/Documentation/op-guide/performance.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: Performance
----
-
-## Understanding performance
-
-etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard `n-4` on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.
-
-etcd uses the Raft consensus algorithm to replicate requests among members and reach agreement. Consensus performance, especially commit latency, is limited by two physical constraints: network IO latency and disk IO latency. The minimum time to finish an etcd request is the network Round Trip Time (RTT) between members, plus the time `fdatasync` requires to commit the data to permanent storage. The RTT within a datacenter may be as long as several hundred microseconds. A typical RTT within the United States is around 50ms, and can be as slow as 400ms between continents. The typical fdatasync latency for a spinning disk is about 10ms. For SSDs, the latency is often lower than 1ms. To increase throughput, etcd batches multiple requests together and submits them to Raft. This batching policy lets etcd attain high throughput despite heavy load.
-
-There are other sub-systems which impact the overall performance of etcd. Each serialized etcd request must run through etcd’s boltdb-backed MVCC storage engine, which usually takes tens of microseconds to finish. Periodically etcd incrementally snapshots its recently applied requests, merging them back with the previous on-disk snapshot. This process may lead to a latency spike. Although this is usually not a problem on SSDs, it may double the observed latency on HDD. Likewise, inflight compactions can impact etcd’s performance. Fortunately, the impact is often insignificant since the compaction is staggered so it does not compete for resources with regular requests. The RPC system, gRPC, gives etcd a well-defined, extensible API, but it also introduces additional latency, especially for local reads.
-
-## Benchmarks
-
-Benchmarking etcd performance can be done with the [benchmark](https://github.com/coreos/etcd/tree/master/tools/benchmark) CLI tool included with etcd.
-
-For some baseline performance numbers, we consider a three member etcd cluster with the following hardware configuration:
-
-- Google Cloud Compute Engine
-- 3 machines of 8 vCPUs + 16GB Memory + 50GB SSD
-- 1 machine(client) of 16 vCPUs + 30GB Memory + 50GB SSD
-- Ubuntu 17.04
-- etcd 3.2.0, go 1.8.3
-
-With this configuration, etcd can approximately write:
-
-| Number of keys | Key size in bytes | Value size in bytes | Number of connections | Number of clients | Target etcd server | Average write QPS | Average latency per request | Average server RSS |
-|---------------:|------------------:|--------------------:|----------------------:|------------------:|--------------------|------------------:|----------------------------:|-------------------:|
-| 10,000 | 8 | 256 | 1 | 1 | leader only | 583 | 1.6ms | 48 MB |
-| 100,000 | 8 | 256 | 100 | 1000 | leader only | 44,341 | 22ms | 124MB |
-| 100,000 | 8 | 256 | 100 | 1000 | all members | 50,104 | 20ms | 126MB |
-
-Sample commands are:
-
-```sh
-# write to leader
-benchmark --endpoints=${HOST_1} --target-leader --conns=1 --clients=1 \
- put --key-size=8 --sequential-keys --total=10000 --val-size=256
-benchmark --endpoints=${HOST_1} --target-leader --conns=100 --clients=1000 \
- put --key-size=8 --sequential-keys --total=100000 --val-size=256
-
-# write to all members
-benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=100 --clients=1000 \
- put --key-size=8 --sequential-keys --total=100000 --val-size=256
-```
-
-Linearizable read requests go through a quorum of cluster members for consensus to fetch the most recent data. Serializable read requests are cheaper than linearizable reads since they are served by any single etcd member, instead of a quorum of members, in exchange for possibly serving stale data. etcd can read:
-
-| Number of requests | Key size in bytes | Value size in bytes | Number of connections | Number of clients | Consistency | Average read QPS | Average latency per request |
-|-------------------:|------------------:|--------------------:|----------------------:|------------------:|-------------|-----------------:|----------------------------:|
-| 10,000 | 8 | 256 | 1 | 1 | Linearizable | 1,353 | 0.7ms |
-| 10,000 | 8 | 256 | 1 | 1 | Serializable | 2,909 | 0.3ms |
-| 100,000 | 8 | 256 | 100 | 1000 | Linearizable | 141,578 | 5.5ms |
-| 100,000 | 8 | 256 | 100 | 1000 | Serializable | 185,758 | 2.2ms |
-
-Sample commands are:
-
-```sh
-# Single connection read requests
-benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=1 --clients=1 \
- range YOUR_KEY --consistency=l --total=10000
-benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=1 --clients=1 \
- range YOUR_KEY --consistency=s --total=10000
-
-# Many concurrent read requests
-benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=100 --clients=1000 \
- range YOUR_KEY --consistency=l --total=100000
-benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=100 --clients=1000 \
- range YOUR_KEY --consistency=s --total=100000
-```
-
-We encourage running the benchmark test when setting up an etcd cluster for the first time in a new environment to ensure the cluster achieves adequate performance; cluster latency and throughput can be sensitive to minor environment differences.
diff --git a/etcd-fix/Documentation/op-guide/recovery.md b/etcd-fix/Documentation/op-guide/recovery.md
deleted file mode 100644
index 906ea08..0000000
--- a/etcd-fix/Documentation/op-guide/recovery.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: Disaster recovery
----
-
-etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to *(N-1)/2* permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than *(N-1)/2* members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.
-
-To recover from disastrous failure, etcd v3 provides snapshot and restore facilities to recreate the cluster without v3 key data loss. To recover v2 keys, refer to the [v2 admin guide][v2_recover].
-
-[v2_recover]: /docs/v2/admin_guide#disaster-recovery
-
-## Snapshotting the keyspace
-
-Recovering a cluster first needs a snapshot of the keyspace from an etcd member. A snapshot may either be taken from a live member with the `etcdctl snapshot save` command or by copying the `member/snap/db` file from an etcd data directory. For example, the following command snapshots the keyspace served by `$ENDPOINT` to the file `snapshot.db`:
-
-```sh
-$ ETCDCTL_API=3 etcdctl --endpoints $ENDPOINT snapshot save snapshot.db
-```
-
-## Restoring a cluster
-
-To restore a cluster, all that is needed is a single snapshot "db" file. A cluster restore with `etcdctl snapshot restore` creates new etcd data directories; all members should restore using the same snapshot. Restoring overwrites some snapshot metadata (specifically, the member ID and cluster ID); the member loses its former identity. This metadata overwrite prevents the new member from inadvertently joining an existing cluster. Therefore in order to start a cluster from a snapshot, the restore must start a new logical cluster.
-
-Snapshot integrity may be optionally verified at restore time. If the snapshot is taken with `etcdctl snapshot save`, it will have an integrity hash that is checked by `etcdctl snapshot restore`. If the snapshot is copied from the data directory, there is no integrity hash and it will only restore by using `--skip-hash-check`.
-
-A restore initializes a new member of a new cluster, with a fresh cluster configuration using `etcd`'s cluster configuration flags, but preserves the contents of the etcd keyspace. Continuing from the previous example, the following creates new etcd data directories (`m1.etcd`, `m2.etcd`, `m3.etcd`) for a three member cluster:
-
-```sh
-$ ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \
- --name m1 \
- --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-advertise-peer-urls http://host1:2380
-$ ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \
- --name m2 \
- --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-advertise-peer-urls http://host2:2380
-$ ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \
- --name m3 \
- --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \
- --initial-cluster-token etcd-cluster-1 \
- --initial-advertise-peer-urls http://host3:2380
-```
-
-Next, start `etcd` with the new data directories:
-
-```sh
-$ etcd \
- --name m1 \
- --listen-client-urls http://host1:2379 \
- --advertise-client-urls http://host1:2379 \
- --listen-peer-urls http://host1:2380 &
-$ etcd \
- --name m2 \
- --listen-client-urls http://host2:2379 \
- --advertise-client-urls http://host2:2379 \
- --listen-peer-urls http://host2:2380 &
-$ etcd \
- --name m3 \
- --listen-client-urls http://host3:2379 \
- --advertise-client-urls http://host3:2379 \
- --listen-peer-urls http://host3:2380 &
-```
-
-Now the restored etcd cluster should be available and serving the keyspace given by the snapshot.
-
-## Restoring a cluster from membership mis-reconfiguration with wrong URLs
-
-Previously, etcd panics on [membership mis-reconfiguration with wrong URLs](https://github.com/etcd-io/etcd/issues/9173) (v3.2.15 or later returns [error early in client-side](https://github.com/etcd-io/etcd/pull/9174) before etcd server panic).
-
-Recommended way is restore from [snapshot](#snapshotting-the-keyspace). `--force-new-cluster` can be used to overwrite cluster membership while keeping existing application data, but is strongly discouraged because it will panic if other members from previous cluster are still alive. Make sure to save snapshot periodically.
diff --git a/etcd-fix/Documentation/op-guide/runtime-configuration.md b/etcd-fix/Documentation/op-guide/runtime-configuration.md
deleted file mode 100644
index f7f9816..0000000
--- a/etcd-fix/Documentation/op-guide/runtime-configuration.md
+++ /dev/null
@@ -1,250 +0,0 @@
----
-title: Runtime reconfiguration
----
-
-etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.
-
-Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is **highly recommended** to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not be able to make progress and need to [restart from majority failure][majority failure].
-
-To better understand the design behind runtime reconfiguration, please read [the runtime reconfiguration document][runtime-reconf].
-
-## Reconfiguration use cases
-
-This section will walk through some common reasons for reconfiguring a cluster. Most of these reasons just involve combinations of adding or removing a member, which are explained below under [Cluster Reconfiguration Operations][cluster-reconf].
-
-### Cycle or upgrade multiple machines
-
-If multiple cluster members need to move due to planned maintenance (hardware upgrades, network downtime, etc.), it is recommended to modify members one at a time.
-
-It is safe to remove the leader, however there is a brief period of downtime while the election process takes place. If the cluster holds more than 50MB of v2 data, it is recommended to [migrate the member's data directory][member migration].
-
-### Change the cluster size
-
-Increasing the cluster size can enhance [failure tolerance][fault tolerance table] and provide better read performance. Since clients can read from any member, increasing the number of members increases the overall serialized read throughput.
-
-Decreasing the cluster size can improve the write performance of a cluster, with a trade-off of decreased resilience. Writes into the cluster are replicated to a majority of members of the cluster before considered committed. Decreasing the cluster size lowers the majority, and each write is committed more quickly.
-
-### Replace a failed machine
-
-If a machine fails due to hardware failure, data directory corruption, or some other fatal situation, it should be replaced as soon as possible. Machines that have failed but haven't been removed adversely affect the quorum and reduce the tolerance for an additional failure.
-
-To replace the machine, follow the instructions for [removing the member][remove member] from the cluster, and then [add a new member][add member] in its place. If the cluster holds more than 50MB, it is recommended to [migrate the failed member's data directory][member migration] if it is still accessible.
-
-### Restart cluster from majority failure
-
-If the majority of the cluster is lost or all of the nodes have changed IP addresses, then manual action is necessary to recover safely. The basic steps in the recovery process include [creating a new cluster using the old data][disaster recovery], forcing a single member to act as the leader, and finally using runtime configuration to [add new members][add member] to this new cluster one at a time.
-
-### Recover cluster from minority failure
-
-If a specific member is lost, then it is equivalent to replacing a failed machine. The steps are mentioned in [Replace a failed machine](runtime-configuration.md#replace-a-failed-machine).
-
-## Cluster reconfiguration operations
-
-With these use cases in mind, the involved operations can be described for each.
-
-Before making any change, a simple majority (quorum) of etcd members must be available. This is essentially the same requirement for any kind of write to etcd.
-
-All changes to the cluster must be done sequentially:
-
-* To update a single member peerURLs, issue an update operation
-* To replace a healthy single member, remove the old member then add a new member
-* To increase from 3 to 5 members, issue two add operations
-* To decrease from 5 to 3, issue two remove operations
-
-All of these examples use the `etcdctl` command line tool that ships with etcd. To change membership without `etcdctl`, use the [v2 HTTP members API][member-api] or the [v3 gRPC members API][member-api-grpc].
-
-### Update a member
-
-#### Update advertise client URLs
-
-To update the advertise client URLs of a member, simply restart that member with updated client urls flag (`--advertise-client-urls`) or environment variable (`ETCD_ADVERTISE_CLIENT_URLS`). The restarted member will self publish the updated URLs. A wrongly updated client URL will not affect the health of the etcd cluster.
-
-#### Update advertise peer URLs
-
-To update the advertise peer URLs of a member, first update it explicitly via member command and then restart the member. The additional action is required since updating peer URLs changes the cluster wide configuration and can affect the health of the etcd cluster.
-
-To update the advertise peer URLs, first find the target member's ID. To list all members with `etcdctl`:
-
-```sh
-$ etcdctl member list
-6e3bd23ae5f1eae0: name=node2 peerURLs=http://localhost:23802 clientURLs=http://127.0.0.1:23792
-924e2e83e93f2560: name=node3 peerURLs=http://localhost:23803 clientURLs=http://127.0.0.1:23793
-a8266ecf031671f3: name=node1 peerURLs=http://localhost:23801 clientURLs=http://127.0.0.1:23791
-```
-
-This example will `update` a8266ecf031671f3 member ID and change its peerURLs value to `http://10.0.1.10:2380`:
-
-```sh
-$ etcdctl member update a8266ecf031671f3 --peer-urls=http://10.0.1.10:2380
-Updated member with ID a8266ecf031671f3 in cluster
-```
-
-### Remove a member
-
-Suppose the member ID to remove is a8266ecf031671f3. Use the `remove` command to perform the removal:
-
-```sh
-$ etcdctl member remove a8266ecf031671f3
-Removed member a8266ecf031671f3 from cluster
-```
-
-The target member will stop itself at this point and print out the removal in the log:
-
-```
-etcd: this member has been permanently removed from the cluster. Exiting.
-```
-
-It is safe to remove the leader, however the cluster will be inactive while a new leader is elected. This duration is normally the period of election timeout plus the voting process.
-
-### Add a new member
-
-Adding a member is a two step process:
-
- * Add the new member to the cluster via the [HTTP members API][member-api], the [gRPC members API][member-api-grpc], or the `etcdctl member add` command.
- * Start the new member with the new cluster configuration, including a list of the updated members (existing members + the new member).
-
-`etcdctl` adds a new member to the cluster by specifying the member's [name][conf-name] and [advertised peer URLs][conf-adv-peer]:
-
-```sh
-$ etcdctl member add infra3 --peer-urls=http://10.0.1.13:2380
-added member 9bf1b35fc7761a23 to cluster
-
-ETCD_NAME="infra3"
-ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380,infra3=http://10.0.1.13:2380"
-ETCD_INITIAL_CLUSTER_STATE=existing
-```
-
-`etcdctl` has informed the cluster about the new member and printed out the environment variables needed to successfully start it. Now start the new etcd process with the relevant flags for the new member:
-
-```sh
-$ export ETCD_NAME="infra3"
-$ export ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380,infra3=http://10.0.1.13:2380"
-$ export ETCD_INITIAL_CLUSTER_STATE=existing
-$ etcd --listen-client-urls http://10.0.1.13:2379 --advertise-client-urls http://10.0.1.13:2379 --listen-peer-urls http://10.0.1.13:2380 --initial-advertise-peer-urls http://10.0.1.13:2380 --data-dir %data_dir%
-```
-
-The new member will run as a part of the cluster and immediately begin catching up with the rest of the cluster.
-
-If adding multiple members the best practice is to configure a single member at a time and verify it starts correctly before adding more new members. If adding a new member to a 1-node cluster, the cluster cannot make progress before the new member starts because it needs two members as majority to agree on the consensus. This behavior only happens between the time `etcdctl member add` informs the cluster about the new member and the new member successfully establishing a connection to the existing one.
-
-#### Add a new member as learner
-
-Starting from v3.4, etcd supports adding a new member as learner / non-voting member.
-The motivation and design can be found in [design doc][design-learner].
-In order to make the process of adding a new member safer,
-and to reduce cluster downtime when the new member is added, it is recommended that the new member is added to cluster
-as a learner until it catches up. This can be described as a three step process:
-
- * Add the new member as learner via [gRPC members API][member-api-grpc] or the `etcdctl member add --learner` command.
-
- * Start the new member with the new cluster configuration, including a list of the updated members (existing members + the new member).
- This step is exactly the same as before.
-
- * Promote the newly added learner to voting member via [gRPC members API][member-api-grpc] or the `etcdctl member promote` command.
- etcd server validates promote request to ensure its operational safety.
- Only after its raft log has caught up to leader’s can learner be promoted to a voting member.
- If a learner member has not caught up to leader's raft log, member promote request will fail
- (see [error cases when promoting a member] section for more details).
- In this case, user should wait and retry later.
-
-In v3.4, etcd server limits the number of learners that cluster can have to one. The main consideration is to limit the
-extra workload on leader due to propagating data from leader to learner.
-
-Use `etcdctl member add` with flag `--learner` to add new member to cluster as learner.
-
-```sh
-$ etcdctl member add infra3 --peer-urls=http://10.0.1.13:2380 --learner
-Member 9bf1b35fc7761a23 added to cluster a7ef944b95711739
-
-ETCD_NAME="infra3"
-ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380,infra3=http://10.0.1.13:2380"
-ETCD_INITIAL_CLUSTER_STATE=existing
-```
-
-After new etcd process is started for the newly added learner member, use `etcdctl member promote` to promote learner to voting member.
-```
-$ etcdctl member promote 9bf1b35fc7761a23
-Member 9e29bbaa45d74461 promoted in cluster a7ef944b95711739
-```
-
-#### Error cases when adding members
-
-In the following case a new host is not included in the list of enumerated nodes. If this is a new cluster, the node must be added to the list of initial cluster members.
-
-```sh
-$ etcd --name infra3 \
- --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
- --initial-cluster-state existing
-etcdserver: assign ids error: the member count is unequal
-exit 1
-```
-
-In this case, give a different address (10.0.1.14:2380) from the one used to join the cluster (10.0.1.13:2380):
-
-```sh
-$ etcd --name infra4 \
- --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380,infra4=http://10.0.1.14:2380 \
- --initial-cluster-state existing
-etcdserver: assign ids error: unmatched member while checking PeerURLs
-exit 1
-```
-
-If etcd starts using the data directory of a removed member, etcd automatically exits if it connects to any active member in the cluster:
-
-```sh
-$ etcd
-etcd: this member has been permanently removed from the cluster. Exiting.
-exit 1
-```
-
-#### Error cases when adding a learner member
-
-Cannot add learner to cluster if the cluster already has 1 learner (v3.4).
-```
-$ etcdctl member add infra4 --peer-urls=http://10.0.1.14:2380 --learner
-Error: etcdserver: too many learner members in cluster
-```
-
-#### Error cases when promoting a learner member
-
-Learner can only be promoted to voting member if it is in sync with leader.
-```
-$ etcdctl member promote 9bf1b35fc7761a23
-Error: etcdserver: can only promote a learner member which is in sync with leader
-```
-
-Promoting a member that is not a learner will fail.
-```
-$ etcdctl member promote 9bf1b35fc7761a23
-Error: etcdserver: can only promote a learner member
-```
-
-Promoting a member that does not exist in cluster will fail.
-```
-$ etcdctl member promote 12345abcde
-Error: etcdserver: member not found
-```
-
-
-### Strict reconfiguration check mode (`-strict-reconfig-check`)
-
-As described in the above, the best practice of adding new members is to configure a single member at a time and verify it starts correctly before adding more new members. This step by step approach is very important because if newly added members is not configured correctly (for example the peer URLs are incorrect), the cluster can lose quorum. The quorum loss happens since the newly added member are counted in the quorum even if that member is not reachable from other existing members. Also quorum loss might happen if there is a connectivity issue or there are operational issues.
-
-For avoiding this problem, etcd provides an option `-strict-reconfig-check`. If this option is passed to etcd, etcd rejects reconfiguration requests if the number of started members will be less than a quorum of the reconfigured cluster.
-
-It is enabled by default.
-
-[add member]: #add-a-new-member
-[cluster-reconf]: #cluster-reconfiguration-operations
-[conf-adv-peer]: configuration.md#-initial-advertise-peer-urls
-[conf-name]: configuration.md#-name
-[disaster recovery]: recovery.md
-[fault tolerance table]: ../v2/admin_guide.md#fault-tolerance-table
-[majority failure]: #restart-cluster-from-majority-failure
-[member-api]: ../v2/members_api.md
-[member-api-grpc]: ../dev-guide/api_reference_v3.md#service-cluster-etcdserveretcdserverpbrpcproto
-[member migration]: ../v2/admin_guide.md#member-migration
-[remove member]: #remove-a-member
-[runtime-reconf]: runtime-reconf-design.md
-[error cases when promoting a member]: #error-cases-when-promoting-a-learner-member
-[design-learner]: ../learning/design-learner.md
diff --git a/etcd-fix/Documentation/op-guide/runtime-reconf-design.md b/etcd-fix/Documentation/op-guide/runtime-reconf-design.md
deleted file mode 100644
index a3a0a68..0000000
--- a/etcd-fix/Documentation/op-guide/runtime-reconf-design.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Design of runtime reconfiguration
----
-
-Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.
-
-Read on to learn about the design of etcd's runtime reconfiguration commands and how we tackled these problems.
-
-## Two phase config changes keep the cluster safe
-
-In etcd, every runtime reconfiguration has to go through [two phases][add-member] for safety reasons. For example, to add a member, first inform the cluster of the new configuration and then start the new member.
-
-Phase 1 - Inform cluster of new configuration
-
-To add a member into an etcd cluster, make an API call to request a new member to be added to the cluster. This is the only way to add a new member into an existing cluster. The API call returns when the cluster agrees on the configuration change.
-
-Phase 2 - Start new member
-
-To join the new etcd member into the existing cluster, specify the correct `initial-cluster` and set `initial-cluster-state` to `existing`. When the member starts, it will contact the existing cluster first and verify the current cluster configuration matches the expected one specified in `initial-cluster`. When the new member successfully starts, the cluster has reached the expected configuration.
-
-By splitting the process into two discrete phases users are forced to be explicit regarding cluster membership changes. This actually gives users more flexibility and makes things easier to reason about. For example, if there is an attempt to add a new member with the same ID as an existing member in an etcd cluster, the action will fail immediately during phase one without impacting the running cluster. Similar protection is provided to prevent adding new members by mistake. If a new etcd member attempts to join the cluster before the cluster has accepted the configuration change, it will not be accepted by the cluster.
-
-Without the explicit workflow around cluster membership etcd would be vulnerable to unexpected cluster membership changes. For example, if etcd is running under an init system such as systemd, etcd would be restarted after being removed via the membership API, and attempt to rejoin the cluster on startup. This cycle would continue every time a member is removed via the API and systemd is set to restart etcd after failing, which is unexpected.
-
-We expect runtime reconfiguration to be an infrequent operation. We decided to keep it explicit and user-driven to ensure configuration safety and keep the cluster always running smoothly under explicit control.
-
-## Permanent loss of quorum requires new cluster
-
-If a cluster permanently loses a majority of its members, a new cluster will need to be started from an old data directory to recover the previous state.
-
-It is entirely possible to force removing the failed members from the existing cluster to recover. However, we decided not to support this method since it bypasses the normal consensus committing phase, which is unsafe. If the member to remove is not actually dead or force removed through different members in the same cluster, etcd will end up with a diverged cluster with same clusterID. This is very dangerous and hard to debug/fix afterwards.
-
-With a correct deployment, the possibility of permanent majority loss is very low. But it is a severe enough problem that is worth special care. We strongly suggest reading the [disaster recovery documentation][disaster-recovery] and preparing for permanent majority loss before putting etcd into production.
-
-## Do not use public discovery service for runtime reconfiguration
-
-The public discovery service should only be used for bootstrapping a cluster. To join member into an existing cluster, use the runtime reconfiguration API.
-
-The discovery service is designed for bootstrapping an etcd cluster in a cloud environment, when the IP addresses of all the members are not known beforehand. After successfully bootstrapping a cluster, the IP addresses of all the members are known. Technically, the discovery service should no longer be needed.
-
-It seems that using public discovery service is a convenient way to do runtime reconfiguration, after all discovery service already has all the cluster configuration information. However relying on public discovery service brings troubles:
-
-1. it introduces external dependencies for the entire life-cycle of the cluster, not just bootstrap time. If there is a network issue between the cluster and public discovery service, the cluster will suffer from it.
-
-2. public discovery service must reflect correct runtime configuration of the cluster during its life-cycle. It has to provide security mechanisms to avoid bad actions, and it is hard.
-
-3. public discovery service has to keep tens of thousands of cluster configurations. Our public discovery service backend is not ready for that workload.
-
-To have a discovery service that supports runtime reconfiguration, the best choice is to build a private one.
-
-[add-member]: runtime-configuration.md#add-a-new-member
-[disaster-recovery]: recovery.md
diff --git a/etcd-fix/Documentation/op-guide/security.md b/etcd-fix/Documentation/op-guide/security.md
deleted file mode 100644
index 11cd426..0000000
--- a/etcd-fix/Documentation/op-guide/security.md
+++ /dev/null
@@ -1,443 +0,0 @@
----
-title: Transport security model
----
-
-etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication. **Note that etcd doesn't enable [RBAC based authentication][auth] or the authentication feature in the transport layer by default to reduce friction for users getting started with the database. Further, changing this default would be a breaking change for the project which was established since 2013. An etcd cluster which doesn't enable security features can expose its data to any clients.**
-
-To get up and running, first have a CA certificate and a signed key pair for one member. It is recommended to create and sign a new key pair for every member in a cluster.
-
-For convenience, the [cfssl] tool provides an easy interface to certificate generation, and we provide an example using the tool [here][tls-setup]. Alternatively, try this [guide to generating self-signed key pairs][tls-guide].
-
-## Basic setup
-
-etcd takes several certificate related configuration options, either through command-line flags or environment variables:
-
-**Client-to-server communication:**
-
-`--cert-file=`: Certificate used for SSL/TLS connections **to** etcd. When this option is set, advertise-client-urls can use the HTTPS schema.
-
-`--key-file=`: Key for the certificate. Must be unencrypted.
-
-`--client-cert-auth`: When this is set etcd will check all incoming HTTPS requests for a client certificate signed by the trusted CA, requests that don't supply a valid client certificate will fail. If [authentication][auth] is enabled, the certificate provides credentials for the user name given by the Common Name field.
-
-`--trusted-ca-file=`: Trusted certificate authority.
-
-`--auto-tls`: Use automatically generated self-signed certificates for TLS connections with clients.
-
-**Peer (server-to-server / cluster) communication:**
-
-The peer options work the same way as the client-to-server options:
-
-`--peer-cert-file=`: Certificate used for SSL/TLS connections between peers. This will be used both for listening on the peer address as well as sending requests to other peers.
-
-`--peer-key-file=`: Key for the certificate. Must be unencrypted.
-
-`--peer-client-cert-auth`: When set, etcd will check all incoming peer requests from the cluster for valid client certificates signed by the supplied CA.
-
-`--peer-trusted-ca-file=`: Trusted certificate authority.
-
-`--peer-auto-tls`: Use automatically generated self-signed certificates for TLS connections between peers.
-
-If either a client-to-server or peer certificate is supplied the key must also be set. All of these configuration options are also available through the environment variables, `ETCD_CA_FILE`, `ETCD_PEER_CA_FILE` and so on.
-
-`--cipher-suites`: Comma-separated list of supported TLS cipher suites between server/client and peers (empty will be auto-populated by Go). Available from v3.2.22+, v3.3.7+, and v3.4+.
-
-## Example 1: Client-to-server transport security with HTTPS
-
-For this, have a CA certificate (`ca.crt`) and signed key pair (`server.crt`, `server.key`) ready.
-
-Let us configure etcd to provide simple HTTPS transport security step by step:
-
-```sh
-$ etcd --name infra0 --data-dir infra0 \
- --cert-file=/path/to/server.crt --key-file=/path/to/server.key \
- --advertise-client-urls=https://127.0.0.1:2379 --listen-client-urls=https://127.0.0.1:2379
-```
-
-This should start up fine and it will be possible to test the configuration by speaking HTTPS to etcd:
-
-```sh
-$ curl --cacert /path/to/ca.crt https://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -v
-```
-
-The command should show that the handshake succeed. Since we use self-signed certificates with our own certificate authority, the CA must be passed to curl using the `--cacert` option. Another possibility would be to add the CA certificate to the system's trusted certificates directory (usually in `/etc/pki/tls/certs` or `/etc/ssl/certs`).
-
-**OSX 10.9+ Users**: curl 7.30.0 on OSX 10.9+ doesn't understand certificates passed in on the command line.
-Instead, import the dummy ca.crt directly into the keychain or add the `-k` flag to curl to ignore errors.
-To test without the `-k` flag, run `open ./tests/fixtures/ca/ca.crt` and follow the prompts.
-Please remove this certificate after testing!
-If there is a workaround, let us know.
-
-## Example 2: Client-to-server authentication with HTTPS client certificates
-
-For now we've given the etcd client the ability to verify the server identity and provide transport security. We can however also use client certificates to prevent unauthorized access to etcd.
-
-The clients will provide their certificates to the server and the server will check whether the cert is signed by the supplied CA and decide whether to serve the request.
-
-The same files mentioned in the first example are needed for this, as well as a key pair for the client (`client.crt`, `client.key`) signed by the same certificate authority.
-
-```sh
-$ etcd --name infra0 --data-dir infra0 \
- --client-cert-auth --trusted-ca-file=/path/to/ca.crt --cert-file=/path/to/server.crt --key-file=/path/to/server.key \
- --advertise-client-urls https://127.0.0.1:2379 --listen-client-urls https://127.0.0.1:2379
-```
-
-Now try the same request as above to this server:
-
-```sh
-$ curl --cacert /path/to/ca.crt https://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -v
-```
-
-The request should be rejected by the server:
-
-```
-...
-routines:SSL3_READ_BYTES:sslv3 alert bad certificate
-...
-```
-
-To make it succeed, we need to give the CA signed client certificate to the server:
-
-```sh
-$ curl --cacert /path/to/ca.crt --cert /path/to/client.crt --key /path/to/client.key \
- -L https://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -v
-```
-
-The output should include:
-
-```
-...
-SSLv3, TLS handshake, CERT verify (15):
-...
-TLS handshake, Finished (20)
-```
-
-And also the response from the server:
-
-```json
-{
- "action": "set",
- "node": {
- "createdIndex": 12,
- "key": "/foo",
- "modifiedIndex": 12,
- "value": "bar"
- }
-}
-```
-
-Specify cipher suites to block [weak TLS cipher suites](https://github.com/etcd-io/etcd/issues/8320).
-
-TLS handshake would fail when client hello is requested with invalid cipher suites.
-
-For instance:
-
-```bash
-$ etcd \
- --cert-file ./server.crt \
- --key-file ./server.key \
- --trusted-ca-file ./ca.crt \
- --cipher-suites TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
-```
-
-Then, client requests must specify one of the cipher suites specified in the server:
-
-```bash
-# valid cipher suite
-$ curl \
- --cacert ./ca.crt \
- --cert ./server.crt \
- --key ./server.key \
- -L [CLIENT-URL]/metrics \
- --ciphers ECDHE-RSA-AES128-GCM-SHA256
-
-# request succeeds
-etcd_server_version{server_version="3.2.22"} 1
-...
-```
-
-```bash
-# invalid cipher suite
-$ curl \
- --cacert ./ca.crt \
- --cert ./server.crt \
- --key ./server.key \
- -L [CLIENT-URL]/metrics \
- --ciphers ECDHE-RSA-DES-CBC3-SHA
-
-# request fails with
-(35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
-```
-
-## Example 3: Transport security & client certificates in a cluster
-
-etcd supports the same model as above for **peer communication**, that means the communication between etcd members in a cluster.
-
-Assuming we have our `ca.crt` and two members with their own keypairs (`member1.crt` & `member1.key`, `member2.crt` & `member2.key`) signed by this CA, we launch etcd as follows:
-
-
-```sh
-DISCOVERY_URL=... # from https://discovery.etcd.io/new
-
-# member1
-$ etcd --name infra1 --data-dir infra1 \
- --peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member1.crt --peer-key-file=/path/to/member1.key \
- --initial-advertise-peer-urls=https://10.0.1.10:2380 --listen-peer-urls=https://10.0.1.10:2380 \
- --discovery ${DISCOVERY_URL}
-
-# member2
-$ etcd --name infra2 --data-dir infra2 \
- --peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member2.crt --peer-key-file=/path/to/member2.key \
- --initial-advertise-peer-urls=https://10.0.1.11:2380 --listen-peer-urls=https://10.0.1.11:2380 \
- --discovery ${DISCOVERY_URL}
-```
-
-The etcd members will form a cluster and all communication between members in the cluster will be encrypted and authenticated using the client certificates. The output of etcd will show that the addresses it connects to use HTTPS.
-
-## Example 4: Automatic self-signed transport security
-
-**NOTE:** When you specify ClientAutoTLS and PeerAutoTLS, the validity period of the client certificate and peer certificate automatically generated by etcd is only 1 year. You can specify the --self-signed-cert-validity flag to set the validity period of the certificate in years.
-
-For cases where communication encryption, but not authentication, is needed, etcd supports encrypting its messages with automatically generated self-signed certificates. This simplifies deployment because there is no need for managing certificates and keys outside of etcd.
-Configure etcd to use self-signed certificates for client and peer connections with the flags `--auto-tls` and `--peer-auto-tls`:
-
-```sh
-DISCOVERY_URL=... # from https://discovery.etcd.io/new
-
-# member1
-$ etcd --name infra1 --data-dir infra1 \
- --auto-tls --peer-auto-tls \
- --initial-advertise-peer-urls=https://10.0.1.10:2380 --listen-peer-urls=https://10.0.1.10:2380 \
- --discovery ${DISCOVERY_URL}
-
-# member2
-$ etcd --name infra2 --data-dir infra2 \
- --auto-tls --peer-auto-tls \
- --initial-advertise-peer-urls=https://10.0.1.11:2380 --listen-peer-urls=https://10.0.1.11:2380 \
- --discovery ${DISCOVERY_URL}
-```
-
-Self-signed certificates do not authenticate identity so curl will return an error:
-
-```sh
-curl: (60) SSL certificate problem: Invalid certificate chain
-```
-
-To disable certificate chain checking, invoke curl with the `-k` flag:
-
-```sh
-$ curl -k https://127.0.0.1:2379/v2/keys/foo -Xput -d value=bar -v
-```
-
-## Notes for DNS SRV
-
-Since v3.1.0 (except v3.2.9), discovery SRV bootstrapping authenticates `ServerName` with a root domain name from `--discovery-srv` flag. This is to avoid man-in-the-middle cert attacks, by requiring a certificate to have matching root domain name in its Subject Alternative Name (SAN) field. For instance, `etcd --discovery-srv=etcd.local` will only authenticate peers/clients when the provided certs have root domain `etcd.local` as an entry in Subject Alternative Name (SAN) field
-
-## Notes for etcd proxy
-
-etcd proxy terminates the TLS from its client if the connection is secure, and uses proxy's own key/cert specified in `--peer-key-file` and `--peer-cert-file` to communicate with etcd members.
-
-The proxy communicates with etcd members through both the `--advertise-client-urls` and `--advertise-peer-urls` of a given member. It forwards client requests to etcd members’ advertised client urls, and it syncs the initial cluster configuration through etcd members’ advertised peer urls.
-
-When client authentication is enabled for an etcd member, the administrator must ensure that the peer certificate specified in the proxy's `--peer-cert-file` option is valid for that authentication. The proxy's peer certificate must also be valid for peer authentication if peer authentication is enabled.
-
-## Notes for TLS authentication
-
-Since [v3.2.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md#v320-2017-06-09), [TLS certificates get reloaded on every client connection](https://github.com/etcd-io/etcd/pull/7829). This is useful when replacing expiry certs without stopping etcd servers; it can be done by overwriting old certs with new ones. Refreshing certs for every connection should not have too much overhead, but can be improved in the future, with caching layer. Example tests can be found [here](https://github.com/coreos/etcd/blob/b041ce5d514a4b4aaeefbffb008f0c7570a18986/integration/v3_grpc_test.go#L1601-L1757).
-
-Since [v3.2.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md#v320-2017-06-09), [server denies incoming peer certs with wrong IP `SAN`](https://github.com/etcd-io/etcd/pull/7687). For instance, if peer cert contains any IP addresses in Subject Alternative Name (SAN) field, server authenticates a peer only when the remote IP address matches one of those IP addresses. This is to prevent unauthorized endpoints from joining the cluster. For example, peer B's CSR (with `cfssl`) is:
-
-```json
-{
- "CN": "etcd peer",
- "hosts": [
- "*.example.default.svc",
- "*.example.default.svc.cluster.local",
- "10.138.0.27"
- ],
- "key": {
- "algo": "rsa",
- "size": 2048
- },
- "names": [
- {
- "C": "US",
- "L": "CA",
- "ST": "San Francisco"
- }
- ]
-}
-```
-
-when peer B's actual IP address is `10.138.0.2`, not `10.138.0.27`. When peer B tries to join the cluster, peer A will reject B with the error `x509: certificate is valid for 10.138.0.27, not 10.138.0.2`, because B's remote IP address does not match the one in Subject Alternative Name (SAN) field.
-
-Since [v3.2.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md#v320-2017-06-09), [server resolves TLS `DNSNames` when checking `SAN`](https://github.com/etcd-io/etcd/pull/7767). For instance, if peer cert contains only DNS names (no IP addresses) in Subject Alternative Name (SAN) field, server authenticates a peer only when forward-lookups (`dig b.com`) on those DNS names have matching IP with the remote IP address. For example, peer B's CSR (with `cfssl`) is:
-
-```json
-{
- "CN": "etcd peer",
- "hosts": [
- "b.com"
- ],
-```
-
-when peer B's remote IP address is `10.138.0.2`. When peer B tries to join the cluster, peer A looks up the incoming host `b.com` to get the list of IP addresses (e.g. `dig b.com`). And rejects B if the list does not contain the IP `10.138.0.2`, with the error `tls: 10.138.0.2 does not match any of DNSNames ["b.com"]`.
-
-Since [v3.2.2](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md#v322-2017-07-07), [server accepts connections if IP matches, without checking DNS entries](https://github.com/etcd-io/etcd/pull/8223). 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 example, peer B's CSR (with `cfssl`) is:
-
-```json
-{
- "CN": "etcd peer",
- "hosts": [
- "invalid.domain",
- "10.138.0.2"
- ],
-```
-
-when peer B's remote IP address is `10.138.0.2` and `invalid.domain` is a invalid host. When peer B tries to join the cluster, peer A successfully authenticates B, since Subject Alternative Name (SAN) field has a valid matching IP address. See [issue#8206](https://github.com/etcd-io/etcd/issues/8206) for more detail.
-
-Since [v3.2.5](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md#v325-2017-08-04), [server supports reverse-lookup on wildcard DNS `SAN`](https://github.com/etcd-io/etcd/pull/8281). 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. For example, peer B's CSR (with `cfssl`) is:
-
-```json
-{
- "CN": "etcd peer",
- "hosts": [
- "*.example.default.svc",
- "*.example.default.svc.cluster.local"
- ],
-```
-
-when peer B's remote IP address is `10.138.0.2`. When peer B tries to join the cluster, peer A reverse-lookup the IP `10.138.0.2` to get the list of host names. And either exact or wildcard match the host names with peer B's cert DNS names in Subject Alternative Name (SAN) field. If none of reverse/forward lookups worked, it returns an error `"tls: "10.138.0.2" does not match any of DNSNames ["*.example.default.svc","*.example.default.svc.cluster.local"]`. See [issue#8268](https://github.com/etcd-io/etcd/issues/8268) for more detail.
-
-[v3.3.0](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md) adds [`etcd --peer-cert-allowed-cn`](https://github.com/etcd-io/etcd/pull/8616) flag to support [CN(Common Name)-based auth for inter-peer connections](https://github.com/etcd-io/etcd/issues/8262). Kubernetes TLS bootstrapping involves generating dynamic certificates for etcd members and other system components (e.g. API server, kubelet, etc.). Maintaining different CAs for each component provides tighter access control to etcd cluster but often tedious. When `--peer-cert-allowed-cn` flag is specified, node can only join with matching common name even with shared CAs. For example, each member in 3-node cluster is set up with CSRs (with `cfssl`) as below:
-
-```json
-{
- "CN": "etcd.local",
- "hosts": [
- "m1.etcd.local",
- "127.0.0.1",
- "localhost"
- ],
-```
-
-```json
-{
- "CN": "etcd.local",
- "hosts": [
- "m2.etcd.local",
- "127.0.0.1",
- "localhost"
- ],
-```
-
-```json
-{
- "CN": "etcd.local",
- "hosts": [
- "m3.etcd.local",
- "127.0.0.1",
- "localhost"
- ],
-```
-
-Then only peers with matching common names will be authenticated if `--peer-cert-allowed-cn etcd.local` is given. And nodes with different CNs in CSRs or different `--peer-cert-allowed-cn` will be rejected:
-
-```bash
-$ etcd --peer-cert-allowed-cn m1.etcd.local
-
-I | embed: rejected connection from "127.0.0.1:48044" (error "CommonName authentication failed", ServerName "m1.etcd.local")
-I | embed: rejected connection from "127.0.0.1:55702" (error "remote error: tls: bad certificate", ServerName "m3.etcd.local")
-```
-
-Each process should be started with:
-
-```bash
-etcd --peer-cert-allowed-cn etcd.local
-
-I | pkg/netutil: resolving m3.etcd.local:32380 to 127.0.0.1:32380
-I | pkg/netutil: resolving m2.etcd.local:22380 to 127.0.0.1:22380
-I | pkg/netutil: resolving m1.etcd.local:2380 to 127.0.0.1:2380
-I | etcdserver: published {Name:m3 ClientURLs:[https://m3.etcd.local:32379]} to cluster 9db03f09b20de32b
-I | embed: ready to serve client requests
-I | etcdserver: published {Name:m1 ClientURLs:[https://m1.etcd.local:2379]} to cluster 9db03f09b20de32b
-I | embed: ready to serve client requests
-I | etcdserver: published {Name:m2 ClientURLs:[https://m2.etcd.local:22379]} to cluster 9db03f09b20de32b
-I | embed: ready to serve client requests
-I | embed: serving client requests on 127.0.0.1:32379
-I | embed: serving client requests on 127.0.0.1:22379
-I | embed: serving client requests on 127.0.0.1:2379
-```
-
-[v3.2.19](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.2.md) and [v3.3.4](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md) fixes TLS reload when [certificate SAN field only includes IP addresses but no domain names](https://github.com/etcd-io/etcd/issues/9541). For example, a member is set up with CSRs (with `cfssl`) as below:
-
-```json
-{
- "CN": "etcd.local",
- "hosts": [
- "127.0.0.1"
- ],
-```
-
-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 [not include any domain names but only IP addresses](https://github.com/etcd-io/etcd/issues/9541) 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).
-
-## Notes for Host Whitelist
-
-`etcd --host-whitelist` flag specifies acceptable hostnames from HTTP client requests. Client origin policy protects against ["DNS Rebinding"](https://en.wikipedia.org/wiki/DNS_rebinding) attacks to insecure etcd servers. That is, any website can simply create an authorized DNS name, and direct DNS to `"localhost"` (or any other address). Then, all HTTP endpoints of etcd server listening on `"localhost"` becomes accessible, thus vulnerable to DNS rebinding attacks. See [CVE-2018-5702](https://bugs.chromium.org/p/project-zero/issues/detail?id=1447#c2) for more detail.
-
-Client origin policy works as follows:
-
-1. If client connection is secure via HTTPS, allow any hostnames.
-2. If client connection is not secure and `"HostWhitelist"` is not empty, only allow HTTP requests whose Host field is listed in whitelist.
-
-Note that the client origin policy is enforced whether authentication is enabled or not, for tighter controls.
-
-By default, `etcd --host-whitelist` and `embed.Config.HostWhitelist` are set *empty* to allow all hostnames. Note that when specifying hostnames, loopback addresses are not added automatically. To allow loopback interfaces, add them to whitelist manually (e.g. `"localhost"`, `"127.0.0.1"`, etc.).
-
-## Frequently asked questions
-
-### I'm seeing a SSLv3 alert handshake failure when using TLS client authentication?
-
-The `crypto/tls` package of `golang` checks the key usage of the certificate public key before using it.
-To use the certificate public key to do client auth, we need to add `clientAuth` to `Extended Key Usage` when creating the certificate public key.
-
-Here is how to do it:
-
-Add the following section to openssl.cnf:
-
-```
-[ ssl_client ]
-...
- extendedKeyUsage = clientAuth
-...
-```
-
-When creating the cert be sure to reference it in the `-extensions` flag:
-
-```
-$ openssl ca -config openssl.cnf -policy policy_anything -extensions ssl_client -out certs/machine.crt -infiles machine.csr
-```
-
-### With peer certificate authentication I receive "certificate is valid for 127.0.0.1, not $MY_IP"
-Make sure to sign the certificates with a Subject Name the member's public IP address. The `etcd-ca` tool for example provides an `--ip=` option for its `new-cert` command.
-
-The certificate needs to be signed for the member's FQDN in its Subject Name, use Subject Alternative Names (short IP SANs) to add the IP address. The `etcd-ca` tool provides `--domain=` option for its `new-cert` command, and openssl can make [it][alt-name] too.
-
-### Does etcd encrypt data stored on disk drives?
-No. etcd doesn't encrypt key/value data stored on disk drives. If a user need to encrypt data stored on etcd, there are some options:
-* Let client applications encrypt and decrypt the data
-* Use a feature of underlying storage systems for encrypting stored data like [dm-crypt]
-
-### I’m seeing a log warning that "directory X exist without recommended permission -rwx------"
-When etcd create certain new directories it sets file permission to 700 to prevent unprivileged access as possible. However, if user has already created a directory with own preference, etcd uses the existing directory and logs a warning message if the permission is different than 700.
-
-[cfssl]: https://github.com/cloudflare/cfssl
-[tls-setup]: ../../hack/tls-setup
-[tls-guide]: https://github.com/coreos/docs/blob/master/os/generate-self-signed-certificates.md
-[alt-name]: http://wiki.cacert.org/FAQ/subjectAltName
-[auth]: authentication.md
-[dm-crypt]: https://en.wikipedia.org/wiki/Dm-crypt
diff --git a/etcd-fix/Documentation/op-guide/supported-platform.md b/etcd-fix/Documentation/op-guide/supported-platform.md
deleted file mode 100644
index 31df649..0000000
--- a/etcd-fix/Documentation/op-guide/supported-platform.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Supported systems
----
-
-## Current support
-
-The following table lists etcd support status for common architectures and operating systems:
-
-| Architecture | Operating System | Status | Maintainers |
-| ------------ | ---------------- | ------------ | --------------------------- |
-| amd64 | Darwin | Experimental | etcd maintainers |
-| amd64 | Linux | Stable | etcd maintainers |
-| amd64 | Windows | Experimental | |
-| arm64 | Linux | Experimental | @glevand |
-| arm | Linux | Unstable | |
-| 386 | Linux | Unstable | |
-| ppc64le | Linux | Stable | etcd maintainers, @mkumatag |
-
-* etcd-maintainers are listed in https://github.com/etcd-io/etcd/blob/master/MAINTAINERS.
-
-Experimental platforms appear to work in practice and have some platform specific code in etcd, but do not fully conform to the stable support policy. Unstable platforms have been lightly tested, but less than experimental. Unlisted architecture and operating system pairs are currently unsupported; caveat emptor.
-
-## Supporting a new system platform
-
-For etcd to officially support a new platform as stable, a few requirements are necessary to ensure acceptable quality:
-
-1. An "official" maintainer for the platform with clear motivation; someone must be responsible for taking care of the platform.
-2. Set up CI for build; etcd must compile.
-3. Set up CI for running unit tests; etcd must pass simple tests.
-4. Set up CI (TravisCI, SemaphoreCI or Jenkins) for running integration tests; etcd must pass intensive tests.
-5. (Optional) Set up a functional testing cluster; an etcd cluster should survive stress testing.
-
-## 32-bit and other unsupported systems
-
-etcd has known issues on 32-bit systems due to a bug in the Go runtime. See the [Go issue][go-issue] and [atomic package][go-atomic] for more information.
-
-To avoid inadvertently running a possibly unstable etcd server, `etcd` on unstable or unsupported architectures will print a warning message and immediately exit if the environment variable `ETCD_UNSUPPORTED_ARCH` is not set to the target architecture.
-
-Currently amd64 and ppc64le architectures are officially supported by `etcd`.
-
-[go-issue]: https://github.com/golang/go/issues/599
-[go-atomic]: https://golang.org/pkg/sync/atomic/#pkg-note-BUG
diff --git a/etcd-fix/Documentation/op-guide/v2-migration.md b/etcd-fix/Documentation/op-guide/v2-migration.md
deleted file mode 100644
index 981ace2..0000000
--- a/etcd-fix/Documentation/op-guide/v2-migration.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: Migrate applications from using API v2 to API v3
----
-
-The data store v2 is still accessible from the API v2 after upgrading to etcd3. Thus, it will work as before and require no application changes. With etcd 3, applications use the new grpc API v3 to access the mvcc store, which provides more features and improved performance. The mvcc store and the old store v2 are separate and isolated; writes to the store v2 will not affect the mvcc store and, similarly, writes to the mvcc store will not affect the store v2.
-
-Migrating an application from the API v2 to the API v3 involves two steps: 1) migrate the client library and, 2) migrate the data. If the application can rebuild the data, then migrating the data is unnecessary.
-
-## Migrate client library
-
-API v3 is different from API v2, thus application developers need to use a new client library to send requests to etcd API v3. The documentation of the client v3 is available at https://godoc.org/github.com/coreos/etcd/clientv3.
-
-There are some notable differences between API v2 and API v3:
-
-- Transaction: In v3, etcd provides multi-key conditional transactions. Applications should use transactions in place of `Compare-And-Swap` operations.
-
-- Flat key space: There are no directories in API v3, only keys. For example, "/a/b/c/" is a key. Range queries support getting all keys matching a given prefix.
-
-- Compacted responses: Operations like `Delete` no longer return previous values. To get the deleted value, a transaction can be used to atomically get the key and then delete its value.
-
-- Leases: A replacement for v2 TTLs; the TTL is bound to a lease and keys attach to the lease. When the TTL expires, the lease is revoked and all attached keys are removed.
-
-## Migrate data
-
-Application data can be migrated either offline or online. Offline migration is much simpler than online migration and is recommended.
-
-Sometimes an etcd cluster will possibly have v3 data which should not be overwritten. In this case, the migration process may want to confirm no v3 data is committed before proceeding. One way to check the cluster has no v3 keys is to issue the following `etcdctl` command, which scans the entire v3 keyspace for any key, expecting `0` as output:
-
-```sh
-ETCDCTL_API=3 etcdctl get "" --from-key --keys-only --limit 1 | wc -l
-```
-
-### Offline migration
-
-Offline migration is very simple but requires etcd downtime. If an etcd downtime window spanning from seconds to minutes is acceptable, offline migration is a good choice and is easy to automate.
-
-First, all members in the etcd cluster must converge to the same state. This can be achieved by stopping all applications that write keys to etcd. Alternatively, if the applications must remain running, configure etcd to listen on a different client URL and restart all etcd members. To check if the states converged, within a few seconds, use the `ETCDCTL_API=3 etcdctl endpoint status` command to confirm that the `raft index` of all members match (or differ by at most 1 due to an internal sync raft command).
-
-Second, migrate the v2 keys into v3 with the [migrate][migrate_command] (`ETCDCTL_API=3 etcdctl migrate`) command. The migrate command writes keys in the v2 store to a user-provided transformer program and reads back transformed keys. It then writes transformed keys into the mvcc store. This usually takes at most tens of seconds.
-
-Restart the etcd members and everything should just work.
-
-For etcd v3.3+, run `ETCDCTL_API=3 etcdctl endpoint hashkv --cluster` to ensure key-value stores are consistent post migration.
-
-**Warn**: When v2 store has expiring TTL keys and migrate command intends to preserve TTLs, migration may be inconsistent with the last committed v2 state when run on any member with a raft index less than the last leader's raft index.
-
-### Online migration
-
-If the application cannot tolerate any downtime, then it must migrate online. The implementation of online migration will vary from application to application but the overall idea is the same.
-
-First, write application code using the v3 API. The application must support two modes: a migration mode and a normal mode. The application starts in migration mode. When running in migration mode, the application reads keys using the v3 API first, and, if it cannot find the key, it retries with the API v2. In normal mode, the application only reads keys using the v3 API. The application writes keys over the API v3 in both modes. To acknowledge a switch from migration mode to normal mode, the application watches on a switch mode key. When switch key’s value turns to `true`, the application switches over from migration mode to normal mode.
-
-Second, start a background job to migrate data from the store v2 to the mvcc store by reading keys from the API v2 and writing keys to the API v3.
-
-After finishing data migration, the background job writes `true` into the switch mode key to notify the application that it may switch modes.
-
-Online migration can be difficult when the application logic depends on store v2 indexes. Applications will need additional logic to convert mvcc store revisions to store v2 indexes.
-
-[migrate_command]: ../../etcdctl/README.md#migrate-options
diff --git a/etcd-fix/Documentation/op-guide/versioning.md b/etcd-fix/Documentation/op-guide/versioning.md
deleted file mode 100644
index 0ee0ede..0000000
--- a/etcd-fix/Documentation/op-guide/versioning.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Versioning
----
-
-## Service versioning
-
-etcd uses [semantic versioning](http://semver.org)
-New minor versions may add additional features to the API.
-
-Get the running etcd cluster version with `etcdctl`:
-
-```sh
-ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 endpoint status
-```
-
-## API versioning
-
-The `v3` API responses should not change after the 3.0.0 release but new features will be added over time.
-
diff --git a/etcd-fix/Documentation/platforms/_index.md b/etcd-fix/Documentation/platforms/_index.md
deleted file mode 100644
index 0862062..0000000
--- a/etcd-fix/Documentation/platforms/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Platforms
-weight: 7000
----
diff --git a/etcd-fix/Documentation/platforms/aws.md b/etcd-fix/Documentation/platforms/aws.md
deleted file mode 100644
index 546df3f..0000000
--- a/etcd-fix/Documentation/platforms/aws.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: Amazon Web Services
----
-
-This guide assumes operational knowledge of Amazon Web Services (AWS), specifically Amazon Elastic Compute Cloud (EC2). This guide provides an introduction to design considerations when designing an etcd deployment on AWS EC2 and how AWS specific features may be utilized in that context.
-
-## Capacity planning
-
-As a critical building block for distributed systems it is crucial to perform adequate capacity planning in order to support the intended cluster workload. As a highly available and strongly consistent data store increasing the number of nodes in an etcd cluster will generally affect performance adversely. This makes sense intuitively, as more nodes means more members for the leader to coordinate state across. The most direct way to increase throughput and decrease latency of an etcd cluster is allocate more disk I/O, network I/O, CPU, and memory to cluster members. In the event it is impossible to temporarily divert incoming requests to the cluster, scaling the EC2 instances which comprise the etcd cluster members one at a time may improve performance. It is, however, best to avoid bottlenecks through capacity planning.
-
-The etcd team has produced a [hardware recommendation guide](../op-guide/hardware.md) which is very useful for “ballparking” how many nodes and what instance type are necessary for a cluster.
-
-AWS provides a service for creating groups of EC2 instances which are dynamically sized to match load on the instances. Using an Auto Scaling Group ([ASG](http://docs.aws.amazon.com/autoscaling/latest/userguide/AutoScalingGroup.html)) to dynamically scale an etcd cluster is not recommended for several reasons including:
-
-* etcd performance is generally inversely proportional to the number of members in a cluster due to the synchronous replication which provides strong consistency of data stored in etcd
-* the operational complexity of adding [lifecycle hooks](http://docs.aws.amazon.com/autoscaling/latest/userguide/lifecycle-hooks.html) to properly add and remove members from an etcd cluster by modifying the [runtime configuration](../op-guide/runtime-configuration.md)
-
-Auto Scaling Groups do provide a number of benefits besides cluster scaling which include:
-
-* distribution of EC2 instances across Availability Zones (AZs)
-* EC2 instance fail over across AZs
-* consolidated monitoring and life cycle control of instances within an ASG
-
-The use of an ASG to create a [self healing etcd cluster](#self-healing) is one of the design considerations when deploying an etcd cluster to AWS.
-
-## Cluster design
-
-The purpose of this section is to provide foundational guidance for deploying etcd on AWS. The discussion will be framed by the following three critical design criteria about the etcd cluster itself:
-
-* block device provider: limited to the tradeoffs between EBS or instance storage (InstanceStore)
-* cluster topology: how many nodes should make up an etcd cluster; should these nodes be distributed over multiple AZs
-* managing etcd members: creating a static cluster of EC2 instances or using an ASG.
-
-The intended cluster workload should dictate the cluster design. A configuration store for microservices may require different design considerations than a distributed lock service, a secrets store, or a Kubernetes control plane. Cluster design tradeoffs include considerations such as:
-
-* availability
-* data durability after member failure
-* performance/throughput
-* self healing
-
-### Availability
-
-Instance availability on AWS is ultimately determined by the Amazon EC2 Region Service Level Agreement ([SLA](https://aws.amazon.com/ec2/sla/)) which is the policy by which Amazon describes their precise definition of a regional outage.
-
-In the context of an etcd cluster this means a cluster must contain a minimum of three members where EC2 instances are spread across at least two AZs in order for an etcd cluster to be considered highly available at a Regional level.
-
-For most use cases the additional latency associated with a cluster spanning across Availability Zones will introduce a negligible performance impact.
-
-Availability considerations apply to all components of an application; if the application which accesses the etcd cluster will only be deployed to a single Availability Zone it may not make sense to make the etcd cluster highly available across zones.
-
-### Data durability after member failure
-
-A highly available etcd cluster is resilient to member loss, however, it is important to consider data durability in the event of disaster when designing an etcd deployment. Deploying etcd on AWS supports multiple mechanisms for data durability.
-
-* replication: etcd replicates all data to all members of the etcd cluster. Therefore, given more members in the cluster and more independent failure domains, the less likely that data stored in an etcd cluster will be permanently lost in the event of disaster.
-* Point in time etcd snapshotting: the etcd v3 API introduced support for snapshotting clusters. The operation is cheap enough (completing in the order of minutes) to run quite frequently and the resulting archives can be archived in a storage service like Amazon Simple Storage Service (S3).
-* Amazon Elastic Block Storage (EBS): an EBS volume is a replicated network attached block device which have stronger storage safety guarantees than InstanceStore which has a life cycle associated with the life cycle of the attached EC2 instance. The life cycle of an EBS volume is not necessarily tied to an EC2 instance and can be detached and snapshotted independently which means that a single node etcd cluster backed by an EBS volume can provide a fairly reasonable level of data durability.
-
-### Performance/Throughput
-
-The performance of an etcd cluster is roughly quantifiable through latency and throughput metrics which are primarily affected by disk and network performance. Detailed performance planning information is provided in the [performance section](../op-guide/performance.md) of the etcd operations guide.
-
-#### Network
-
-AWS offers EC2 Placement Groups which allow the collocation of EC2 instances within a single Availability Zone which can be utilized in order to minimize network latency between etcd members in the cluster. It is important to remember that collocation of etcd nodes within a single AZ will provide weaker fault tolerance than distributing members across multiple AZs. [Enhanced networking for EC2 instances](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html) may also improve network performance of individual EC2 instances.
-
-#### Disk
-
-AWS provides two basic types of block storage: [EBS volumes](https://aws.amazon.com/ebs/) and [EC2 Instance Store](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html). As mentioned, an EBS volume is a network attached block device while instance storage is directly attached to the hypervisor of the EC2 host. EBS volumes will generally have higher latency, lower throughput, and greater performance variance than Instance Store volumes. If performance, rather than data safety, is the primary concern it is highly recommended that instance storage on the EC2 instances be utilized. Remember that the amount of available instance storage varies by EC2 [instance types](https://aws.amazon.com/ec2/instance-types/) which may impose additional performance considerations.
-
-Inconsistent EBS volume performance can introduce etcd cluster instability. [Provisioned IOPS](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_piops) can provide more consistent performance than general purpose SSD EBS volumes. More information about EBS volume performance is available [from AWS](https://aws.amazon.com/ebs/details/) and Datadog has shared their experience with [getting optimal performance with AWS EBS Provisioned IOPS](https://www.datadoghq.com/blog/aws-ebs-provisioned-iops-getting-optimal-performance/) in their engineering blog.
-
-### Self healing
-
-While using an ASG to scale the size of an etcd cluster is not recommended, an ASG can be used effectively to maintain the desired number of nodes in the event of node failure. The maintenance of a stable number of etcd nodes will provide the etcd cluster with a measure of self healing.
-
-### Next steps
-
-The operational life cycle of an etcd cluster can be greatly simplified through the use of the etcd-operator. The open source etcd operator is a Kubernetes control plane operator which deploys and manages etcd clusters atop Kubernetes. While still in its early stages the etcd-operator already offers periodic backups to S3, detection and replacement of failed nodes, and automated disaster recovery from backups in the event of permanent quorum loss.
diff --git a/etcd-fix/Documentation/platforms/container-linux-systemd.md b/etcd-fix/Documentation/platforms/container-linux-systemd.md
deleted file mode 100644
index d29cef9..0000000
--- a/etcd-fix/Documentation/platforms/container-linux-systemd.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-title: Container Linux with systemd
----
-
-The following guide shows how to run etcd with [systemd][systemd-docs] under [Container Linux][container-linux-docs].
-
-## Provisioning an etcd cluster
-
-Cluster bootstrapping in Container Linux is simplest with [Ignition][container-linux-ignition]; `coreos-metadata.service` dynamically fetches the machine's IP for discovery. Note that etcd's discovery service protocol is only meant for bootstrapping, and cannot be used with runtime reconfiguration or cluster monitoring.
-
-The [Container Linux Config Transpiler][container-linux-ct] compiles etcd configuration files into Ignition configuration files:
-
-```yaml container-linux-config:norender
-etcd:
- version: 3.2.0
- name: s1
- data_dir: /var/lib/etcd
- advertise_client_urls: http://{PUBLIC_IPV4}:2379
- initial_advertise_peer_urls: http://{PRIVATE_IPV4}:2380
- listen_client_urls: http://0.0.0.0:2379
- listen_peer_urls: http://{PRIVATE_IPV4}:2380
- discovery: https://discovery.etcd.io/
-```
-
-`ct` would produce the following Ignition Config:
-
-```
-$ ct --platform=gce --in-file /tmp/ct-etcd.cnf
-{"ignition":{"version":"2.0.0","config"...
-```
-
-```json ignition-config
-{
- "ignition":{"version":"2.0.0","config":{}},
- "storage":{},
- "systemd":{
- "units":[{
- "name":"etcd-member.service",
- "enable":true,
- "dropins":[{
- "name":"20-clct-etcd-member.conf",
- "contents":"[Unit]\nRequires=coreos-metadata.service\nAfter=coreos-metadata.service\n\n[Service]\nEnvironmentFile=/run/metadata/coreos\nEnvironment=\"ETCD_IMAGE_TAG=v3.1.8\"\nExecStart=\nExecStart=/usr/lib/coreos/etcd-wrapper $ETCD_OPTS \\\n --name=\"s1\" \\\n --data-dir=\"/var/lib/etcd\" \\\n --listen-peer-urls=\"http://${COREOS_GCE_IP_LOCAL_0}:2380\" \\\n --listen-client-urls=\"http://0.0.0.0:2379\" \\\n --initial-advertise-peer-urls=\"http://${COREOS_GCE_IP_LOCAL_0}:2380\" \\\n --advertise-client-urls=\"http://${COREOS_GCE_IP_EXTERNAL_0}:2379\" \\\n --discovery=\"https://discovery.etcd.io/\u003ctoken\u003e\""}]}]},
- "networkd":{},
- "passwd":{}}
-```
-
-To avoid accidental misconfiguration, the transpiler helpfully verifies etcd configurations when generating Ignition files:
-
-```yaml container-linux-config:norender
-etcd:
- version: 3.2.0
- name: s1
- data_dir_x: /var/lib/etcd
- advertise_client_urls: http://{PUBLIC_IPV4}:2379
- initial_advertise_peer_urls: http://{PRIVATE_IPV4}:2380
- listen_client_urls: http://0.0.0.0:2379
- listen_peer_urls: http://{PRIVATE_IPV4}:2380
- discovery: https://discovery.etcd.io/
-```
-
-```
-$ ct --platform=gce --in-file /tmp/ct-etcd.cnf
-warning at line 3, column 2
-Config has unrecognized key: data_dir_x
-```
-
-See [Container Linux Provisioning][container-linux-provision] for more details.
-
-## etcd 3.x service
-
-[Container Linux][container-linux-docs] does not include etcd 3.x binaries by default. Different versions of etcd 3.x can be fetched via `etcd-member.service`.
-
-Confirm unit file exists:
-
-```
-systemctl cat etcd-member.service
-```
-
-Check if the etcd service is running:
-
-```
-systemctl status etcd-member.service
-```
-
-Example systemd drop-in unit to override the default service settings:
-
-```bash
-cat > /tmp/20-cl-etcd-member.conf <=3.2.10)
-
-3.2.10 or later now requires [grpc/grpc-go](https://github.com/grpc/grpc-go/releases) `v1.7.5` (<=3.2.9 requires `v1.2.1`).
-
-##### Deprecated `grpclog.Logger`
-
-`grpclog.Logger` has been deprecated in favor of [`grpclog.LoggerV2`](https://github.com/grpc/grpc-go/blob/master/grpclog/loggerv2.go). `clientv3.Logger` is now `grpclog.LoggerV2`.
-
-Before
-
-```go
-import "github.com/coreos/etcd/clientv3"
-clientv3.SetLogger(log.New(os.Stderr, "grpc: ", 0))
-```
-
-After
-
-```go
-import "github.com/coreos/etcd/clientv3"
-import "google.golang.org/grpc/grpclog"
-clientv3.SetLogger(grpclog.NewLoggerV2(os.Stderr, os.Stderr, os.Stderr))
-
-// log.New above cannot be used (not implement grpclog.LoggerV2 interface)
-```
-
-##### Deprecated `grpc.ErrClientConnTimeout`
-
-Previously, `grpc.ErrClientConnTimeout` error is returned on client dial time-outs. 3.2 instead returns `context.DeadlineExceeded` (see [#8504](https://github.com/etcd-io/etcd/issues/8504)).
-
-Before
-
-```go
-// expect dial time-out on ipv4 blackhole
-_, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"http://254.0.0.1:12345"},
- DialTimeout: 2 * time.Second
-})
-if err == grpc.ErrClientConnTimeout {
- // handle errors
-}
-```
-
-After
-
-```go
-_, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"http://254.0.0.1:12345"},
- DialTimeout: 2 * time.Second
-})
-if err == context.DeadlineExceeded {
- // handle errors
-}
-```
-
-#### Changed maximum request size limits (>=3.2.10)
-
-3.2.10 and 3.2.11 allow custom request size limits in server side. >=3.2.12 allows custom request size limits for both server and **client side**. In previous versions(v3.2.10, v3.2.11), client response size was limited to only 4 MiB.
-
-Server-side request limits can be configured with `--max-request-bytes` flag:
-
-```bash
-# limits request size to 1.5 KiB
-etcd --max-request-bytes 1536
-
-# client writes exceeding 1.5 KiB will be rejected
-etcdctl put foo [LARGE VALUE...]
-# etcdserver: request is too large
-```
-
-Or configure `embed.Config.MaxRequestBytes` field:
-
-```go
-import "github.com/coreos/etcd/embed"
-import "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
-
-// limit requests to 5 MiB
-cfg := embed.NewConfig()
-cfg.MaxRequestBytes = 5 * 1024 * 1024
-
-// client writes exceeding 5 MiB will be rejected
-_, err := cli.Put(ctx, "foo", [LARGE VALUE...])
-err == rpctypes.ErrRequestTooLarge
-```
-
-**If not specified, server-side limit defaults to 1.5 MiB**.
-
-Client-side request limits must be configured based on server-side limits.
-
-```bash
-# limits request size to 1 MiB
-etcd --max-request-bytes 1048576
-```
-
-```go
-import "github.com/coreos/etcd/clientv3"
-
-cli, _ := clientv3.New(clientv3.Config{
- Endpoints: []string{"127.0.0.1:2379"},
- MaxCallSendMsgSize: 2 * 1024 * 1024,
- MaxCallRecvMsgSize: 3 * 1024 * 1024,
-})
-
-
-// client writes exceeding "--max-request-bytes" will be rejected from etcd server
-_, err := cli.Put(ctx, "foo", strings.Repeat("a", 1*1024*1024+5))
-err == rpctypes.ErrRequestTooLarge
-
-
-// client writes exceeding "MaxCallSendMsgSize" will be rejected from client-side
-_, err = cli.Put(ctx, "foo", strings.Repeat("a", 5*1024*1024))
-err.Error() == "rpc error: code = ResourceExhausted desc = grpc: trying to send message larger than max (5242890 vs. 2097152)"
-
-
-// some writes under limits
-for i := range []int{0,1,2,3,4} {
- _, err = cli.Put(ctx, fmt.Sprintf("foo%d", i), strings.Repeat("a", 1*1024*1024-500))
- if err != nil {
- panic(err)
- }
-}
-// client reads exceeding "MaxCallRecvMsgSize" will be rejected from client-side
-_, err = cli.Get(ctx, "foo", clientv3.WithPrefix())
-err.Error() == "rpc error: code = ResourceExhausted desc = grpc: received message larger than max (5240509 vs. 3145728)"
-```
-
-**If not specified, client-side send limit defaults to 2 MiB (1.5 MiB + gRPC overhead bytes) and receive limit to `math.MaxInt32`**. Please see [clientv3 godoc](https://godoc.org/github.com/coreos/etcd/clientv3#Config) for more detail.
-
-#### Changed raw gRPC client wrappers
-
-3.2.12 or later changes the function signatures of `clientv3` gRPC client wrapper. This change was needed to support [custom `grpc.CallOption` on message size limits](https://github.com/etcd-io/etcd/pull/9047).
-
-Before and after
-
-```diff
--func NewKVFromKVClient(remote pb.KVClient) KV {
-+func NewKVFromKVClient(remote pb.KVClient, c *Client) KV {
-
--func NewClusterFromClusterClient(remote pb.ClusterClient) Cluster {
-+func NewClusterFromClusterClient(remote pb.ClusterClient, c *Client) Cluster {
-
--func NewLeaseFromLeaseClient(remote pb.LeaseClient, keepAliveTimeout time.Duration) Lease {
-+func NewLeaseFromLeaseClient(remote pb.LeaseClient, c *Client, keepAliveTimeout time.Duration) Lease {
-
--func NewMaintenanceFromMaintenanceClient(remote pb.MaintenanceClient) Maintenance {
-+func NewMaintenanceFromMaintenanceClient(remote pb.MaintenanceClient, c *Client) Maintenance {
-
--func NewWatchFromWatchClient(wc pb.WatchClient) Watcher {
-+func NewWatchFromWatchClient(wc pb.WatchClient, c *Client) Watcher {
-```
-
-#### Changed `clientv3.Lease.TimeToLive` API
-
-Previously, `clientv3.Lease.TimeToLive` API returned `lease.ErrLeaseNotFound` on non-existent lease ID. 3.2 instead returns TTL=-1 in its response and no error (see [#7305](https://github.com/etcd-io/etcd/pull/7305)).
-
-Before
-
-```go
-// when leaseID does not exist
-resp, err := TimeToLive(ctx, leaseID)
-resp == nil
-err == lease.ErrLeaseNotFound
-```
-
-After
-
-```go
-// when leaseID does not exist
-resp, err := TimeToLive(ctx, leaseID)
-resp.TTL == -1
-err == nil
-```
-
-#### Moved `clientv3.NewFromConfigFile` to `clientv3.yaml.NewConfig`
-
-`clientv3.NewFromConfigFile` is moved to `yaml.NewConfig`.
-
-Before
-
-```go
-import "github.com/coreos/etcd/clientv3"
-clientv3.NewFromConfigFile
-```
-
-After
-
-```go
-import clientv3yaml "github.com/coreos/etcd/clientv3/yaml"
-clientv3yaml.NewConfig
-```
-
-#### Change in `--listen-peer-urls` and `--listen-client-urls`
-
-3.2 now rejects domains names for `--listen-peer-urls` and `--listen-client-urls` (3.1 only prints out warnings), since domain name is invalid for network interface binding. Make sure that those URLs are properly formated as `scheme://IP:port`.
-
-See [issue #6336](https://github.com/etcd-io/etcd/issues/6336) for more contexts.
-
-### Server upgrade checklists
-
-#### Upgrade requirements
-
-To upgrade an existing etcd deployment to 3.2, the running cluster must be 3.1 or greater. If it's before 3.1, please [upgrade to 3.1](../upgrade_3_1) before upgrading to 3.2.
-
-Also, to ensure a smooth rolling upgrade, the running cluster must be healthy. Check the health of the cluster by using the `etcdctl endpoint health` command before proceeding.
-
-#### Preparation
-
-Before upgrading etcd, always test the services relying on etcd in a staging environment before deploying the upgrade to the production environment.
-
-Before beginning, [backup the etcd data](../op-guide/maintenance.md#snapshot-backup). Should something go wrong with the upgrade, it is possible to use this backup to [downgrade](#downgrade) back to existing etcd version. Please note that the `snapshot` command only backs up the v3 data. For v2 data, see [backing up v2 datastore](/docs/v2/admin_guide#backing-up-the-datastore).
-
-#### Mixed versions
-
-While upgrading, an etcd cluster supports mixed versions of etcd members, and operates with the protocol of the lowest common version. The cluster is only considered upgraded once all of its members are upgraded to version 3.2. Internally, etcd members negotiate with each other to determine the overall cluster version, which controls the reported version and the supported features.
-
-#### Limitations
-
-Note: If the cluster only has v3 data and no v2 data, it is not subject to this limitation.
-
-If the cluster is serving a v2 data set larger than 50MB, each newly upgraded member may take up to two minutes to catch up with the existing cluster. Check the size of a recent snapshot to estimate the total data size. In other words, it is safest to wait for 2 minutes between upgrading each member.
-
-For a much larger total data size, 100MB or more , this one-time process might take even more time. Administrators of very large etcd clusters of this magnitude can feel free to contact the [etcd team][etcd-contact] before upgrading, and we'll be happy to provide advice on the procedure.
-
-#### Downgrade
-
-If all members have been upgraded to v3.2, the cluster will be upgraded to v3.2, and downgrade from this completed state is **not possible**. If any single member is still v3.1, however, the cluster and its operations remains "v3.1", and it is possible from this mixed cluster state to return to using a v3.1 etcd binary on all members.
-
-Please [backup the data directory](../op-guide/maintenance.md#snapshot-backup) of all etcd members to make downgrading the cluster possible even after it has been completely upgraded.
-
-### Upgrade procedure
-
-This example shows how to upgrade a 3-member v3.1 ectd cluster running on a local machine.
-
-#### 1. Check upgrade requirements
-
-Is the cluster healthy and running v3.1.x?
-
-```
-$ ETCDCTL_API=3 etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-localhost:2379 is healthy: successfully committed proposal: took = 6.600684ms
-localhost:22379 is healthy: successfully committed proposal: took = 8.540064ms
-localhost:32379 is healthy: successfully committed proposal: took = 8.763432ms
-
-$ curl http://localhost:2379/version
-{"etcdserver":"3.1.7","etcdcluster":"3.1.0"}
-```
-
-#### 2. Stop the existing etcd process
-
-When each etcd process is stopped, expected errors will be logged by other cluster members. This is normal since a cluster member connection has been (temporarily) broken:
-
-```
-2017-04-27 14:13:31.491746 I | raft: c89feb932daef420 [term 3] received MsgTimeoutNow from 6d4f535bae3ab960 and starts an election to get leadership.
-2017-04-27 14:13:31.491769 I | raft: c89feb932daef420 became candidate at term 4
-2017-04-27 14:13:31.491788 I | raft: c89feb932daef420 received MsgVoteResp from c89feb932daef420 at term 4
-2017-04-27 14:13:31.491797 I | raft: c89feb932daef420 [logterm: 3, index: 9] sent MsgVote request to 6d4f535bae3ab960 at term 4
-2017-04-27 14:13:31.491805 I | raft: c89feb932daef420 [logterm: 3, index: 9] sent MsgVote request to 9eda174c7df8a033 at term 4
-2017-04-27 14:13:31.491815 I | raft: raft.node: c89feb932daef420 lost leader 6d4f535bae3ab960 at term 4
-2017-04-27 14:13:31.524084 I | raft: c89feb932daef420 received MsgVoteResp from 6d4f535bae3ab960 at term 4
-2017-04-27 14:13:31.524108 I | raft: c89feb932daef420 [quorum:2] has received 2 MsgVoteResp votes and 0 vote rejections
-2017-04-27 14:13:31.524123 I | raft: c89feb932daef420 became leader at term 4
-2017-04-27 14:13:31.524136 I | raft: raft.node: c89feb932daef420 elected leader c89feb932daef420 at term 4
-2017-04-27 14:13:31.592650 W | rafthttp: lost the TCP streaming connection with peer 6d4f535bae3ab960 (stream MsgApp v2 reader)
-2017-04-27 14:13:31.592825 W | rafthttp: lost the TCP streaming connection with peer 6d4f535bae3ab960 (stream Message reader)
-2017-04-27 14:13:31.693275 E | rafthttp: failed to dial 6d4f535bae3ab960 on stream Message (dial tcp [::1]:2380: getsockopt: connection refused)
-2017-04-27 14:13:31.693289 I | rafthttp: peer 6d4f535bae3ab960 became inactive
-2017-04-27 14:13:31.936678 W | rafthttp: lost the TCP streaming connection with peer 6d4f535bae3ab960 (stream Message writer)
-```
-
-It's a good idea at this point to [backup the etcd data](../op-guide/maintenance.md#snapshot-backup) to provide a downgrade path should any problems occur:
-
-```
-$ etcdctl snapshot save backup.db
-```
-
-#### 3. Drop-in etcd v3.2 binary and start the new etcd process
-
-The new v3.2 etcd will publish its information to the cluster:
-
-```
-2017-04-27 14:14:25.363225 I | etcdserver: published {Name:s1 ClientURLs:[http://localhost:2379]} to cluster a9ededbffcb1b1f1
-```
-
-Verify that each member, and then the entire cluster, becomes healthy with the new v3.2 etcd binary:
-
-```
-$ ETCDCTL_API=3 /etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-localhost:22379 is healthy: successfully committed proposal: took = 5.540129ms
-localhost:32379 is healthy: successfully committed proposal: took = 7.321771ms
-localhost:2379 is healthy: successfully committed proposal: took = 10.629901ms
-```
-
-Upgraded members will log warnings like the following until the entire cluster is upgraded. This is expected and will cease after all etcd cluster members are upgraded to v3.2:
-
-```
-2017-04-27 14:15:17.071804 W | etcdserver: member c89feb932daef420 has a higher version 3.2.0
-2017-04-27 14:15:21.073110 W | etcdserver: the local etcd version 3.1.7 is not up-to-date
-2017-04-27 14:15:21.073142 W | etcdserver: member 6d4f535bae3ab960 has a higher version 3.2.0
-2017-04-27 14:15:21.073157 W | etcdserver: the local etcd version 3.1.7 is not up-to-date
-2017-04-27 14:15:21.073164 W | etcdserver: member c89feb932daef420 has a higher version 3.2.0
-```
-
-#### 4. Repeat step 2 to step 3 for all other members
-
-#### 5. Finish
-
-When all members are upgraded, the cluster will report upgrading to 3.2 successfully:
-
-```
-2017-04-27 14:15:54.536901 N | etcdserver/membership: updated the cluster version from 3.1 to 3.2
-2017-04-27 14:15:54.537035 I | etcdserver/api: enabled capabilities for version 3.2
-```
-
-```
-$ ETCDCTL_API=3 /etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-localhost:2379 is healthy: successfully committed proposal: took = 2.312897ms
-localhost:22379 is healthy: successfully committed proposal: took = 2.553476ms
-localhost:32379 is healthy: successfully committed proposal: took = 2.517902ms
-```
-
-[etcd-contact]: https://groups.google.com/forum/#!forum/etcd-dev
diff --git a/etcd-fix/Documentation/upgrades/upgrade_3_3.md b/etcd-fix/Documentation/upgrades/upgrade_3_3.md
deleted file mode 100644
index 95d8c11..0000000
--- a/etcd-fix/Documentation/upgrades/upgrade_3_3.md
+++ /dev/null
@@ -1,544 +0,0 @@
----
-title: Upgrade etcd from 3.2 to 3.3
----
-
-In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:
- - one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes
- - after running all v3.3 processes, new features in v3.3 are available to the cluster
-
-Before [starting an upgrade](#upgrade-procedure), read through the rest of this guide to prepare.
-
-### Upgrade checklists
-
-**NOTE:** When [migrating from v2 with no v3 data](https://github.com/etcd-io/etcd/issues/9480), etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 `ETCD_DATA_DIR/member/snap/db` file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. `db` file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.
-
-**NOTE:** if you enable auth and use lease(lease ttl is small), it has a high probability to encounter [issue](https://github.com/etcd-io/etcd/issues/11689) that will result in data inconsistency. It is strongly recommended upgrading to 3.2.31+ firstly to fix this problem, and then upgrade to 3.3. In addition, if the user without permission sends a `LeaseRevoke` request to the 3.3 node during the upgrade process, it may still cause data corruption, so it is best to ensure that your environment doesn't exist such abnormal calls before upgrading, see [#11691](https://github.com/etcd-io/etcd/pull/11691) for detail.
-
-
-Highlighted breaking changes in 3.3.
-
-#### Changed value type of `etcd --auto-compaction-retention` flag to `string`
-
-Changed `--auto-compaction-retention` flag to [accept string values](https://github.com/etcd-io/etcd/pull/8563) with [finer granularity](https://github.com/etcd-io/etcd/issues/8503). Now that `--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 `--auto-compaction-mode periodic --auto-compaction-retention "24h"`, the time duration value for `--auto-compaction-retention` flag must be valid for [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) function in Go.
-
-```diff
-# etcd.config.yaml
-+auto-compaction-mode: periodic
--auto-compaction-retention: 24
-+auto-compaction-retention: "24"
-+# Or
-+auto-compaction-retention: "24h"
-```
-
-#### Changed `etcdserver.EtcdServer.ServerConfig` to `*etcdserver.EtcdServer.ServerConfig`
-
-`etcdserver.EtcdServer` has changed the type of its member field `*etcdserver.ServerConfig` to `etcdserver.ServerConfig`. And `etcdserver.NewServer` now takes `etcdserver.ServerConfig`, instead of `*etcdserver.ServerConfig`.
-
-Before and after (e.g. [k8s.io/kubernetes/test/e2e_node/services/etcd.go](https://github.com/kubernetes/kubernetes/blob/release-1.8/test/e2e_node/services/etcd.go#L50-L55))
-
-```diff
-import "github.com/coreos/etcd/etcdserver"
-
-type EtcdServer struct {
- *etcdserver.EtcdServer
-- config *etcdserver.ServerConfig
-+ config etcdserver.ServerConfig
-}
-
-func NewEtcd(dataDir string) *EtcdServer {
-- config := &etcdserver.ServerConfig{
-+ config := etcdserver.ServerConfig{
- DataDir: dataDir,
- ...
- }
- return &EtcdServer{config: config}
-}
-
-func (e *EtcdServer) Start() error {
- var err error
- e.EtcdServer, err = etcdserver.NewServer(e.config)
- ...
-```
-
-#### Added `embed.Config.LogOutput` struct
-
-**Note that this field has been renamed to `embed.Config.LogOutputs` in `[]string` type in v3.4. Please see [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for more details.**
-
-Field `LogOutput` is added to `embed.Config`:
-
-```diff
-package embed
-
-type Config struct {
- Debug bool `json:"debug"`
- LogPkgLevels string `json:"log-package-levels"`
-+ LogOutput string `json:"log-output"`
- ...
-```
-
-Before gRPC server warnings were logged in etcdserver.
-
-```
-WARNING: 2017/11/02 11:35:51 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: Error while dialing dial tcp: operation was canceled"; Reconnecting to {localhost:2379 }
-WARNING: 2017/11/02 11:35:51 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: Error while dialing dial tcp: operation was canceled"; Reconnecting to {localhost:2379 }
-```
-
-From v3.3, gRPC server logs are disabled by default.
-
-**Note that `embed.Config.SetupLogging` method has been deprecated in v3.4. Please see [v3.4 upgrade guide](https://github.com/etcd-io/etcd/blob/master/Documentation/upgrades/upgrade_3_4.md) for more details.**
-
-```go
-import "github.com/coreos/etcd/embed"
-
-cfg := &embed.Config{Debug: false}
-cfg.SetupLogging()
-```
-
-Set `embed.Config.Debug` field to `true` to enable gRPC server logs.
-
-#### Changed `/health` endpoint response
-
-Previously, `[endpoint]:[client-port]/health` returned manually marshaled JSON value. 3.3 now defines [`etcdhttp.Health`](https://godoc.org/github.com/coreos/etcd/etcdserver/api/etcdhttp#Health) struct.
-
-Note that in v3.3.0-rc.0, v3.3.0-rc.1, and v3.3.0-rc.2, `etcdhttp.Health` has boolean type `"health"` and `"errors"` fields. For backward compatibilities, we reverted `"health"` field to `string` type and removed `"errors"` field. Further health information will be provided in separate APIs.
-
-```bash
-$ curl http://localhost:2379/health
-{"health":"true"}
-```
-
-#### Changed gRPC gateway HTTP endpoints (replaced `/v3alpha` with `/v3beta`)
-
-Before
-
-```bash
-curl -L http://localhost:2379/v3alpha/kv/put \
- -X POST -d '{"key": "Zm9v", "value": "YmFy"}'
-```
-
-After
-
-```bash
-curl -L http://localhost:2379/v3beta/kv/put \
- -X POST -d '{"key": "Zm9v", "value": "YmFy"}'
-```
-
-Requests to `/v3alpha` endpoints will redirect to `/v3beta`, and `/v3alpha` will be removed in 3.4 release.
-
-#### Changed maximum request size limits
-
-3.3 now allows custom request size limits for both server and **client side**. In previous versions(v3.2.10, v3.2.11), client response size was limited to only 4 MiB.
-
-Server-side request limits can be configured with `--max-request-bytes` flag:
-
-```bash
-# limits request size to 1.5 KiB
-etcd --max-request-bytes 1536
-
-# client writes exceeding 1.5 KiB will be rejected
-etcdctl put foo [LARGE VALUE...]
-# etcdserver: request is too large
-```
-
-Or configure `embed.Config.MaxRequestBytes` field:
-
-```go
-import "github.com/coreos/etcd/embed"
-import "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
-
-// limit requests to 5 MiB
-cfg := embed.NewConfig()
-cfg.MaxRequestBytes = 5 * 1024 * 1024
-
-// client writes exceeding 5 MiB will be rejected
-_, err := cli.Put(ctx, "foo", [LARGE VALUE...])
-err == rpctypes.ErrRequestTooLarge
-```
-
-**If not specified, server-side limit defaults to 1.5 MiB**.
-
-Client-side request limits must be configured based on server-side limits.
-
-```bash
-# limits request size to 1 MiB
-etcd --max-request-bytes 1048576
-```
-
-```go
-import "github.com/coreos/etcd/clientv3"
-
-cli, _ := clientv3.New(clientv3.Config{
- Endpoints: []string{"127.0.0.1:2379"},
- MaxCallSendMsgSize: 2 * 1024 * 1024,
- MaxCallRecvMsgSize: 3 * 1024 * 1024,
-})
-
-
-// client writes exceeding "--max-request-bytes" will be rejected from etcd server
-_, err := cli.Put(ctx, "foo", strings.Repeat("a", 1*1024*1024+5))
-err == rpctypes.ErrRequestTooLarge
-
-
-// client writes exceeding "MaxCallSendMsgSize" will be rejected from client-side
-_, err = cli.Put(ctx, "foo", strings.Repeat("a", 5*1024*1024))
-err.Error() == "rpc error: code = ResourceExhausted desc = grpc: trying to send message larger than max (5242890 vs. 2097152)"
-
-
-// some writes under limits
-for i := range []int{0,1,2,3,4} {
- _, err = cli.Put(ctx, fmt.Sprintf("foo%d", i), strings.Repeat("a", 1*1024*1024-500))
- if err != nil {
- panic(err)
- }
-}
-// client reads exceeding "MaxCallRecvMsgSize" will be rejected from client-side
-_, err = cli.Get(ctx, "foo", clientv3.WithPrefix())
-err.Error() == "rpc error: code = ResourceExhausted desc = grpc: received message larger than max (5240509 vs. 3145728)"
-```
-
-**If not specified, client-side send limit defaults to 2 MiB (1.5 MiB + gRPC overhead bytes) and receive limit to `math.MaxInt32`**. Please see [clientv3 godoc](https://godoc.org/github.com/coreos/etcd/clientv3#Config) for more detail.
-
-#### Changed raw gRPC client wrapper function signatures
-
-3.3 changes the function signatures of `clientv3` gRPC client wrapper. This change was needed to support [custom `grpc.CallOption` on message size limits](https://github.com/etcd-io/etcd/pull/9047).
-
-Before and after
-
-```diff
--func NewKVFromKVClient(remote pb.KVClient) KV {
-+func NewKVFromKVClient(remote pb.KVClient, c *Client) KV {
-
--func NewClusterFromClusterClient(remote pb.ClusterClient) Cluster {
-+func NewClusterFromClusterClient(remote pb.ClusterClient, c *Client) Cluster {
-
--func NewLeaseFromLeaseClient(remote pb.LeaseClient, keepAliveTimeout time.Duration) Lease {
-+func NewLeaseFromLeaseClient(remote pb.LeaseClient, c *Client, keepAliveTimeout time.Duration) Lease {
-
--func NewMaintenanceFromMaintenanceClient(remote pb.MaintenanceClient) Maintenance {
-+func NewMaintenanceFromMaintenanceClient(remote pb.MaintenanceClient, c *Client) Maintenance {
-
--func NewWatchFromWatchClient(wc pb.WatchClient) Watcher {
-+func NewWatchFromWatchClient(wc pb.WatchClient, c *Client) Watcher {
-```
-
-#### Changed clientv3 `Snapshot` API error type
-
-Previously, clientv3 `Snapshot` API returned raw [`grpc/*status.statusError`] type error. v3.3 now translates those errors to corresponding public error types, to be consistent with other APIs.
-
-Before
-
-```go
-import "context"
-
-// reading snapshot with canceled context should error out
-ctx, cancel := context.WithCancel(context.Background())
-rc, _ := cli.Snapshot(ctx)
-cancel()
-_, err := io.Copy(f, rc)
-err.Error() == "rpc error: code = Canceled desc = context canceled"
-
-// reading snapshot with deadline exceeded should error out
-ctx, cancel = context.WithTimeout(context.Background(), time.Second)
-defer cancel()
-rc, _ = cli.Snapshot(ctx)
-time.Sleep(2 * time.Second)
-_, err = io.Copy(f, rc)
-err.Error() == "rpc error: code = DeadlineExceeded desc = context deadline exceeded"
-```
-
-After
-
-```go
-import "context"
-
-// reading snapshot with canceled context should error out
-ctx, cancel := context.WithCancel(context.Background())
-rc, _ := cli.Snapshot(ctx)
-cancel()
-_, err := io.Copy(f, rc)
-err == context.Canceled
-
-// reading snapshot with deadline exceeded should error out
-ctx, cancel = context.WithTimeout(context.Background(), time.Second)
-defer cancel()
-rc, _ = cli.Snapshot(ctx)
-time.Sleep(2 * time.Second)
-_, err = io.Copy(f, rc)
-err == context.DeadlineExceeded
-```
-
-#### Changed `etcdctl lease timetolive` command output
-
-Previously, `lease timetolive LEASE_ID` command on expired lease prints `-1s` for remaining seconds. 3.3 now outputs clearer messages.
-
-Before
-
-
-```bash
-lease 2d8257079fa1bc0c granted with TTL(0s), remaining(-1s)
-```
-
-After
-
-```bash
-lease 2d8257079fa1bc0c already expired
-```
-
-#### Changed `golang.org/x/net/context` imports
-
-`clientv3` has deprecated `golang.org/x/net/context`. If a project vendors `golang.org/x/net/context` in other code (e.g. etcd generated protocol buffer code) and imports `github.com/coreos/etcd/clientv3`, it requires Go 1.9+ to compile.
-
-Before
-
-```go
-import "golang.org/x/net/context"
-cli.Put(context.Background(), "f", "v")
-```
-
-After
-
-```go
-import "context"
-cli.Put(context.Background(), "f", "v")
-```
-
-#### Changed gRPC dependency
-
-3.3 now requires [grpc/grpc-go](https://github.com/grpc/grpc-go/releases) `v1.7.5`.
-
-##### Deprecated `grpclog.Logger`
-
-`grpclog.Logger` has been deprecated in favor of [`grpclog.LoggerV2`](https://github.com/grpc/grpc-go/blob/master/grpclog/loggerv2.go). `clientv3.Logger` is now `grpclog.LoggerV2`.
-
-Before
-
-```go
-import "github.com/coreos/etcd/clientv3"
-clientv3.SetLogger(log.New(os.Stderr, "grpc: ", 0))
-```
-
-After
-
-```go
-import "github.com/coreos/etcd/clientv3"
-import "google.golang.org/grpc/grpclog"
-clientv3.SetLogger(grpclog.NewLoggerV2(os.Stderr, os.Stderr, os.Stderr))
-
-// log.New above cannot be used (not implement grpclog.LoggerV2 interface)
-```
-
-##### Deprecated `grpc.ErrClientConnTimeout`
-
-Previously, `grpc.ErrClientConnTimeout` error is returned on client dial time-outs. 3.3 instead returns `context.DeadlineExceeded` (see [#8504](https://github.com/etcd-io/etcd/issues/8504)).
-
-Before
-
-```go
-// expect dial time-out on ipv4 blackhole
-_, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"http://254.0.0.1:12345"},
- DialTimeout: 2 * time.Second
-})
-if err == grpc.ErrClientConnTimeout {
- // handle errors
-}
-```
-
-After
-
-```go
-_, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"http://254.0.0.1:12345"},
- DialTimeout: 2 * time.Second
-})
-if err == context.DeadlineExceeded {
- // handle errors
-}
-```
-
-#### Changed official container registry
-
-etcd now uses [`gcr.io/etcd-development/etcd`](https://gcr.io/etcd-development/etcd) as a primary container registry, and [`quay.io/coreos/etcd`](https://quay.io/coreos/etcd) as secondary.
-
-Before
-
-```bash
-docker pull quay.io/coreos/etcd:v3.2.5
-```
-
-After
-
-```bash
-docker pull gcr.io/etcd-development/etcd:v3.3.0
-```
-
-### Upgrades to >= v3.3.14
-
-[v3.3.14](https://github.com/etcd-io/etcd/releases/tag/v3.3.14) had to include some features from 3.4, while trying to minimize the difference between client balancer implementation. This release fixes ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available" (kubernetes#72102)](https://github.com/kubernetes/kubernetes/issues/72102).
-
-`grpc.ErrClientConnClosing` has been [deprecated in gRPC >= 1.10](https://github.com/grpc/grpc-go/pull/1854).
-
-```diff
-import (
-+ "go.etcd.io/etcd/clientv3"
-
- "google.golang.org/grpc"
-+ "google.golang.org/grpc/codes"
-+ "google.golang.org/grpc/status"
-)
-
-_, err := kvc.Get(ctx, "a")
--if err == grpc.ErrClientConnClosing {
-+if clientv3.IsConnCanceled(err) {
-
-// or
-+s, ok := status.FromError(err)
-+if ok {
-+ if s.Code() == codes.Canceled
-```
-
-[The new client balancer](https://github.com/etcd-io/etcd/blob/master/Documentation/learning/design-client.md) uses an asynchronous resolver to pass endpoints to the gRPC dial function. As a result, [v3.3.14](https://github.com/etcd-io/etcd/releases/tag/v3.3.14) or later requires `grpc.WithBlock` dial option to wait until the underlying connection is up.
-
-```diff
-import (
- "time"
- "go.etcd.io/etcd/clientv3"
-+ "google.golang.org/grpc"
-)
-
-+// "grpc.WithBlock()" to block until the underlying connection is up
-ccfg := clientv3.Config{
- Endpoints: []string{"localhost:2379"},
- DialTimeout: time.Second,
-+ DialOptions: []grpc.DialOption{grpc.WithBlock()},
- DialKeepAliveTime: time.Second,
- DialKeepAliveTimeout: 500 * time.Millisecond,
-}
-```
-
-Please see [CHANGELOG](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.3.md) for a full list of changes.
-
-### Server upgrade checklists
-
-#### Upgrade requirements
-
-To upgrade an existing etcd deployment to 3.3, the running cluster must be 3.2 or greater. If it's before 3.2, please [upgrade to 3.2](upgrade_3_2.md) before upgrading to 3.3.
-
-Also, to ensure a smooth rolling upgrade, the running cluster must be healthy. Check the health of the cluster by using the `etcdctl endpoint health` command before proceeding.
-
-#### Preparation
-
-Before upgrading etcd, always test the services relying on etcd in a staging environment before deploying the upgrade to the production environment.
-
-Before beginning, [backup the etcd data](../op-guide/maintenance.md#snapshot-backup). Should something go wrong with the upgrade, it is possible to use this backup to [downgrade](#downgrade) back to existing etcd version. Please note that the `snapshot` command only backs up the v3 data. For v2 data, see [backing up v2 datastore](../v2/admin_guide.md#backing-up-the-datastore).
-
-#### Mixed versions
-
-While upgrading, an etcd cluster supports mixed versions of etcd members, and operates with the protocol of the lowest common version. The cluster is only considered upgraded once all of its members are upgraded to version 3.3. Internally, etcd members negotiate with each other to determine the overall cluster version, which controls the reported version and the supported features.
-
-#### Limitations
-
-Note: If the cluster only has v3 data and no v2 data, it is not subject to this limitation.
-
-If the cluster is serving a v2 data set larger than 50MB, each newly upgraded member may take up to two minutes to catch up with the existing cluster. Check the size of a recent snapshot to estimate the total data size. In other words, it is safest to wait for 2 minutes between upgrading each member.
-
-For a much larger total data size, 100MB or more , this one-time process might take even more time. Administrators of very large etcd clusters of this magnitude can feel free to contact the [etcd team][etcd-contact] before upgrading, and we'll be happy to provide advice on the procedure.
-
-#### Downgrade
-
-If all members have been upgraded to v3.3, the cluster will be upgraded to v3.3, and downgrade from this completed state is **not possible**. If any single member is still v3.2, however, the cluster and its operations remains "v3.2", and it is possible from this mixed cluster state to return to using a v3.2 etcd binary on all members.
-
-Please [backup the data directory](../op-guide/maintenance.md#snapshot-backup) of all etcd members to make downgrading the cluster possible even after it has been completely upgraded.
-
-### Upgrade procedure
-
-This example shows how to upgrade a 3-member v3.2 ectd cluster running on a local machine.
-
-#### 1. Check upgrade requirements
-
-Is the cluster healthy and running v3.2.x?
-
-```
-$ ETCDCTL_API=3 etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-localhost:2379 is healthy: successfully committed proposal: took = 6.600684ms
-localhost:22379 is healthy: successfully committed proposal: took = 8.540064ms
-localhost:32379 is healthy: successfully committed proposal: took = 8.763432ms
-
-$ curl http://localhost:2379/version
-{"etcdserver":"3.2.7","etcdcluster":"3.2.0"}
-```
-
-#### 2. Stop the existing etcd process
-
-When each etcd process is stopped, expected errors will be logged by other cluster members. This is normal since a cluster member connection has been (temporarily) broken:
-
-```
-14:13:31.491746 I | raft: c89feb932daef420 [term 3] received MsgTimeoutNow from 6d4f535bae3ab960 and starts an election to get leadership.
-14:13:31.491769 I | raft: c89feb932daef420 became candidate at term 4
-14:13:31.491788 I | raft: c89feb932daef420 received MsgVoteResp from c89feb932daef420 at term 4
-14:13:31.491797 I | raft: c89feb932daef420 [logterm: 3, index: 9] sent MsgVote request to 6d4f535bae3ab960 at term 4
-14:13:31.491805 I | raft: c89feb932daef420 [logterm: 3, index: 9] sent MsgVote request to 9eda174c7df8a033 at term 4
-14:13:31.491815 I | raft: raft.node: c89feb932daef420 lost leader 6d4f535bae3ab960 at term 4
-14:13:31.524084 I | raft: c89feb932daef420 received MsgVoteResp from 6d4f535bae3ab960 at term 4
-14:13:31.524108 I | raft: c89feb932daef420 [quorum:2] has received 2 MsgVoteResp votes and 0 vote rejections
-14:13:31.524123 I | raft: c89feb932daef420 became leader at term 4
-14:13:31.524136 I | raft: raft.node: c89feb932daef420 elected leader c89feb932daef420 at term 4
-14:13:31.592650 W | rafthttp: lost the TCP streaming connection with peer 6d4f535bae3ab960 (stream MsgApp v2 reader)
-14:13:31.592825 W | rafthttp: lost the TCP streaming connection with peer 6d4f535bae3ab960 (stream Message reader)
-14:13:31.693275 E | rafthttp: failed to dial 6d4f535bae3ab960 on stream Message (dial tcp [::1]:2380: getsockopt: connection refused)
-14:13:31.693289 I | rafthttp: peer 6d4f535bae3ab960 became inactive
-14:13:31.936678 W | rafthttp: lost the TCP streaming connection with peer 6d4f535bae3ab960 (stream Message writer)
-```
-
-It's a good idea at this point to [backup the etcd data](../op-guide/maintenance.md#snapshot-backup) to provide a downgrade path should any problems occur:
-
-```
-$ etcdctl snapshot save backup.db
-```
-
-#### 3. Drop-in etcd v3.3 binary and start the new etcd process
-
-The new v3.3 etcd will publish its information to the cluster:
-
-```
-14:14:25.363225 I | etcdserver: published {Name:s1 ClientURLs:[http://localhost:2379]} to cluster a9ededbffcb1b1f1
-```
-
-Verify that each member, and then the entire cluster, becomes healthy with the new v3.3 etcd binary:
-
-```
-$ ETCDCTL_API=3 /etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-localhost:22379 is healthy: successfully committed proposal: took = 5.540129ms
-localhost:32379 is healthy: successfully committed proposal: took = 7.321771ms
-localhost:2379 is healthy: successfully committed proposal: took = 10.629901ms
-```
-
-Upgraded members will log warnings like the following until the entire cluster is upgraded. This is expected and will cease after all etcd cluster members are upgraded to v3.3:
-
-```
-14:15:17.071804 W | etcdserver: member c89feb932daef420 has a higher version 3.3.0
-14:15:21.073110 W | etcdserver: the local etcd version 3.2.7 is not up-to-date
-14:15:21.073142 W | etcdserver: member 6d4f535bae3ab960 has a higher version 3.3.0
-14:15:21.073157 W | etcdserver: the local etcd version 3.2.7 is not up-to-date
-14:15:21.073164 W | etcdserver: member c89feb932daef420 has a higher version 3.3.0
-```
-
-#### 4. Repeat step 2 to step 3 for all other members
-
-#### 5. Finish
-
-When all members are upgraded, the cluster will report upgrading to 3.3 successfully:
-
-```
-14:15:54.536901 N | etcdserver/membership: updated the cluster version from 3.2 to 3.3
-14:15:54.537035 I | etcdserver/api: enabled capabilities for version 3.3
-```
-
-```
-$ ETCDCTL_API=3 /etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-localhost:2379 is healthy: successfully committed proposal: took = 2.312897ms
-localhost:22379 is healthy: successfully committed proposal: took = 2.553476ms
-localhost:32379 is healthy: successfully committed proposal: took = 2.517902ms
-```
-
-[etcd-contact]: https://groups.google.com/forum/#!forum/etcd-dev
\ No newline at end of file
diff --git a/etcd-fix/Documentation/upgrades/upgrade_3_4.md b/etcd-fix/Documentation/upgrades/upgrade_3_4.md
deleted file mode 100644
index efe18b1..0000000
--- a/etcd-fix/Documentation/upgrades/upgrade_3_4.md
+++ /dev/null
@@ -1,603 +0,0 @@
----
-title: Upgrade etcd from 3.3 to 3.4
----
-
-In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:
- - one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes
- - after running all v3.4 processes, new features in v3.4 are available to the cluster
-
-Before [starting an upgrade](#upgrade-procedure), read through the rest of this guide to prepare.
-
-
-
-### Upgrade checklists
-
-**NOTE:** When [migrating from v2 with no v3 data](https://github.com/etcd-io/etcd/issues/9480), etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 `ETCD_DATA_DIR/member/snap/db` file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. `db` file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.
-
-Highlighted breaking changes in 3.4.
-
-#### Make `ETCDCTL_API=3 etcdctl` default
-
-`ETCDCTL_API=3` is now the default.
-
-```diff
-etcdctl set foo bar
-Error: unknown command "set" for "etcdctl"
-
--etcdctl set foo bar
-+ETCDCTL_API=2 etcdctl set foo bar
-bar
-
-ETCDCTL_API=3 etcdctl put foo bar
-OK
-
--ETCDCTL_API=3 etcdctl put foo bar
-+etcdctl put foo bar
-```
-
-#### Make `etcd --enable-v2=false` default
-
-[`etcd --enable-v2=false`](https://github.com/etcd-io/etcd/pull/10935) is now the default.
-
-This means, unless `etcd --enable-v2=true` is specified, etcd v3.4 server would not serve v2 API requests.
-
-If v2 API were used, make sure to enable v2 API in v3.4:
-
-```diff
--etcd
-+etcd --enable-v2=true
-```
-
-Other HTTP APIs will still work (e.g. `[CLIENT-URL]/metrics`, `[CLIENT-URL]/health`, v3 gRPC gateway).
-
-#### Deprecated `etcd --ca-file` and `etcd --peer-ca-file` flags
-
-`--ca-file` and `--peer-ca-file` flags are deprecated; they have been deprecated since v2.1.
-
-```diff
--etcd --ca-file ca-client.crt
-+etcd --trusted-ca-file ca-client.crt
-```
-
-```diff
--etcd --peer-ca-file ca-peer.crt
-+etcd --peer-trusted-ca-file ca-peer.crt
-```
-
-#### Deprecated `grpc.ErrClientConnClosing` error
-
-`grpc.ErrClientConnClosing` has been [deprecated in gRPC >= 1.10](https://github.com/grpc/grpc-go/pull/1854).
-
-```diff
-import (
-+ "go.etcd.io/etcd/clientv3"
-
- "google.golang.org/grpc"
-+ "google.golang.org/grpc/codes"
-+ "google.golang.org/grpc/status"
-)
-
-_, err := kvc.Get(ctx, "a")
--if err == grpc.ErrClientConnClosing {
-+if clientv3.IsConnCanceled(err) {
-
-// or
-+s, ok := status.FromError(err)
-+if ok {
-+ if s.Code() == codes.Canceled
-```
-
-#### Require `grpc.WithBlock` for client dial
-
-[The new client balancer](https://github.com/etcd-io/etcd/blob/master/Documentation/learning/design-client.md) uses an asynchronous resolver to pass endpoints to the gRPC dial function. As a result, v3.4 client requires `grpc.WithBlock` dial option to wait until the underlying connection is up.
-
-```diff
-import (
- "time"
- "go.etcd.io/etcd/clientv3"
-+ "google.golang.org/grpc"
-)
-
-+// "grpc.WithBlock()" to block until the underlying connection is up
-ccfg := clientv3.Config{
- Endpoints: []string{"localhost:2379"},
- DialTimeout: time.Second,
-+ DialOptions: []grpc.DialOption{grpc.WithBlock()},
- DialKeepAliveTime: time.Second,
- DialKeepAliveTimeout: 500 * time.Millisecond,
-}
-```
-
-#### Deprecating `etcd_debugging_mvcc_db_total_size_in_bytes` Prometheus metrics
-
-v3.4 promotes `etcd_debugging_mvcc_db_total_size_in_bytes` Prometheus metrics to `etcd_mvcc_db_total_size_in_bytes`, in order to encourage etcd storage monitoring.
-
-`etcd_debugging_mvcc_db_total_size_in_bytes` is still served in v3.4 for backward compatibilities. It will be completely deprecated in v3.5.
-
-```diff
--etcd_debugging_mvcc_db_total_size_in_bytes
-+etcd_mvcc_db_total_size_in_bytes
-```
-
-Note that `etcd_debugging_*` namespace metrics have been marked as experimental. As we improve monitoring guide, we may promote more metrics.
-
-#### Deprecating `etcd_debugging_mvcc_put_total` Prometheus metrics
-
-v3.4 promotes `etcd_debugging_mvcc_put_total` Prometheus metrics to `etcd_mvcc_put_total`, in order to encourage etcd storage monitoring.
-
-`etcd_debugging_mvcc_put_total` is still served in v3.4 for backward compatibilities. It will be completely deprecated in v3.5.
-
-```diff
--etcd_debugging_mvcc_put_total
-+etcd_mvcc_put_total
-```
-
-Note that `etcd_debugging_*` namespace metrics have been marked as experimental. As we improve monitoring guide, we may promote more metrics.
-
-#### Deprecating `etcd_debugging_mvcc_delete_total` Prometheus metrics
-
-v3.4 promotes `etcd_debugging_mvcc_delete_total` Prometheus metrics to `etcd_mvcc_delete_total`, in order to encourage etcd storage monitoring.
-
-`etcd_debugging_mvcc_delete_total` is still served in v3.4 for backward compatibilities. It will be completely deprecated in v3.5.
-
-```diff
--etcd_debugging_mvcc_delete_total
-+etcd_mvcc_delete_total
-```
-
-Note that `etcd_debugging_*` namespace metrics have been marked as experimental. As we improve monitoring guide, we may promote more metrics.
-
-#### Deprecating `etcd_debugging_mvcc_txn_total` Prometheus metrics
-
-v3.4 promotes `etcd_debugging_mvcc_txn_total` Prometheus metrics to `etcd_mvcc_txn_total`, in order to encourage etcd storage monitoring.
-
-`etcd_debugging_mvcc_txn_total` is still served in v3.4 for backward compatibilities. It will be completely deprecated in v3.5.
-
-```diff
--etcd_debugging_mvcc_txn_total
-+etcd_mvcc_txn_total
-```
-
-Note that `etcd_debugging_*` namespace metrics have been marked as experimental. As we improve monitoring guide, we may promote more metrics.
-
-#### Deprecating `etcd_debugging_mvcc_range_total` Prometheus metrics
-
-v3.4 promotes `etcd_debugging_mvcc_range_total` Prometheus metrics to `etcd_mvcc_range_total`, in order to encourage etcd storage monitoring.
-
-`etcd_debugging_mvcc_range_total` is still served in v3.4 for backward compatibilities. It will be completely deprecated in v3.5.
-
-```diff
--etcd_debugging_mvcc_range_total
-+etcd_mvcc_range_total
-```
-
-Note that `etcd_debugging_*` namespace metrics have been marked as experimental. As we improve monitoring guide, we may promote more metrics.
-
-#### Deprecating `etcd --log-output` flag (now `--log-outputs`)
-
-Rename [`etcd --log-output` to `--log-outputs`](https://github.com/etcd-io/etcd/pull/9624) to support multiple log outputs. **`etcd --logger=capnslog` does not support multiple log outputs.**
-
-**`etcd --log-output`** will be deprecated in v3.5. **`etcd --logger=capnslog` will be deprecated in v3.5**.
-
-```diff
--etcd --log-output=stderr
-+etcd --log-outputs=stderr
-
-+# to write logs to stderr and a.log file at the same time
-+# only "--logger=zap" supports multiple writers
-+etcd --logger=zap --log-outputs=stderr,a.log
-```
-
-v3.4 adds `etcd --logger=zap --log-outputs=stderr` support for structured logging and multiple log outputs. Main motivation is to promote automated etcd monitoring, rather than looking back server logs when it starts breaking. Future development will make etcd log as few as possible, and make etcd easier to monitor with metrics and alerts. **`etcd --logger=capnslog` will be deprecated in v3.5**.
-
-#### Changed `log-outputs` field type in `etcd --config-file` to `[]string`
-
-Now that `log-outputs` (old field name `log-output`) accepts multiple writers, etcd configuration YAML file `log-outputs` field must be changed to `[]string` type as below:
-
-```diff
- # Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.
--log-output: default
-+log-outputs: [default]
-```
-
-#### Renamed `embed.Config.LogOutput` to `embed.Config.LogOutputs`
-
-Renamed [**`embed.Config.LogOutput`** to **`embed.Config.LogOutputs`**](https://github.com/etcd-io/etcd/pull/9624) to support multiple log outputs. And changed [`embed.Config.LogOutput` type from `string` to `[]string`](https://github.com/etcd-io/etcd/pull/9579) to support multiple log outputs.
-
-```diff
-import "github.com/coreos/etcd/embed"
-
-cfg := &embed.Config{Debug: false}
--cfg.LogOutput = "stderr"
-+cfg.LogOutputs = []string{"stderr"}
-```
-
-#### v3.5 deprecates `capnslog`
-
-**v3.5 will deprecate `etcd --log-package-levels` flag for `capnslog`**; `etcd --logger=zap --log-outputs=stderr` will the default. **v3.5 will deprecate `[CLIENT-URL]/config/local/log` endpoint.**
-
-```diff
--etcd
-+etcd --logger zap
-```
-
-#### Deprecating `etcd --debug` flag (now `--log-level=debug`)
-
-v3.4 deprecates [`etcd --debug`](https://github.com/etcd-io/etcd/pull/10947) flag. Instead, use `etcd --log-level=debug` flag.
-
-```diff
--etcd --debug
-+etcd --logger zap --log-level debug
-```
-
-#### Deprecated `pkg/transport.TLSInfo.CAFile` field
-
-Deprecated `pkg/transport.TLSInfo.CAFile` field.
-
-```diff
-import "github.com/coreos/etcd/pkg/transport"
-
-tlsInfo := transport.TLSInfo{
- CertFile: "/tmp/test-certs/test.pem",
- KeyFile: "/tmp/test-certs/test-key.pem",
-- CAFile: "/tmp/test-certs/trusted-ca.pem",
-+ TrustedCAFile: "/tmp/test-certs/trusted-ca.pem",
-}
-tlsConfig, err := tlsInfo.ClientConfig()
-if err != nil {
- panic(err)
-}
-```
-
-#### Changed `embed.Config.SnapCount` to `embed.Config.SnapshotCount`
-
-To be consistent with the flag name `etcd --snapshot-count`, `embed.Config.SnapCount` field has been renamed to `embed.Config.SnapshotCount`:
-
-```diff
-import "github.com/coreos/etcd/embed"
-
-cfg := embed.NewConfig()
--cfg.SnapCount = 100000
-+cfg.SnapshotCount = 100000
-```
-
-#### Changed `etcdserver.ServerConfig.SnapCount` to `etcdserver.ServerConfig.SnapshotCount`
-
-To be consistent with the flag name `etcd --snapshot-count`, `etcdserver.ServerConfig.SnapCount` field has been renamed to `etcdserver.ServerConfig.SnapshotCount`:
-
-```diff
-import "github.com/coreos/etcd/etcdserver"
-
-srvcfg := etcdserver.ServerConfig{
-- SnapCount: 100000,
-+ SnapshotCount: 100000,
-```
-
-#### Changed function signature in package `wal`
-
-Changed `wal` function signatures to support structured logger.
-
-```diff
-import "github.com/coreos/etcd/wal"
-+import "go.uber.org/zap"
-
-+lg, _ = zap.NewProduction()
-
--wal.Open(dirpath, snap)
-+wal.Open(lg, dirpath, snap)
-
--wal.OpenForRead(dirpath, snap)
-+wal.OpenForRead(lg, dirpath, snap)
-
--wal.Repair(dirpath)
-+wal.Repair(lg, dirpath)
-
--wal.Create(dirpath, metadata)
-+wal.Create(lg, dirpath, metadata)
-```
-
-#### Changed `IntervalTree` type in package `pkg/adt`
-
-`pkg/adt.IntervalTree` is now defined as an `interface`.
-
-```diff
-import (
- "fmt"
-
- "go.etcd.io/etcd/pkg/adt"
-)
-
-func main() {
-- ivt := &adt.IntervalTree{}
-+ ivt := adt.NewIntervalTree()
-```
-
-#### Deprecated `embed.Config.SetupLogging`
-
-`embed.Config.SetupLogging` has been removed in order to prevent wrong logging configuration, and now set up automatically.
-
-```diff
-import "github.com/coreos/etcd/embed"
-
-cfg := &embed.Config{Debug: false}
--cfg.SetupLogging()
-```
-
-#### Changed gRPC gateway HTTP endpoints (replaced `/v3beta` with `/v3`)
-
-Before
-
-```bash
-curl -L http://localhost:2379/v3beta/kv/put \
- -X POST -d '{"key": "Zm9v", "value": "YmFy"}'
-```
-
-After
-
-```bash
-curl -L http://localhost:2379/v3/kv/put \
- -X POST -d '{"key": "Zm9v", "value": "YmFy"}'
-```
-
-Requests to `/v3beta` endpoints will redirect to `/v3`, and `/v3beta` will be removed in 3.5 release.
-
-#### Deprecated container image tags
-
-`latest` and minor version images tags are deprecated:
-
-```diff
--docker pull gcr.io/etcd-development/etcd:latest
-+docker pull gcr.io/etcd-development/etcd:v3.4.0
-
--docker pull gcr.io/etcd-development/etcd:v3.4
-+docker pull gcr.io/etcd-development/etcd:v3.4.0
-
--docker pull gcr.io/etcd-development/etcd:v3.4
-+docker pull gcr.io/etcd-development/etcd:v3.4.1
-
--docker pull gcr.io/etcd-development/etcd:v3.4
-+docker pull gcr.io/etcd-development/etcd:v3.4.2
-```
-
-### Server upgrade checklists
-
-#### Upgrade requirements
-
-To upgrade an existing etcd deployment to 3.4, the running cluster must be 3.3 or greater. If it's before 3.3, please [upgrade to 3.3](upgrade_3_3.md) before upgrading to 3.4.
-
-Also, to ensure a smooth rolling upgrade, the running cluster must be healthy. Check the health of the cluster by using the `etcdctl endpoint health` command before proceeding.
-
-#### Preparation
-
-Before upgrading etcd, always test the services relying on etcd in a staging environment before deploying the upgrade to the production environment.
-
-Before beginning, [download the snapshot backup](../op-guide/maintenance.md#snapshot-backup). Should something go wrong with the upgrade, it is possible to use this backup to [downgrade](#downgrade) back to existing etcd version. Please note that the `snapshot` command only backs up the v3 data. For v2 data, see [backing up v2 datastore](../v2/admin_guide.md#backing-up-the-datastore).
-
-#### Mixed versions
-
-While upgrading, an etcd cluster supports mixed versions of etcd members, and operates with the protocol of the lowest common version. The cluster is only considered upgraded once all of its members are upgraded to version 3.4. Internally, etcd members negotiate with each other to determine the overall cluster version, which controls the reported version and the supported features.
-
-#### Limitations
-
-Note: If the cluster only has v3 data and no v2 data, it is not subject to this limitation.
-
-If the cluster is serving a v2 data set larger than 50MB, each newly upgraded member may take up to two minutes to catch up with the existing cluster. Check the size of a recent snapshot to estimate the total data size. In other words, it is safest to wait for 2 minutes between upgrading each member.
-
-For a much larger total data size, 100MB or more , this one-time process might take even more time. Administrators of very large etcd clusters of this magnitude can feel free to contact the [etcd team][etcd-contact] before upgrading, and we'll be happy to provide advice on the procedure.
-
-#### Downgrade
-
-If all members have been upgraded to v3.4, the cluster will be upgraded to v3.4, and downgrade from this completed state is **not possible**. If any single member is still v3.3, however, the cluster and its operations remains "v3.3", and it is possible from this mixed cluster state to return to using a v3.3 etcd binary on all members.
-
-Please [download the snapshot backup](../op-guide/maintenance.md#snapshot-backup) to make downgrading the cluster possible even after it has been completely upgraded.
-
-### Upgrade procedure
-
-This example shows how to upgrade a 3-member v3.3 ectd cluster running on a local machine.
-
-#### Step 1: check upgrade requirements
-
-Is the cluster healthy and running v3.3.x?
-
-```bash
-etcdctl --endpoints=localhost:2379,localhost:22379,localhost:32379 endpoint health
-<}
-WARNING: 2018/05/17 12:45:21 grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing
-21.193589 I | raft: 7339c4e5e833c029 [term: 8] received a MsgVote message with higher term from 729934363faa4a24 [term: 9]
-21.193626 I | raft: 7339c4e5e833c029 became follower at term 9
-21.193651 I | raft: 7339c4e5e833c029 [logterm: 8, index: 9, vote: 0] cast MsgVote for 729934363faa4a24 [logterm: 8, index: 9] at term 9
-21.193675 I | raft: raft.node: 7339c4e5e833c029 lost leader 7339c4e5e833c029 at term 9
-21.194424 I | raft: raft.node: 7339c4e5e833c029 elected leader 729934363faa4a24 at term 9
-21.292898 I | etcdserver: 7339c4e5e833c029 finished leadership transfer from 7339c4e5e833c029 to 729934363faa4a24 (took 100.436391ms)
-21.292975 I | rafthttp: stopping peer 729934363faa4a24...
-21.293206 I | rafthttp: closed the TCP streaming connection with peer 729934363faa4a24 (stream MsgApp v2 writer)
-21.293225 I | rafthttp: stopped streaming with peer 729934363faa4a24 (writer)
-21.293437 I | rafthttp: closed the TCP streaming connection with peer 729934363faa4a24 (stream Message writer)
-21.293459 I | rafthttp: stopped streaming with peer 729934363faa4a24 (writer)
-21.293514 I | rafthttp: stopped HTTP pipelining with peer 729934363faa4a24
-21.293590 W | rafthttp: lost the TCP streaming connection with peer 729934363faa4a24 (stream MsgApp v2 reader)
-21.293610 I | rafthttp: stopped streaming with peer 729934363faa4a24 (stream MsgApp v2 reader)
-21.293680 W | rafthttp: lost the TCP streaming connection with peer 729934363faa4a24 (stream Message reader)
-21.293700 I | rafthttp: stopped streaming with peer 729934363faa4a24 (stream Message reader)
-21.293711 I | rafthttp: stopped peer 729934363faa4a24
-21.293720 I | rafthttp: stopping peer b548c2511513015...
-21.293987 I | rafthttp: closed the TCP streaming connection with peer b548c2511513015 (stream MsgApp v2 writer)
-21.294063 I | rafthttp: stopped streaming with peer b548c2511513015 (writer)
-21.294467 I | rafthttp: closed the TCP streaming connection with peer b548c2511513015 (stream Message writer)
-21.294561 I | rafthttp: stopped streaming with peer b548c2511513015 (writer)
-21.294742 I | rafthttp: stopped HTTP pipelining with peer b548c2511513015
-21.294867 W | rafthttp: lost the TCP streaming connection with peer b548c2511513015 (stream MsgApp v2 reader)
-21.294892 I | rafthttp: stopped streaming with peer b548c2511513015 (stream MsgApp v2 reader)
-21.294990 W | rafthttp: lost the TCP streaming connection with peer b548c2511513015 (stream Message reader)
-21.295004 E | rafthttp: failed to read b548c2511513015 on stream Message (context canceled)
-21.295013 I | rafthttp: peer b548c2511513015 became inactive
-21.295024 I | rafthttp: stopped streaming with peer b548c2511513015 (stream Message reader)
-21.295035 I | rafthttp: stopped peer b548c2511513015
-```
-
-#### Step 4: restart the etcd server with same configuration
-
-Restart the etcd server with same configuration but with the new etcd binary.
-
-```diff
--etcd-old --name s1 \
-+etcd-new --name s1 \
- --data-dir /tmp/etcd/s1 \
- --listen-client-urls http://localhost:2379 \
- --advertise-client-urls http://localhost:2379 \
- --listen-peer-urls http://localhost:2380 \
- --initial-advertise-peer-urls http://localhost:2380 \
- --initial-cluster s1=http://localhost:2380,s2=http://localhost:22380,s3=http://localhost:32380 \
- --initial-cluster-token tkn \
-+ --initial-cluster-state new \
-+ --logger zap \
-+ --log-outputs stderr
-```
-
-The new v3.4 etcd will publish its information to the cluster. At this point, cluster still operates as v3.3 protocol, which is the lowest common version.
-
-> `{"level":"info","ts":1526586617.1647713,"caller":"membership/cluster.go:485","msg":"set initial cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","cluster-version":"3.0"}`
-
-> `{"level":"info","ts":1526586617.1648536,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.0"}`
-
-> `{"level":"info","ts":1526586617.1649303,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.0","from":"3.3"}`
-
-> `{"level":"info","ts":1526586617.1649797,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.3"}`
-
-> `{"level":"info","ts":1526586617.2107732,"caller":"etcdserver/server.go:1770","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","request-path":"/0/members/7339c4e5e833c029/attributes","cluster-id":"7dee9ba76d59ed53","publish-timeout":7}`
-
-Verify that each member, and then the entire cluster, becomes healthy with the new v3.4 etcd binary:
-
-```bash
-etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-< `{"level":"info","ts":1526586949.0920913,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}`
-> `{"level":"info","ts":1526586949.0921566,"caller":"etcdserver/server.go:2272","msg":"cluster version is updated","cluster-version":"3.4"}`
-
-Member 2:
-
-> `{"level":"info","ts":1526586949.092117,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"729934363faa4a24","from":"3.3","from":"3.4"}`
-> `{"level":"info","ts":1526586949.0923078,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}`
-
-Member 3:
-
-> `{"level":"info","ts":1526586949.0921423,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"b548c2511513015","from":"3.3","from":"3.4"}`
-> `{"level":"info","ts":1526586949.0922918,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}`
-
-
-```bash
-endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-<127.0.0.1:32380: use of closed network connection"}
-{"level":"info","ts":1526587299.1778402,"caller":"rafthttp/stream.go:459","msg":"stopped stream reader with remote peer","stream-reader-type":"stream MsgApp v2","local-member-id":"7339c4e5e833c029","remote-peer-id":"b548c2511513015"}
-{"level":"warn","ts":1526587299.1780295,"caller":"rafthttp/stream.go:436","msg":"lost TCP streaming connection with remote peer","stream-reader-type":"stream Message","local-member-id":"7339c4e5e833c029","remote-peer-id":"b548c2511513015","error":"read tcp 127.0.0.1:34634->127.0.0.1:32380: use of closed network connection"}
-{"level":"info","ts":1526587299.1780987,"caller":"rafthttp/stream.go:459","msg":"stopped stream reader with remote peer","stream-reader-type":"stream Message","local-member-id":"7339c4e5e833c029","remote-peer-id":"b548c2511513015"}
-{"level":"info","ts":1526587299.1781602,"caller":"rafthttp/peer.go:340","msg":"stopped remote peer","remote-peer-id":"b548c2511513015"}
-{"level":"info","ts":1526587299.1781986,"caller":"rafthttp/peer.go:333","msg":"stopping remote peer","remote-peer-id":"729934363faa4a24"}
-{"level":"warn","ts":1526587299.1802843,"caller":"rafthttp/stream.go:291","msg":"closed TCP streaming connection with remote peer","stream-writer-type":"stream MsgApp v2","remote-peer-id":"729934363faa4a24"}
-{"level":"warn","ts":1526587299.1803446,"caller":"rafthttp/stream.go:301","msg":"stopped TCP streaming connection with remote peer","stream-writer-type":"stream MsgApp v2","remote-peer-id":"729934363faa4a24"}
-{"level":"warn","ts":1526587299.1824749,"caller":"rafthttp/stream.go:291","msg":"closed TCP streaming connection with remote peer","stream-writer-type":"stream Message","remote-peer-id":"729934363faa4a24"}
-{"level":"warn","ts":1526587299.18255,"caller":"rafthttp/stream.go:301","msg":"stopped TCP streaming connection with remote peer","stream-writer-type":"stream Message","remote-peer-id":"729934363faa4a24"}
-{"level":"info","ts":1526587299.18261,"caller":"rafthttp/pipeline.go:86","msg":"stopped HTTP pipelining with remote peer","local-member-id":"7339c4e5e833c029","remote-peer-id":"729934363faa4a24"}
-{"level":"warn","ts":1526587299.1827736,"caller":"rafthttp/stream.go:436","msg":"lost TCP streaming connection with remote peer","stream-reader-type":"stream MsgApp v2","local-member-id":"7339c4e5e833c029","remote-peer-id":"729934363faa4a24","error":"read tcp 127.0.0.1:51482->127.0.0.1:22380: use of closed network connection"}
-{"level":"info","ts":1526587299.182845,"caller":"rafthttp/stream.go:459","msg":"stopped stream reader with remote peer","stream-reader-type":"stream MsgApp v2","local-member-id":"7339c4e5e833c029","remote-peer-id":"729934363faa4a24"}
-{"level":"warn","ts":1526587299.1830168,"caller":"rafthttp/stream.go:436","msg":"lost TCP streaming connection with remote peer","stream-reader-type":"stream Message","local-member-id":"7339c4e5e833c029","remote-peer-id":"729934363faa4a24","error":"context canceled"}
-{"level":"warn","ts":1526587299.1831107,"caller":"rafthttp/peer_status.go:65","msg":"peer became inactive","peer-id":"729934363faa4a24","error":"failed to read 729934363faa4a24 on stream Message (context canceled)"}
-{"level":"info","ts":1526587299.1831737,"caller":"rafthttp/stream.go:459","msg":"stopped stream reader with remote peer","stream-reader-type":"stream Message","local-member-id":"7339c4e5e833c029","remote-peer-id":"729934363faa4a24"}
-{"level":"info","ts":1526587299.1832306,"caller":"rafthttp/peer.go:340","msg":"stopped remote peer","remote-peer-id":"729934363faa4a24"}
-{"level":"warn","ts":1526587299.1837125,"caller":"rafthttp/http.go:424","msg":"failed to find remote peer in cluster","local-member-id":"7339c4e5e833c029","remote-peer-id-stream-handler":"7339c4e5e833c029","remote-peer-id-from":"b548c2511513015","cluster-id":"7dee9ba76d59ed53"}
-{"level":"warn","ts":1526587299.1840093,"caller":"rafthttp/http.go:424","msg":"failed to find remote peer in cluster","local-member-id":"7339c4e5e833c029","remote-peer-id-stream-handler":"7339c4e5e833c029","remote-peer-id-from":"b548c2511513015","cluster-id":"7dee9ba76d59ed53"}
-{"level":"warn","ts":1526587299.1842315,"caller":"rafthttp/http.go:424","msg":"failed to find remote peer in cluster","local-member-id":"7339c4e5e833c029","remote-peer-id-stream-handler":"7339c4e5e833c029","remote-peer-id-from":"729934363faa4a24","cluster-id":"7dee9ba76d59ed53"}
-{"level":"warn","ts":1526587299.1844475,"caller":"rafthttp/http.go:424","msg":"failed to find remote peer in cluster","local-member-id":"7339c4e5e833c029","remote-peer-id-stream-handler":"7339c4e5e833c029","remote-peer-id-from":"729934363faa4a24","cluster-id":"7dee9ba76d59ed53"}
-{"level":"info","ts":1526587299.2056687,"caller":"embed/etcd.go:473","msg":"stopping serving peer traffic","address":"127.0.0.1:2380"}
-{"level":"info","ts":1526587299.205819,"caller":"embed/etcd.go:480","msg":"stopped serving peer traffic","address":"127.0.0.1:2380"}
-{"level":"info","ts":1526587299.2058413,"caller":"embed/etcd.go:289","msg":"closed etcd server","name":"s1","data-dir":"/tmp/etcd/s1","advertise-peer-urls":["http://localhost:2380"],"advertise-client-urls":["http://localhost:2379"]}
-```
-
-#### Step 4: restart the etcd server with same configuration
-
-Restart the etcd server with same configuration but with the new etcd binary.
-
-```diff
--etcd-old --name s1 \
-+etcd-new --name s1 \
- --data-dir /tmp/etcd/s1 \
- --listen-client-urls http://localhost:2379 \
- --advertise-client-urls http://localhost:2379 \
- --listen-peer-urls http://localhost:2380 \
- --initial-advertise-peer-urls http://localhost:2380 \
- --initial-cluster s1=http://localhost:2380,s2=http://localhost:22380,s3=http://localhost:32380 \
- --initial-cluster-token tkn \
- --initial-cluster-state new
-```
-
-The new v3.5 etcd will publish its information to the cluster. At this point, cluster still operates as v3.4 protocol, which is the lowest common version.
-
-> `{"level":"info","ts":1526586617.1647713,"caller":"membership/cluster.go:485","msg":"set initial cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","cluster-version":"3.0"}`
-
-> `{"level":"info","ts":1526586617.1648536,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.0"}`
-
-> `{"level":"info","ts":1526586617.1649303,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.0","from":"3.4"}`
-
-> `{"level":"info","ts":1526586617.1649797,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}`
-
-> `{"level":"info","ts":1526586617.2107732,"caller":"etcdserver/server.go:1770","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","request-path":"/0/members/7339c4e5e833c029/attributes","cluster-id":"7dee9ba76d59ed53","publish-timeout":7}`
-
-Verify that each member, and then the entire cluster, becomes healthy with the new v3.5 etcd binary:
-
-```bash
-etcdctl endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-< `{"level":"info","ts":1526586949.0920913,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}`
-> `{"level":"info","ts":1526586949.0921566,"caller":"etcdserver/server.go:2272","msg":"cluster version is updated","cluster-version":"3.5"}`
-
-Member 2:
-
-> `{"level":"info","ts":1526586949.092117,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"729934363faa4a24","from":"3.4","from":"3.5"}`
-> `{"level":"info","ts":1526586949.0923078,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}`
-
-Member 3:
-
-> `{"level":"info","ts":1526586949.0921423,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"b548c2511513015","from":"3.4","from":"3.5"}`
-> `{"level":"info","ts":1526586949.0922918,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}`
-
-
-```bash
-endpoint health --endpoints=localhost:2379,localhost:22379,localhost:32379
-< (@GITHUB_HANDLE) pkg:*
-# Individual's name (@GITHUB_HANDLE) pkg:*
-#
-# Please keep the list sorted.
-
-# MAINTAINERS
-Brandon Philips (@philips) pkg:*
-Gyuho Lee (@gyuho) pkg:*
-Hitoshi Mitake (@mitake) pkg:*
-Jingyi Hu (@jingyih) pkg:*
-Joe Betz (@jpbetz) pkg:*
-Sahdev Zala (@spzala) pkg:*
-Sam Batschelet (@hexfusion) pkg:*
-Xiang Li (@xiang90) pkg:*
-
-Ben Darnell (@bdarnell) pkg:go.etcd.io/etcd/raft
-Tobias Grieger (@tbg) pkg:go.etcd.io/etcd/raft
-
-# REVIEWERS
-Wenjia Zhang (@wenjiaswe) pkg:*
diff --git a/etcd-fix/Makefile b/etcd-fix/Makefile
deleted file mode 100644
index 2f6a41c..0000000
--- a/etcd-fix/Makefile
+++ /dev/null
@@ -1,540 +0,0 @@
-# run from repository root
-
-
-
-# Example:
-# make build
-# make clean
-# make docker-clean
-# make docker-start
-# make docker-kill
-# make docker-remove
-
-UNAME := $(shell uname)
-XARGS = xargs
-
-# -r is only necessary on GNU xargs.
-ifeq ($(UNAME), Linux)
-XARGS += -r
-endif
-XARGS += rm -r
-
-.PHONY: build
-build:
- GO_BUILD_FLAGS="-v" ./build
- ./bin/etcd --version
- ./bin/etcdctl version
-
-clean:
- rm -f ./codecov
- rm -rf ./covdir
- rm -f ./bin/Dockerfile-release
- rm -rf ./bin/etcd*
- rm -rf ./default.etcd
- rm -rf ./tests/e2e/default.etcd
- rm -rf ./release
- rm -rf ./coverage/*.err ./coverage/*.out
- rm -rf ./tests/e2e/default.proxy
- find ./ -name "127.0.0.1:*" -o -name "localhost:*" -o -name "*.log" -o -name "agent-*" -o -name "*.coverprofile" -o -name "testname-proxy-*" | $(XARGS)
-
-docker-clean:
- docker images
- docker image prune --force
-
-docker-start:
- service docker restart
-
-docker-kill:
- docker kill `docker ps -q` || true
-
-docker-remove:
- docker rm --force `docker ps -a -q` || true
- docker rmi --force `docker images -q` || true
-
-
-
-GO_VERSION ?= 1.14.3
-ETCD_VERSION ?= $(shell git rev-parse --short HEAD || echo "GitNotFound")
-
-TEST_SUFFIX = $(shell date +%s | base64 | head -c 15)
-TEST_OPTS ?= PASSES='unit'
-
-TMP_DIR_MOUNT_FLAG = --mount type=tmpfs,destination=/tmp
-ifdef HOST_TMP_DIR
- TMP_DIR_MOUNT_FLAG = --mount type=bind,source=$(HOST_TMP_DIR),destination=/tmp
-endif
-
-
-
-# Example:
-# GO_VERSION=1.14.3 make build-docker-test
-# make build-docker-test
-#
-# gcloud docker -- login -u _json_key -p "$(cat /etc/gcp-key-etcd-development.json)" https://gcr.io
-# GO_VERSION=1.14.3 make push-docker-test
-# make push-docker-test
-#
-# gsutil -m acl ch -u allUsers:R -r gs://artifacts.etcd-development.appspot.com
-# make pull-docker-test
-
-build-docker-test:
- $(info GO_VERSION: $(GO_VERSION))
- @sed -i.bak 's|REPLACE_ME_GO_VERSION|$(GO_VERSION)|g' ./tests/Dockerfile
- docker build \
- --network=host \
- --tag gcr.io/etcd-development/etcd-test:go$(GO_VERSION) \
- --file ./tests/Dockerfile .
- @mv ./tests/Dockerfile.bak ./tests/Dockerfile
-
-push-docker-test:
- $(info GO_VERSION: $(GO_VERSION))
- gcloud docker -- push gcr.io/etcd-development/etcd-test:go$(GO_VERSION)
-
-pull-docker-test:
- $(info GO_VERSION: $(GO_VERSION))
- docker pull gcr.io/etcd-development/etcd-test:go$(GO_VERSION)
-
-
-
-# Example:
-# make build-docker-test
-# make compile-with-docker-test
-# make compile-setup-gopath-with-docker-test
-
-compile-with-docker-test:
- $(info GO_VERSION: $(GO_VERSION))
- docker run \
- --rm \
- --mount type=bind,source=`pwd`,destination=/go/src/go.etcd.io/etcd \
- gcr.io/etcd-development/etcd-test:go$(GO_VERSION) \
- /bin/bash -c "GO_BUILD_FLAGS=-v GOOS=linux GOARCH=amd64 ./build && ./bin/etcd --version"
-
-compile-setup-gopath-with-docker-test:
- $(info GO_VERSION: $(GO_VERSION))
- docker run \
- --rm \
- --mount type=bind,source=`pwd`,destination=/etcd \
- gcr.io/etcd-development/etcd-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && ETCD_SETUP_GOPATH=1 GO_BUILD_FLAGS=-v GOOS=linux GOARCH=amd64 ./build && ./bin/etcd --version && rm -rf ./gopath"
-
-
-
-# Example:
-#
-# Local machine:
-# TEST_OPTS="PASSES='fmt'" make test
-# TEST_OPTS="PASSES='fmt bom dep build unit'" make test
-# TEST_OPTS="PASSES='build unit release integration_e2e functional'" make test
-# TEST_OPTS="PASSES='build grpcproxy'" make test
-#
-# Example (test with docker):
-# make pull-docker-test
-# TEST_OPTS="PASSES='fmt'" make docker-test
-# TEST_OPTS="VERBOSE=2 PASSES='unit'" make docker-test
-#
-# Travis CI (test with docker):
-# TEST_OPTS="PASSES='fmt bom dep build unit'" make docker-test
-#
-# Semaphore CI (test with docker):
-# TEST_OPTS="PASSES='build unit release integration_e2e functional'" make docker-test
-# HOST_TMP_DIR=/tmp TEST_OPTS="PASSES='build unit release integration_e2e functional'" make docker-test
-# TEST_OPTS="GOARCH=386 PASSES='build unit integration_e2e'" make docker-test
-#
-# grpc-proxy tests (test with docker):
-# TEST_OPTS="PASSES='build grpcproxy'" make docker-test
-# HOST_TMP_DIR=/tmp TEST_OPTS="PASSES='build grpcproxy'" make docker-test
-
-.PHONY: test
-test:
- $(info TEST_OPTS: $(TEST_OPTS))
- $(info log-file: test-$(TEST_SUFFIX).log)
- $(TEST_OPTS) ./test 2>&1 | tee test-$(TEST_SUFFIX).log
- ! egrep "(--- FAIL:|DATA RACE|panic: test timed out|appears to have leaked)" -B50 -A10 test-$(TEST_SUFFIX).log
-
-docker-test:
- $(info GO_VERSION: $(GO_VERSION))
- $(info ETCD_VERSION: $(ETCD_VERSION))
- $(info TEST_OPTS: $(TEST_OPTS))
- $(info log-file: test-$(TEST_SUFFIX).log)
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`,destination=/go/src/go.etcd.io/etcd \
- gcr.io/etcd-development/etcd-test:go$(GO_VERSION) \
- /bin/bash -c "$(TEST_OPTS) ./test 2>&1 | tee test-$(TEST_SUFFIX).log"
- ! egrep "(--- FAIL:|DATA RACE|panic: test timed out|appears to have leaked)" -B50 -A10 test-$(TEST_SUFFIX).log
-
-docker-test-coverage:
- $(info GO_VERSION: $(GO_VERSION))
- $(info ETCD_VERSION: $(ETCD_VERSION))
- $(info log-file: docker-test-coverage-$(TEST_SUFFIX).log)
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`,destination=/go/src/go.etcd.io/etcd \
- gcr.io/etcd-development/etcd-test:go$(GO_VERSION) \
- /bin/bash -c "COVERDIR=covdir PASSES='build build_cov cov' ./test 2>&1 | tee docker-test-coverage-$(TEST_SUFFIX).log && /codecov -t 6040de41-c073-4d6f-bbf8-d89256ef31e1"
- ! egrep "(--- FAIL:|DATA RACE|panic: test timed out|appears to have leaked)" -B50 -A10 docker-test-coverage-$(TEST_SUFFIX).log
-
-
-
-# Example:
-# make compile-with-docker-test
-# ETCD_VERSION=v3-test make build-docker-release-master
-# ETCD_VERSION=v3-test make push-docker-release-master
-# gsutil -m acl ch -u allUsers:R -r gs://artifacts.etcd-development.appspot.com
-
-build-docker-release-master:
- $(info ETCD_VERSION: $(ETCD_VERSION))
- cp ./Dockerfile-release ./bin/Dockerfile-release
- docker build \
- --network=host \
- --tag gcr.io/etcd-development/etcd:$(ETCD_VERSION) \
- --file ./bin/Dockerfile-release \
- ./bin
- rm -f ./bin/Dockerfile-release
-
- docker run \
- --rm \
- gcr.io/etcd-development/etcd:$(ETCD_VERSION) \
- /bin/sh -c "/usr/local/bin/etcd --version && /usr/local/bin/etcdctl version"
-
-push-docker-release-master:
- $(info ETCD_VERSION: $(ETCD_VERSION))
- gcloud docker -- push gcr.io/etcd-development/etcd:$(ETCD_VERSION)
-
-
-
-# Example:
-# make build-docker-test
-# make compile-with-docker-test
-# make build-docker-static-ip-test
-#
-# gcloud docker -- login -u _json_key -p "$(cat /etc/gcp-key-etcd-development.json)" https://gcr.io
-# make push-docker-static-ip-test
-#
-# gsutil -m acl ch -u allUsers:R -r gs://artifacts.etcd-development.appspot.com
-# make pull-docker-static-ip-test
-#
-# make docker-static-ip-test-certs-run
-# make docker-static-ip-test-certs-metrics-proxy-run
-
-build-docker-static-ip-test:
- $(info GO_VERSION: $(GO_VERSION))
- @sed -i.bak 's|REPLACE_ME_GO_VERSION|$(GO_VERSION)|g' ./tests/docker-static-ip/Dockerfile
- docker build \
- --network=host \
- --tag gcr.io/etcd-development/etcd-static-ip-test:go$(GO_VERSION) \
- --file ./tests/docker-static-ip/Dockerfile \
- ./tests/docker-static-ip
- @mv ./tests/docker-static-ip/Dockerfile.bak ./tests/docker-static-ip/Dockerfile
-
-push-docker-static-ip-test:
- $(info GO_VERSION: $(GO_VERSION))
- gcloud docker -- push gcr.io/etcd-development/etcd-static-ip-test:go$(GO_VERSION)
-
-pull-docker-static-ip-test:
- $(info GO_VERSION: $(GO_VERSION))
- docker pull gcr.io/etcd-development/etcd-static-ip-test:go$(GO_VERSION)
-
-docker-static-ip-test-certs-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-static-ip/certs,destination=/certs \
- gcr.io/etcd-development/etcd-static-ip-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs/run.sh && rm -rf m*.etcd"
-
-docker-static-ip-test-certs-metrics-proxy-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-static-ip/certs-metrics-proxy,destination=/certs-metrics-proxy \
- gcr.io/etcd-development/etcd-static-ip-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-metrics-proxy/run.sh && rm -rf m*.etcd"
-
-
-
-# Example:
-# make build-docker-test
-# make compile-with-docker-test
-# make build-docker-dns-test
-#
-# gcloud docker -- login -u _json_key -p "$(cat /etc/gcp-key-etcd-development.json)" https://gcr.io
-# make push-docker-dns-test
-#
-# gsutil -m acl ch -u allUsers:R -r gs://artifacts.etcd-development.appspot.com
-# make pull-docker-dns-test
-#
-# make docker-dns-test-insecure-run
-# make docker-dns-test-certs-run
-# make docker-dns-test-certs-gateway-run
-# make docker-dns-test-certs-wildcard-run
-# make docker-dns-test-certs-common-name-auth-run
-# make docker-dns-test-certs-common-name-multi-run
-# make docker-dns-test-certs-san-dns-run
-
-build-docker-dns-test:
- $(info GO_VERSION: $(GO_VERSION))
- @sed -i.bak 's|REPLACE_ME_GO_VERSION|$(GO_VERSION)|g' ./tests/docker-dns/Dockerfile
- docker build \
- --network=host \
- --tag gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- --file ./tests/docker-dns/Dockerfile \
- ./tests/docker-dns
- @mv ./tests/docker-dns/Dockerfile.bak ./tests/docker-dns/Dockerfile
-
- docker run \
- --rm \
- --dns 127.0.0.1 \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "/etc/init.d/bind9 start && cat /dev/null >/etc/hosts && dig etcd.local"
-
-push-docker-dns-test:
- $(info GO_VERSION: $(GO_VERSION))
- gcloud docker -- push gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION)
-
-pull-docker-dns-test:
- $(info GO_VERSION: $(GO_VERSION))
- docker pull gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION)
-
-docker-dns-test-insecure-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns/insecure,destination=/insecure \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /insecure/run.sh && rm -rf m*.etcd"
-
-docker-dns-test-certs-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns/certs,destination=/certs \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs/run.sh && rm -rf m*.etcd"
-
-docker-dns-test-certs-gateway-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns/certs-gateway,destination=/certs-gateway \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-gateway/run.sh && rm -rf m*.etcd"
-
-docker-dns-test-certs-wildcard-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns/certs-wildcard,destination=/certs-wildcard \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-wildcard/run.sh && rm -rf m*.etcd"
-
-docker-dns-test-certs-common-name-auth-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns/certs-common-name-auth,destination=/certs-common-name-auth \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-common-name-auth/run.sh && rm -rf m*.etcd"
-
-docker-dns-test-certs-common-name-multi-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns/certs-common-name-multi,destination=/certs-common-name-multi \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-common-name-multi/run.sh && rm -rf m*.etcd"
-
-docker-dns-test-certs-san-dns-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns/certs-san-dns,destination=/certs-san-dns \
- gcr.io/etcd-development/etcd-dns-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-san-dns/run.sh && rm -rf m*.etcd"
-
-
-# Example:
-# make build-docker-test
-# make compile-with-docker-test
-# make build-docker-dns-srv-test
-# gcloud docker -- login -u _json_key -p "$(cat /etc/gcp-key-etcd-development.json)" https://gcr.io
-# make push-docker-dns-srv-test
-# gsutil -m acl ch -u allUsers:R -r gs://artifacts.etcd-development.appspot.com
-# make pull-docker-dns-srv-test
-# make docker-dns-srv-test-certs-run
-# make docker-dns-srv-test-certs-gateway-run
-# make docker-dns-srv-test-certs-wildcard-run
-
-build-docker-dns-srv-test:
- $(info GO_VERSION: $(GO_VERSION))
- @sed -i.bak 's|REPLACE_ME_GO_VERSION|$(GO_VERSION)|g' ./tests/docker-dns-srv/Dockerfile
- docker build \
- --network=host \
- --tag gcr.io/etcd-development/etcd-dns-srv-test:go$(GO_VERSION) \
- --file ./tests/docker-dns-srv/Dockerfile \
- ./tests/docker-dns-srv
- @mv ./tests/docker-dns-srv/Dockerfile.bak ./tests/docker-dns-srv/Dockerfile
-
- docker run \
- --rm \
- --dns 127.0.0.1 \
- gcr.io/etcd-development/etcd-dns-srv-test:go$(GO_VERSION) \
- /bin/bash -c "/etc/init.d/bind9 start && cat /dev/null >/etc/hosts && dig +noall +answer SRV _etcd-client-ssl._tcp.etcd.local && dig +noall +answer SRV _etcd-server-ssl._tcp.etcd.local && dig +noall +answer m1.etcd.local m2.etcd.local m3.etcd.local"
-
-push-docker-dns-srv-test:
- $(info GO_VERSION: $(GO_VERSION))
- gcloud docker -- push gcr.io/etcd-development/etcd-dns-srv-test:go$(GO_VERSION)
-
-pull-docker-dns-srv-test:
- $(info GO_VERSION: $(GO_VERSION))
- docker pull gcr.io/etcd-development/etcd-dns-srv-test:go$(GO_VERSION)
-
-docker-dns-srv-test-certs-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns-srv/certs,destination=/certs \
- gcr.io/etcd-development/etcd-dns-srv-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs/run.sh && rm -rf m*.etcd"
-
-docker-dns-srv-test-certs-gateway-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns-srv/certs-gateway,destination=/certs-gateway \
- gcr.io/etcd-development/etcd-dns-srv-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-gateway/run.sh && rm -rf m*.etcd"
-
-docker-dns-srv-test-certs-wildcard-run:
- $(info GO_VERSION: $(GO_VERSION))
- $(info HOST_TMP_DIR: $(HOST_TMP_DIR))
- $(info TMP_DIR_MOUNT_FLAG: $(TMP_DIR_MOUNT_FLAG))
- docker run \
- --rm \
- --tty \
- --dns 127.0.0.1 \
- $(TMP_DIR_MOUNT_FLAG) \
- --mount type=bind,source=`pwd`/bin,destination=/etcd \
- --mount type=bind,source=`pwd`/tests/docker-dns-srv/certs-wildcard,destination=/certs-wildcard \
- gcr.io/etcd-development/etcd-dns-srv-test:go$(GO_VERSION) \
- /bin/bash -c "cd /etcd && /certs-wildcard/run.sh && rm -rf m*.etcd"
-
-
-
-# Example:
-# make build-functional
-# make build-docker-functional
-# make push-docker-functional
-# make pull-docker-functional
-
-build-functional:
- $(info GO_VERSION: $(GO_VERSION))
- $(info ETCD_VERSION: $(ETCD_VERSION))
- ./tests/functional/build
- ./bin/etcd-agent -help || true && \
- ./bin/etcd-proxy -help || true && \
- ./bin/etcd-runner --help || true && \
- ./bin/etcd-tester -help || true
-
-build-docker-functional:
- $(info GO_VERSION: $(GO_VERSION))
- $(info ETCD_VERSION: $(ETCD_VERSION))
- @sed -i.bak 's|REPLACE_ME_GO_VERSION|$(GO_VERSION)|g' ./tests/functional/Dockerfile
- docker build \
- --network=host \
- --tag gcr.io/etcd-development/etcd-functional:go$(GO_VERSION) \
- --file ./tests/functional/Dockerfile \
- .
- @mv ./tests/functional/Dockerfile.bak ./tests/functional/Dockerfile
-
- docker run \
- --rm \
- gcr.io/etcd-development/etcd-functional:go$(GO_VERSION) \
- /bin/bash -c "./bin/etcd --version && \
- ./bin/etcd-failpoints --version && \
- ./bin/etcdctl version && \
- ./bin/etcd-agent -help || true && \
- ./bin/etcd-proxy -help || true && \
- ./bin/etcd-runner --help || true && \
- ./bin/etcd-tester -help || true && \
- ./bin/benchmark --help || true"
-
-push-docker-functional:
- $(info GO_VERSION: $(GO_VERSION))
- $(info ETCD_VERSION: $(ETCD_VERSION))
- gcloud docker -- push gcr.io/etcd-development/etcd-functional:go$(GO_VERSION)
-
-pull-docker-functional:
- $(info GO_VERSION: $(GO_VERSION))
- $(info ETCD_VERSION: $(ETCD_VERSION))
- docker pull gcr.io/etcd-development/etcd-functional:go$(GO_VERSION)
diff --git a/etcd-fix/Procfile b/etcd-fix/Procfile
deleted file mode 100644
index 7d6b63e..0000000
--- a/etcd-fix/Procfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# Use goreman to run `go get github.com/mattn/goreman`
-# Change the path of bin/etcd if etcd is located elsewhere
-
-etcd1: bin/etcd --name infra1 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
-etcd2: bin/etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
-etcd3: bin/etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
-#proxy: bin/etcd grpc-proxy start --endpoints=127.0.0.1:2379,127.0.0.1:22379,127.0.0.1:32379 --listen-addr=127.0.0.1:23790 --advertise-client-url=127.0.0.1:23790 --enable-pprof
-
-# A learner node can be started using Procfile.learner
diff --git a/etcd-fix/Procfile.learner b/etcd-fix/Procfile.learner
deleted file mode 100644
index 06e3d72..0000000
--- a/etcd-fix/Procfile.learner
+++ /dev/null
@@ -1,12 +0,0 @@
-# Use goreman to run `go get github.com/mattn/goreman`
-
-# 1. Start the cluster using Procfile
-# 2. Add learner node to the cluster
-# % etcdctl member add infra4 --peer-urls="http://127.0.0.1:42380" --learner=true
-
-# 3. Start learner node with goreman
-# Change the path of bin/etcd if etcd is located elsewhere
-etcd4: bin/etcd --name infra4 --listen-client-urls http://127.0.0.1:42379 --advertise-client-urls http://127.0.0.1:42379 --listen-peer-urls http://127.0.0.1:42380 --initial-advertise-peer-urls http://127.0.0.1:42380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra4=http://127.0.0.1:42380,infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state existing --enable-pprof --logger=zap --log-outputs=stderr
-
-# 4. The learner node can be promoted to voting member by the command
-# % etcdctl member promote
diff --git a/etcd-fix/Procfile.v2 b/etcd-fix/Procfile.v2
deleted file mode 100644
index 0037096..0000000
--- a/etcd-fix/Procfile.v2
+++ /dev/null
@@ -1,7 +0,0 @@
-# Use goreman to run `go get github.com/mattn/goreman`
-# Change the path of bin/etcd if etcd is located elsewhere
-etcd1: bin/etcd --name infra1 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof
-etcd2: bin/etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof
-etcd3: bin/etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof
-# in future, use proxy to listen on 2379
-#proxy: bin/etcd --name infra-proxy1 --proxy=on --listen-client-urls http://127.0.0.1:2378 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --enable-pprof
diff --git a/etcd-fix/README.md b/etcd-fix/README.md
deleted file mode 100644
index d3517d0..0000000
--- a/etcd-fix/README.md
+++ /dev/null
@@ -1,208 +0,0 @@
-# etcd
-
-[![Go Report Card](https://goreportcard.com/badge/github.com/etcd-io/etcd?style=flat-square)](https://goreportcard.com/report/github.com/etcd-io/etcd)
-[![Coverage](https://codecov.io/gh/etcd-io/etcd/branch/master/graph/badge.svg)](https://codecov.io/gh/etcd-io/etcd)
-[![Build Status Travis](https://img.shields.io/travis/etcd-io/etcdlabs.svg?style=flat-square&&branch=master)](https://travis-ci.com/etcd-io/etcd)
-[![Build Status Semaphore](https://semaphoreci.com/api/v1/etcd-io/etcd/branches/master/shields_badge.svg)](https://semaphoreci.com/etcd-io/etcd)
-[![Docs](https://img.shields.io/badge/docs-latest-green.svg)](https://etcd.io/docs)
-[![Godoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](https://godoc.org/github.com/etcd-io/etcd)
-[![Releases](https://img.shields.io/github/release/etcd-io/etcd/all.svg?style=flat-square)](https://github.com/etcd-io/etcd/releases)
-[![LICENSE](https://img.shields.io/github/license/etcd-io/etcd.svg?style=flat-square)](https://github.com/etcd-io/etcd/blob/master/LICENSE)
-
-**Note**: The `master` branch may be in an *unstable or even broken state* during development. Please use [releases][github-release] instead of the `master` branch in order to get stable binaries.
-
-![etcd Logo](logos/etcd-horizontal-color.svg)
-
-etcd is a distributed reliable key-value store for the most critical data of a distributed system, with a focus on being:
-
-* *Simple*: well-defined, user-facing API (gRPC)
-* *Secure*: automatic TLS with optional client cert authentication
-* *Fast*: benchmarked 10,000 writes/sec
-* *Reliable*: properly distributed using Raft
-
-etcd is written in Go and uses the [Raft][raft] consensus algorithm to manage a highly-available replicated log.
-
-etcd is used [in production by many companies](./ADOPTERS.md), and the development team stands behind it in critical deployment scenarios, where etcd is frequently teamed with applications such as [Kubernetes][k8s], [locksmith][locksmith], [vulcand][vulcand], [Doorman][doorman], and many others. Reliability is further ensured by [**rigorous testing**](https://github.com/etcd-io/etcd/tree/master/tests/functional).
-
-See [etcdctl][etcdctl] for a simple command line client.
-
-[raft]: https://raft.github.io/
-[k8s]: http://kubernetes.io/
-[doorman]: https://github.com/youtube/doorman
-[locksmith]: https://github.com/coreos/locksmith
-[vulcand]: https://github.com/vulcand/vulcand
-[etcdctl]: https://github.com/etcd-io/etcd/tree/master/etcdctl
-
-## Community meetings
-
-etcd contributors and maintainers have monthly (every four weeks) meetings at 11:00 AM (USA Pacific) on Thursday.
-
-An initial agenda will be posted to the [shared Google docs][shared-meeting-notes] a day before each meeting, and everyone is welcome to suggest additional topics or other agendas.
-
-[shared-meeting-notes]: https://docs.google.com/document/d/16XEGyPBisZvmmoIHSZzv__LoyOeluC5a4x353CX0SIM/edit
-
-
-Time:
-- [Jan 10th, 2019 11:00 AM video](https://www.youtube.com/watch?v=0Cphtbd1OSc&feature=youtu.be)
-- [Feb 7th, 2019 11:00 AM video](https://youtu.be/U80b--oAlYM)
-- [Mar 7th, 2019 11:00 AM video](https://youtu.be/w9TI5B7D1zg)
-- [Apr 4th, 2019 11:00 AM video](https://youtu.be/oqQR2XH1L_A)
-- [May 2nd, 2019 11:00 AM video](https://youtu.be/wFwQePuDWVw)
-- [May 30th, 2019 11:00 AM video](https://youtu.be/2t1R5NATYG4)
-- [Jul 11th, 2019 11:00 AM video](https://youtu.be/k_FZEipWD6Y)
-- [Jul 25, 2019 11:00 AM video](https://youtu.be/VSUJTACO93I)
-- [Aug 22, 2019 11:00 AM video](https://youtu.be/6IBQ-VxQmuM)
-- [Sep 19, 2019 11:00 AM video](https://youtu.be/SqfxU9DhBOc)
-- Nov 14, 2019 11:00 AM
-- Dec 12, 2019 11:00 AM
-- Jan 09, 2020 11:00 AM
-- Feb 06, 2020 11:00 AM
-- Mar 05, 2020 11:00 AM
-- Apr 02, 2020 11:00 AM
-- Apr 30, 2020 11:00 AM
-- May 28, 2020 11:00 AM
-- Jun 25, 2020 11:00 AM
-- Jul 23, 2020 11:00 AM
-- Aug 20, 2020 11:00 AM
-- Sep 17, 2020 11:00 AM
-- Oct 15, 2020 11:00 AM
-- Nov 12, 2020 11:00 AM
-- Dec 10, 2020 11:00 AM
-
-Join Hangouts Meet: [meet.google.com/umg-nrxn-qvs](https://meet.google.com/umg-nrxn-qvs)
-
-Join by phone: +1 405-792-0633 PIN: 299 906#
-
-
-## Getting started
-
-### Getting etcd
-
-The easiest way to get etcd is to use one of the pre-built release binaries which are available for OSX, Linux, Windows, and Docker on the [release page][github-release].
-
-For more installation guides, please check out [play.etcd.io](http://play.etcd.io) and [operating etcd](https://etcd.io/docs/latest/op-guide).
-
-For those wanting to try the very latest version, [build the latest version of etcd][dl-build] from the `master` branch. This first needs [*Go*](https://golang.org/) installed (version 1.13+ is required). All development occurs on `master`, including new features and bug fixes. Bug fixes are first targeted at `master` and subsequently ported to release branches, as described in the [branch management][branch-management] guide.
-
-[github-release]: https://github.com/etcd-io/etcd/releases
-[branch-management]: https://etcd.io/docs/latest/branch-management
-[dl-build]: https://etcd.io/docs/latest/dl-build#build-the-latest-version
-
-### Running etcd
-
-First start a single-member cluster of etcd.
-
-If etcd is installed using the [pre-built release binaries][github-release], run it from the installation location as below:
-
-```bash
-/tmp/etcd-download-test/etcd
-```
-
-The etcd command can be simply run as such if it is moved to the system path as below:
-
-```bash
-mv /tmp/etcd-download-test/etcd /usr/local/bin/
-etcd
-```
-
-If etcd is [built from the master branch][dl-build], run it as below:
-
-```bash
-./bin/etcd
-```
-
-This will bring up etcd listening on port 2379 for client communication and on port 2380 for server-to-server communication.
-
-Next, let's set a single key, and then retrieve it:
-
-```
-etcdctl put mykey "this is awesome"
-etcdctl get mykey
-```
-
-etcd is now running and serving client requests. For more, please check out:
-
-- [Interactive etcd playground](http://play.etcd.io)
-- [Animated quick demo](https://etcd.io/docs/latest/demo)
-
-### etcd TCP ports
-
-The [official etcd ports][iana-ports] are 2379 for client requests, and 2380 for peer communication.
-
-[iana-ports]: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt
-
-### Running a local etcd cluster
-
-First install [goreman](https://github.com/mattn/goreman), which manages Procfile-based applications.
-
-Our [Procfile script](./Procfile) will set up a local example cluster. Start it with:
-
-```bash
-goreman start
-```
-
-This will bring up 3 etcd members `infra1`, `infra2` and `infra3` and optionally etcd `grpc-proxy`, which runs locally and composes a cluster.
-
-Every cluster member and proxy accepts key value reads and key value writes.
-
-Follow the steps in [Procfile.learner](./Procfile.learner) to add a learner node to the cluster. Start the learner node with:
-
-```bash
-goreman -f ./Procfile.learner start
-```
-
-### Next steps
-
-Now it's time to dig into the full etcd API and other guides.
-
-- Read the full [documentation][fulldoc].
-- Explore the full gRPC [API][api].
-- Set up a [multi-machine cluster][clustering].
-- Learn the [config format, env variables and flags][configuration].
-- Find [language bindings and tools][integrations].
-- Use TLS to [secure an etcd cluster][security].
-- [Tune etcd][tuning].
-
-[fulldoc]: https://etcd.io/docs/latest
-[api]: https://etcd.io/docs/latest/learning/api
-[clustering]: https://etcd.io/docs/latest/op-guide/clustering
-[configuration]: https://etcd.io/docs/latest/op-guide/configuration
-[integrations]: https://etcd.io/docs/latest/integrations
-[security]: https://etcd.io/docs/latest/op-guide/security
-[tuning]: https://etcd.io/docs/latest/tuning
-
-## Contact
-
-- Mailing list: [etcd-dev](https://groups.google.com/forum/?hl=en#!forum/etcd-dev)
-- IRC: #[etcd](irc://irc.freenode.org:6667/#etcd) on freenode.org
-- Planning/Roadmap: [milestones](https://github.com/etcd-io/etcd/milestones), [roadmap](./ROADMAP.md)
-- Bugs: [issues](https://github.com/etcd-io/etcd/issues)
-
-## Contributing
-
-See [CONTRIBUTING](CONTRIBUTING.md) for details on submitting patches and the contribution workflow.
-
-## Reporting bugs
-
-See [reporting bugs](https://etcd.io/docs/latest/reporting-bugs) for details about reporting any issues.
-
-## Reporting a security vulnerability
-
-See [security disclosure and release process](security/README.md) for details on how to report a security vulnerability and how the etcd team manages it.
-
-## Issue and PR management
-
-See [issue triage guidelines](Documentation/triage/issues.md) for details on how issues are managed.
-
-See [PR management](Documentation/triage/PRs.md) for guidelines on how pull requests are managed.
-
-## etcd Emeritus Maintainers
-
-These emeritus maintainers dedicated a part of their career to etcd and reviewed code, triaged bugs, and pushed the project forward over a substantial period of time. Their contribution is greatly appreciated.
-
-* Fanmin Shi
-* Anthony Romano
-
-### License
-
-etcd is under the Apache 2.0 license. See the [LICENSE](LICENSE) file for details.
diff --git a/etcd-fix/ROADMAP.md b/etcd-fix/ROADMAP.md
deleted file mode 100644
index d989816..0000000
--- a/etcd-fix/ROADMAP.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# etcd roadmap
-
-**work in progress**
-
-This document defines a high level roadmap for etcd development.
-
-The dates below should not be considered authoritative, but rather indicative of the projected timeline of the project. The [milestones defined in GitHub](https://github.com/etcd-io/etcd/milestones) represent the most up-to-date and issue-for-issue plans.
-
-etcd 3.3 is our current stable branch. The roadmap below outlines new features that will be added to etcd, and while subject to change, define what future stable will look like.
-
-### etcd 3.4 (2019)
-
-- Stabilization of 3.3 experimental features
-- Support/document downgrade
-- Snapshot restore as Go library
-- Improved client balancer with new gRPC balancer interface
-- Improve single-client put performance
-- Improve large response handling
-- Improve test coverage
-- Decrease test runtime
-- Migrate to Go module for dependency management
diff --git a/etcd-fix/api/LICENSE b/etcd-fix/api/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/etcd-fix/api/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/etcd-fix/api/authpb/auth.pb.go b/etcd-fix/api/authpb/auth.pb.go
deleted file mode 100644
index 0dc551f..0000000
--- a/etcd-fix/api/authpb/auth.pb.go
+++ /dev/null
@@ -1,1170 +0,0 @@
-// Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: auth.proto
-
-package authpb
-
-import (
- fmt "fmt"
- io "io"
- math "math"
- math_bits "math/bits"
-
- _ "github.com/gogo/protobuf/gogoproto"
- proto "github.com/golang/protobuf/proto"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type Permission_Type int32
-
-const (
- READ Permission_Type = 0
- WRITE Permission_Type = 1
- READWRITE Permission_Type = 2
-)
-
-var Permission_Type_name = map[int32]string{
- 0: "READ",
- 1: "WRITE",
- 2: "READWRITE",
-}
-
-var Permission_Type_value = map[string]int32{
- "READ": 0,
- "WRITE": 1,
- "READWRITE": 2,
-}
-
-func (x Permission_Type) String() string {
- return proto.EnumName(Permission_Type_name, int32(x))
-}
-
-func (Permission_Type) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8bbd6f3875b0e874, []int{2, 0}
-}
-
-type UserAddOptions struct {
- NoPassword bool `protobuf:"varint,1,opt,name=no_password,json=noPassword,proto3" json:"no_password,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *UserAddOptions) Reset() { *m = UserAddOptions{} }
-func (m *UserAddOptions) String() string { return proto.CompactTextString(m) }
-func (*UserAddOptions) ProtoMessage() {}
-func (*UserAddOptions) Descriptor() ([]byte, []int) {
- return fileDescriptor_8bbd6f3875b0e874, []int{0}
-}
-func (m *UserAddOptions) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *UserAddOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_UserAddOptions.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *UserAddOptions) XXX_Merge(src proto.Message) {
- xxx_messageInfo_UserAddOptions.Merge(m, src)
-}
-func (m *UserAddOptions) XXX_Size() int {
- return m.Size()
-}
-func (m *UserAddOptions) XXX_DiscardUnknown() {
- xxx_messageInfo_UserAddOptions.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UserAddOptions proto.InternalMessageInfo
-
-// User is a single entry in the bucket authUsers
-type User struct {
- Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Password []byte `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
- Roles []string `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty"`
- Options *UserAddOptions `protobuf:"bytes,4,opt,name=options,proto3" json:"options,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *User) Reset() { *m = User{} }
-func (m *User) String() string { return proto.CompactTextString(m) }
-func (*User) ProtoMessage() {}
-func (*User) Descriptor() ([]byte, []int) {
- return fileDescriptor_8bbd6f3875b0e874, []int{1}
-}
-func (m *User) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_User.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *User) XXX_Merge(src proto.Message) {
- xxx_messageInfo_User.Merge(m, src)
-}
-func (m *User) XXX_Size() int {
- return m.Size()
-}
-func (m *User) XXX_DiscardUnknown() {
- xxx_messageInfo_User.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_User proto.InternalMessageInfo
-
-// Permission is a single entity
-type Permission struct {
- PermType Permission_Type `protobuf:"varint,1,opt,name=permType,proto3,enum=authpb.Permission_Type" json:"permType,omitempty"`
- Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
- RangeEnd []byte `protobuf:"bytes,3,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Permission) Reset() { *m = Permission{} }
-func (m *Permission) String() string { return proto.CompactTextString(m) }
-func (*Permission) ProtoMessage() {}
-func (*Permission) Descriptor() ([]byte, []int) {
- return fileDescriptor_8bbd6f3875b0e874, []int{2}
-}
-func (m *Permission) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Permission) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Permission.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Permission) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Permission.Merge(m, src)
-}
-func (m *Permission) XXX_Size() int {
- return m.Size()
-}
-func (m *Permission) XXX_DiscardUnknown() {
- xxx_messageInfo_Permission.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Permission proto.InternalMessageInfo
-
-// Role is a single entry in the bucket authRoles
-type Role struct {
- Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- KeyPermission []*Permission `protobuf:"bytes,2,rep,name=keyPermission,proto3" json:"keyPermission,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Role) Reset() { *m = Role{} }
-func (m *Role) String() string { return proto.CompactTextString(m) }
-func (*Role) ProtoMessage() {}
-func (*Role) Descriptor() ([]byte, []int) {
- return fileDescriptor_8bbd6f3875b0e874, []int{3}
-}
-func (m *Role) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Role) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Role.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Role) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Role.Merge(m, src)
-}
-func (m *Role) XXX_Size() int {
- return m.Size()
-}
-func (m *Role) XXX_DiscardUnknown() {
- xxx_messageInfo_Role.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Role proto.InternalMessageInfo
-
-func init() {
- proto.RegisterEnum("authpb.Permission_Type", Permission_Type_name, Permission_Type_value)
- proto.RegisterType((*UserAddOptions)(nil), "authpb.UserAddOptions")
- proto.RegisterType((*User)(nil), "authpb.User")
- proto.RegisterType((*Permission)(nil), "authpb.Permission")
- proto.RegisterType((*Role)(nil), "authpb.Role")
-}
-
-func init() { proto.RegisterFile("auth.proto", fileDescriptor_8bbd6f3875b0e874) }
-
-var fileDescriptor_8bbd6f3875b0e874 = []byte{
- // 338 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0xcf, 0x4e, 0xea, 0x40,
- 0x14, 0xc6, 0x3b, 0xb4, 0x70, 0xdb, 0xc3, 0x85, 0x90, 0x13, 0x72, 0x6f, 0x83, 0x49, 0x6d, 0xba,
- 0x6a, 0x5c, 0x54, 0x85, 0x8d, 0x5b, 0x8c, 0x2c, 0x5c, 0x49, 0x26, 0x18, 0x97, 0xa4, 0xa4, 0x13,
- 0x24, 0xc0, 0x4c, 0x33, 0x83, 0x31, 0x6c, 0x7c, 0x0e, 0x17, 0x3e, 0x10, 0x4b, 0x1e, 0x41, 0xf0,
- 0x45, 0x4c, 0x67, 0xf8, 0x13, 0xa2, 0xbb, 0xef, 0x7c, 0xe7, 0xfb, 0x66, 0x7e, 0x99, 0x01, 0x48,
- 0x5f, 0x16, 0xcf, 0x49, 0x2e, 0xc5, 0x42, 0x60, 0xa5, 0xd0, 0xf9, 0xa8, 0xd5, 0x1c, 0x8b, 0xb1,
- 0xd0, 0xd6, 0x65, 0xa1, 0xcc, 0x36, 0xba, 0x86, 0xfa, 0xa3, 0x62, 0xb2, 0x9b, 0x65, 0x0f, 0xf9,
- 0x62, 0x22, 0xb8, 0xc2, 0x73, 0xa8, 0x72, 0x31, 0xcc, 0x53, 0xa5, 0x5e, 0x85, 0xcc, 0x7c, 0x12,
- 0x92, 0xd8, 0xa5, 0xc0, 0x45, 0x7f, 0xe7, 0x44, 0x6f, 0xe0, 0x14, 0x15, 0x44, 0x70, 0x78, 0x3a,
- 0x67, 0x3a, 0xf1, 0x97, 0x6a, 0x8d, 0x2d, 0x70, 0x0f, 0xcd, 0x92, 0xf6, 0x0f, 0x33, 0x36, 0xa1,
- 0x2c, 0xc5, 0x8c, 0x29, 0xdf, 0x0e, 0xed, 0xd8, 0xa3, 0x66, 0xc0, 0x2b, 0xf8, 0x23, 0xcc, 0xcd,
- 0xbe, 0x13, 0x92, 0xb8, 0xda, 0xfe, 0x97, 0x18, 0xe0, 0xe4, 0x94, 0x8b, 0xee, 0x63, 0xd1, 0x07,
- 0x01, 0xe8, 0x33, 0x39, 0x9f, 0x28, 0x35, 0x11, 0x1c, 0x3b, 0xe0, 0xe6, 0x4c, 0xce, 0x07, 0xcb,
- 0xdc, 0xa0, 0xd4, 0xdb, 0xff, 0xf7, 0x27, 0x1c, 0x53, 0x49, 0xb1, 0xa6, 0x87, 0x20, 0x36, 0xc0,
- 0x9e, 0xb2, 0xe5, 0x0e, 0xb1, 0x90, 0x78, 0x06, 0x9e, 0x4c, 0xf9, 0x98, 0x0d, 0x19, 0xcf, 0x7c,
- 0xdb, 0xa0, 0x6b, 0xa3, 0xc7, 0xb3, 0xe8, 0x02, 0x1c, 0x5d, 0x73, 0xc1, 0xa1, 0xbd, 0xee, 0x5d,
- 0xc3, 0x42, 0x0f, 0xca, 0x4f, 0xf4, 0x7e, 0xd0, 0x6b, 0x10, 0xac, 0x81, 0x57, 0x98, 0x66, 0x2c,
- 0x45, 0x03, 0x70, 0xa8, 0x98, 0xb1, 0x5f, 0x9f, 0xe7, 0x06, 0x6a, 0x53, 0xb6, 0x3c, 0x62, 0xf9,
- 0xa5, 0xd0, 0x8e, 0xab, 0x6d, 0xfc, 0x09, 0x4c, 0x4f, 0x83, 0xb7, 0xfe, 0x6a, 0x13, 0x58, 0xeb,
- 0x4d, 0x60, 0xad, 0xb6, 0x01, 0x59, 0x6f, 0x03, 0xf2, 0xb9, 0x0d, 0xc8, 0xfb, 0x57, 0x60, 0x8d,
- 0x2a, 0xfa, 0x23, 0x3b, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x61, 0x66, 0xc6, 0x9d, 0xf4, 0x01,
- 0x00, 0x00,
-}
-
-func (m *UserAddOptions) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *UserAddOptions) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *UserAddOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.NoPassword {
- i--
- if m.NoPassword {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *User) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *User) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *User) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Options != nil {
- {
- size, err := m.Options.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintAuth(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
- if len(m.Roles) > 0 {
- for iNdEx := len(m.Roles) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.Roles[iNdEx])
- copy(dAtA[i:], m.Roles[iNdEx])
- i = encodeVarintAuth(dAtA, i, uint64(len(m.Roles[iNdEx])))
- i--
- dAtA[i] = 0x1a
- }
- }
- if len(m.Password) > 0 {
- i -= len(m.Password)
- copy(dAtA[i:], m.Password)
- i = encodeVarintAuth(dAtA, i, uint64(len(m.Password)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintAuth(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *Permission) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Permission) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Permission) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.RangeEnd) > 0 {
- i -= len(m.RangeEnd)
- copy(dAtA[i:], m.RangeEnd)
- i = encodeVarintAuth(dAtA, i, uint64(len(m.RangeEnd)))
- i--
- dAtA[i] = 0x1a
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintAuth(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0x12
- }
- if m.PermType != 0 {
- i = encodeVarintAuth(dAtA, i, uint64(m.PermType))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *Role) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Role) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Role) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.KeyPermission) > 0 {
- for iNdEx := len(m.KeyPermission) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.KeyPermission[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintAuth(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintAuth(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func encodeVarintAuth(dAtA []byte, offset int, v uint64) int {
- offset -= sovAuth(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
- }
- dAtA[offset] = uint8(v)
- return base
-}
-func (m *UserAddOptions) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.NoPassword {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *User) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovAuth(uint64(l))
- }
- l = len(m.Password)
- if l > 0 {
- n += 1 + l + sovAuth(uint64(l))
- }
- if len(m.Roles) > 0 {
- for _, s := range m.Roles {
- l = len(s)
- n += 1 + l + sovAuth(uint64(l))
- }
- }
- if m.Options != nil {
- l = m.Options.Size()
- n += 1 + l + sovAuth(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Permission) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.PermType != 0 {
- n += 1 + sovAuth(uint64(m.PermType))
- }
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovAuth(uint64(l))
- }
- l = len(m.RangeEnd)
- if l > 0 {
- n += 1 + l + sovAuth(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Role) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovAuth(uint64(l))
- }
- if len(m.KeyPermission) > 0 {
- for _, e := range m.KeyPermission {
- l = e.Size()
- n += 1 + l + sovAuth(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func sovAuth(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozAuth(x uint64) (n int) {
- return sovAuth(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (m *UserAddOptions) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: UserAddOptions: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: UserAddOptions: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field NoPassword", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.NoPassword = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipAuth(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *User) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: User: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: User: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = append(m.Name[:0], dAtA[iNdEx:postIndex]...)
- if m.Name == nil {
- m.Name = []byte{}
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Password = append(m.Password[:0], dAtA[iNdEx:postIndex]...)
- if m.Password == nil {
- m.Password = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Options == nil {
- m.Options = &UserAddOptions{}
- }
- if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipAuth(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Permission) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Permission: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Permission: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PermType", wireType)
- }
- m.PermType = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.PermType |= Permission_Type(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...)
- if m.RangeEnd == nil {
- m.RangeEnd = []byte{}
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipAuth(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Role) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Role: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Role: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = append(m.Name[:0], dAtA[iNdEx:postIndex]...)
- if m.Name == nil {
- m.Name = []byte{}
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field KeyPermission", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthAuth
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthAuth
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.KeyPermission = append(m.KeyPermission, &Permission{})
- if err := m.KeyPermission[len(m.KeyPermission)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipAuth(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthAuth
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func skipAuth(dAtA []byte) (n int, err error) {
- l := len(dAtA)
- iNdEx := 0
- depth := 0
- for iNdEx < l {
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- wireType := int(wire & 0x7)
- switch wireType {
- case 0:
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- iNdEx++
- if dAtA[iNdEx-1] < 0x80 {
- break
- }
- }
- case 1:
- iNdEx += 8
- case 2:
- var length int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowAuth
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- length |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if length < 0 {
- return 0, ErrInvalidLengthAuth
- }
- iNdEx += length
- case 3:
- depth++
- case 4:
- if depth == 0 {
- return 0, ErrUnexpectedEndOfGroupAuth
- }
- depth--
- case 5:
- iNdEx += 4
- default:
- return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
- }
- if iNdEx < 0 {
- return 0, ErrInvalidLengthAuth
- }
- if depth == 0 {
- return iNdEx, nil
- }
- }
- return 0, io.ErrUnexpectedEOF
-}
-
-var (
- ErrInvalidLengthAuth = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowAuth = fmt.Errorf("proto: integer overflow")
- ErrUnexpectedEndOfGroupAuth = fmt.Errorf("proto: unexpected end of group")
-)
diff --git a/etcd-fix/api/authpb/auth.proto b/etcd-fix/api/authpb/auth.proto
deleted file mode 100644
index 8f82b7c..0000000
--- a/etcd-fix/api/authpb/auth.proto
+++ /dev/null
@@ -1,42 +0,0 @@
-syntax = "proto3";
-package authpb;
-
-import "gogoproto/gogo.proto";
-
-option (gogoproto.marshaler_all) = true;
-option (gogoproto.sizer_all) = true;
-option (gogoproto.unmarshaler_all) = true;
-option (gogoproto.goproto_getters_all) = false;
-option (gogoproto.goproto_enum_prefix_all) = false;
-
-message UserAddOptions {
- bool no_password = 1;
-};
-
-// User is a single entry in the bucket authUsers
-message User {
- bytes name = 1;
- bytes password = 2;
- repeated string roles = 3;
- UserAddOptions options = 4;
-}
-
-// Permission is a single entity
-message Permission {
- enum Type {
- READ = 0;
- WRITE = 1;
- READWRITE = 2;
- }
- Type permType = 1;
-
- bytes key = 2;
- bytes range_end = 3;
-}
-
-// Role is a single entry in the bucket authRoles
-message Role {
- bytes name = 1;
-
- repeated Permission keyPermission = 2;
-}
diff --git a/etcd-fix/api/etcdserverpb/etcdserver.pb.go b/etcd-fix/api/etcdserverpb/etcdserver.pb.go
deleted file mode 100644
index bb9f1f8..0000000
--- a/etcd-fix/api/etcdserverpb/etcdserver.pb.go
+++ /dev/null
@@ -1,1008 +0,0 @@
-// Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: etcdserver.proto
-
-package etcdserverpb
-
-import (
- fmt "fmt"
- io "io"
- math "math"
- math_bits "math/bits"
-
- _ "github.com/gogo/protobuf/gogoproto"
- proto "github.com/golang/protobuf/proto"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type Request struct {
- ID uint64 `protobuf:"varint,1,opt,name=ID" json:"ID"`
- Method string `protobuf:"bytes,2,opt,name=Method" json:"Method"`
- Path string `protobuf:"bytes,3,opt,name=Path" json:"Path"`
- Val string `protobuf:"bytes,4,opt,name=Val" json:"Val"`
- Dir bool `protobuf:"varint,5,opt,name=Dir" json:"Dir"`
- PrevValue string `protobuf:"bytes,6,opt,name=PrevValue" json:"PrevValue"`
- PrevIndex uint64 `protobuf:"varint,7,opt,name=PrevIndex" json:"PrevIndex"`
- PrevExist *bool `protobuf:"varint,8,opt,name=PrevExist" json:"PrevExist,omitempty"`
- Expiration int64 `protobuf:"varint,9,opt,name=Expiration" json:"Expiration"`
- Wait bool `protobuf:"varint,10,opt,name=Wait" json:"Wait"`
- Since uint64 `protobuf:"varint,11,opt,name=Since" json:"Since"`
- Recursive bool `protobuf:"varint,12,opt,name=Recursive" json:"Recursive"`
- Sorted bool `protobuf:"varint,13,opt,name=Sorted" json:"Sorted"`
- Quorum bool `protobuf:"varint,14,opt,name=Quorum" json:"Quorum"`
- Time int64 `protobuf:"varint,15,opt,name=Time" json:"Time"`
- Stream bool `protobuf:"varint,16,opt,name=Stream" json:"Stream"`
- Refresh *bool `protobuf:"varint,17,opt,name=Refresh" json:"Refresh,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Request) Reset() { *m = Request{} }
-func (m *Request) String() string { return proto.CompactTextString(m) }
-func (*Request) ProtoMessage() {}
-func (*Request) Descriptor() ([]byte, []int) {
- return fileDescriptor_09ffbeb3bebbce7e, []int{0}
-}
-func (m *Request) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Request.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Request) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Request.Merge(m, src)
-}
-func (m *Request) XXX_Size() int {
- return m.Size()
-}
-func (m *Request) XXX_DiscardUnknown() {
- xxx_messageInfo_Request.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Request proto.InternalMessageInfo
-
-type Metadata struct {
- NodeID uint64 `protobuf:"varint,1,opt,name=NodeID" json:"NodeID"`
- ClusterID uint64 `protobuf:"varint,2,opt,name=ClusterID" json:"ClusterID"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Metadata) Reset() { *m = Metadata{} }
-func (m *Metadata) String() string { return proto.CompactTextString(m) }
-func (*Metadata) ProtoMessage() {}
-func (*Metadata) Descriptor() ([]byte, []int) {
- return fileDescriptor_09ffbeb3bebbce7e, []int{1}
-}
-func (m *Metadata) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Metadata.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Metadata) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Metadata.Merge(m, src)
-}
-func (m *Metadata) XXX_Size() int {
- return m.Size()
-}
-func (m *Metadata) XXX_DiscardUnknown() {
- xxx_messageInfo_Metadata.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Metadata proto.InternalMessageInfo
-
-func init() {
- proto.RegisterType((*Request)(nil), "etcdserverpb.Request")
- proto.RegisterType((*Metadata)(nil), "etcdserverpb.Metadata")
-}
-
-func init() { proto.RegisterFile("etcdserver.proto", fileDescriptor_09ffbeb3bebbce7e) }
-
-var fileDescriptor_09ffbeb3bebbce7e = []byte{
- // 380 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0xd2, 0xdd, 0x6e, 0xda, 0x30,
- 0x14, 0x07, 0x70, 0x0c, 0xe1, 0xcb, 0x63, 0x1b, 0xb3, 0xd0, 0x74, 0x84, 0xa6, 0x2c, 0x42, 0xbb,
- 0xc8, 0xd5, 0xf6, 0x0e, 0x2c, 0x5c, 0x44, 0x2a, 0x15, 0x0d, 0x15, 0xbd, 0x76, 0xc9, 0x29, 0x58,
- 0x02, 0x4c, 0x1d, 0x07, 0xf1, 0x06, 0x7d, 0x85, 0x3e, 0x12, 0x97, 0x7d, 0x82, 0xaa, 0xa5, 0x2f,
- 0x52, 0x39, 0x24, 0xc4, 0xed, 0x5d, 0xf4, 0xfb, 0x9f, 0x1c, 0x1f, 0x7f, 0xd0, 0x2e, 0xea, 0x79,
- 0x9c, 0xa0, 0xda, 0xa1, 0xfa, 0xbb, 0x55, 0x52, 0x4b, 0xd6, 0x29, 0x65, 0x7b, 0xdb, 0xef, 0x2d,
- 0xe4, 0x42, 0x66, 0xc1, 0x3f, 0xf3, 0x75, 0xaa, 0x19, 0x3c, 0x38, 0xb4, 0x19, 0xe1, 0x7d, 0x8a,
- 0x89, 0x66, 0x3d, 0x5a, 0x0d, 0x03, 0x20, 0x1e, 0xf1, 0x9d, 0xa1, 0x73, 0x78, 0xfe, 0x5d, 0x89,
- 0xaa, 0x61, 0xc0, 0x7e, 0xd1, 0xc6, 0x18, 0xf5, 0x52, 0xc6, 0x50, 0xf5, 0x88, 0xdf, 0xce, 0x93,
- 0xdc, 0x18, 0x50, 0x67, 0xc2, 0xf5, 0x12, 0x6a, 0x56, 0x96, 0x09, 0xfb, 0x49, 0x6b, 0x33, 0xbe,
- 0x02, 0xc7, 0x0a, 0x0c, 0x18, 0x0f, 0x84, 0x82, 0xba, 0x47, 0xfc, 0x56, 0xe1, 0x81, 0x50, 0x6c,
- 0x40, 0xdb, 0x13, 0x85, 0xbb, 0x19, 0x5f, 0xa5, 0x08, 0x0d, 0xeb, 0xaf, 0x92, 0x8b, 0x9a, 0x70,
- 0x13, 0xe3, 0x1e, 0x9a, 0xd6, 0xa0, 0x25, 0x17, 0x35, 0xa3, 0xbd, 0x48, 0x34, 0xb4, 0xce, 0xab,
- 0x90, 0xa8, 0x64, 0xf6, 0x87, 0xd2, 0xd1, 0x7e, 0x2b, 0x14, 0xd7, 0x42, 0x6e, 0xa0, 0xed, 0x11,
- 0xbf, 0x96, 0x37, 0xb2, 0xdc, 0xec, 0xed, 0x86, 0x0b, 0x0d, 0xd4, 0x1a, 0x35, 0x13, 0xd6, 0xa7,
- 0xf5, 0xa9, 0xd8, 0xcc, 0x11, 0xbe, 0x58, 0x33, 0x9c, 0xc8, 0xac, 0x1f, 0xe1, 0x3c, 0x55, 0x89,
- 0xd8, 0x21, 0x74, 0xac, 0x5f, 0x4b, 0x36, 0x67, 0x3a, 0x95, 0x4a, 0x63, 0x0c, 0x5f, 0xad, 0x82,
- 0xdc, 0x4c, 0x7a, 0x95, 0x4a, 0x95, 0xae, 0xe1, 0x9b, 0x9d, 0x9e, 0xcc, 0x4c, 0x75, 0x2d, 0xd6,
- 0x08, 0xdf, 0xad, 0xa9, 0x33, 0xc9, 0xba, 0x6a, 0x85, 0x7c, 0x0d, 0xdd, 0x0f, 0x5d, 0x33, 0x63,
- 0xae, 0xb9, 0xe8, 0x3b, 0x85, 0xc9, 0x12, 0x7e, 0x58, 0xa7, 0x52, 0xe0, 0xe0, 0x82, 0xb6, 0xc6,
- 0xa8, 0x79, 0xcc, 0x35, 0x37, 0x9d, 0x2e, 0x65, 0x8c, 0x9f, 0x5e, 0x43, 0x6e, 0x66, 0x87, 0xff,
- 0x57, 0x69, 0xa2, 0x51, 0x85, 0x41, 0xf6, 0x28, 0xce, 0xb7, 0x70, 0xe6, 0x61, 0xef, 0xf0, 0xea,
- 0x56, 0x0e, 0x47, 0x97, 0x3c, 0x1d, 0x5d, 0xf2, 0x72, 0x74, 0xc9, 0xe3, 0x9b, 0x5b, 0x79, 0x0f,
- 0x00, 0x00, 0xff, 0xff, 0xee, 0x40, 0xba, 0xd6, 0xa4, 0x02, 0x00, 0x00,
-}
-
-func (m *Request) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Request) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Request) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Refresh != nil {
- i--
- if *m.Refresh {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x1
- i--
- dAtA[i] = 0x88
- }
- i--
- if m.Stream {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x1
- i--
- dAtA[i] = 0x80
- i = encodeVarintEtcdserver(dAtA, i, uint64(m.Time))
- i--
- dAtA[i] = 0x78
- i--
- if m.Quorum {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x70
- i--
- if m.Sorted {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x68
- i--
- if m.Recursive {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x60
- i = encodeVarintEtcdserver(dAtA, i, uint64(m.Since))
- i--
- dAtA[i] = 0x58
- i--
- if m.Wait {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x50
- i = encodeVarintEtcdserver(dAtA, i, uint64(m.Expiration))
- i--
- dAtA[i] = 0x48
- if m.PrevExist != nil {
- i--
- if *m.PrevExist {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x40
- }
- i = encodeVarintEtcdserver(dAtA, i, uint64(m.PrevIndex))
- i--
- dAtA[i] = 0x38
- i -= len(m.PrevValue)
- copy(dAtA[i:], m.PrevValue)
- i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.PrevValue)))
- i--
- dAtA[i] = 0x32
- i--
- if m.Dir {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x28
- i -= len(m.Val)
- copy(dAtA[i:], m.Val)
- i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.Val)))
- i--
- dAtA[i] = 0x22
- i -= len(m.Path)
- copy(dAtA[i:], m.Path)
- i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.Path)))
- i--
- dAtA[i] = 0x1a
- i -= len(m.Method)
- copy(dAtA[i:], m.Method)
- i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.Method)))
- i--
- dAtA[i] = 0x12
- i = encodeVarintEtcdserver(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- return len(dAtA) - i, nil
-}
-
-func (m *Metadata) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Metadata) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Metadata) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- i = encodeVarintEtcdserver(dAtA, i, uint64(m.ClusterID))
- i--
- dAtA[i] = 0x10
- i = encodeVarintEtcdserver(dAtA, i, uint64(m.NodeID))
- i--
- dAtA[i] = 0x8
- return len(dAtA) - i, nil
-}
-
-func encodeVarintEtcdserver(dAtA []byte, offset int, v uint64) int {
- offset -= sovEtcdserver(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
- }
- dAtA[offset] = uint8(v)
- return base
-}
-func (m *Request) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- n += 1 + sovEtcdserver(uint64(m.ID))
- l = len(m.Method)
- n += 1 + l + sovEtcdserver(uint64(l))
- l = len(m.Path)
- n += 1 + l + sovEtcdserver(uint64(l))
- l = len(m.Val)
- n += 1 + l + sovEtcdserver(uint64(l))
- n += 2
- l = len(m.PrevValue)
- n += 1 + l + sovEtcdserver(uint64(l))
- n += 1 + sovEtcdserver(uint64(m.PrevIndex))
- if m.PrevExist != nil {
- n += 2
- }
- n += 1 + sovEtcdserver(uint64(m.Expiration))
- n += 2
- n += 1 + sovEtcdserver(uint64(m.Since))
- n += 2
- n += 2
- n += 2
- n += 1 + sovEtcdserver(uint64(m.Time))
- n += 3
- if m.Refresh != nil {
- n += 3
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Metadata) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- n += 1 + sovEtcdserver(uint64(m.NodeID))
- n += 1 + sovEtcdserver(uint64(m.ClusterID))
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func sovEtcdserver(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozEtcdserver(x uint64) (n int) {
- return sovEtcdserver(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (m *Request) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Request: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthEtcdserver
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Method = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthEtcdserver
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Path = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Val", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthEtcdserver
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Val = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Dir", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Dir = bool(v != 0)
- case 6:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevValue", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthEtcdserver
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.PrevValue = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 7:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevIndex", wireType)
- }
- m.PrevIndex = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.PrevIndex |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 8:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevExist", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- b := bool(v != 0)
- m.PrevExist = &b
- case 9:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Expiration", wireType)
- }
- m.Expiration = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Expiration |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 10:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Wait", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Wait = bool(v != 0)
- case 11:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Since", wireType)
- }
- m.Since = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Since |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 12:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Recursive", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Recursive = bool(v != 0)
- case 13:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Sorted", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Sorted = bool(v != 0)
- case 14:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Quorum", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Quorum = bool(v != 0)
- case 15:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType)
- }
- m.Time = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Time |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 16:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Stream", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Stream = bool(v != 0)
- case 17:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Refresh", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- b := bool(v != 0)
- m.Refresh = &b
- default:
- iNdEx = preIndex
- skippy, err := skipEtcdserver(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Metadata) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Metadata: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType)
- }
- m.NodeID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.NodeID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterID", wireType)
- }
- m.ClusterID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ClusterID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipEtcdserver(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthEtcdserver
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func skipEtcdserver(dAtA []byte) (n int, err error) {
- l := len(dAtA)
- iNdEx := 0
- depth := 0
- for iNdEx < l {
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- wireType := int(wire & 0x7)
- switch wireType {
- case 0:
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- iNdEx++
- if dAtA[iNdEx-1] < 0x80 {
- break
- }
- }
- case 1:
- iNdEx += 8
- case 2:
- var length int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowEtcdserver
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- length |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if length < 0 {
- return 0, ErrInvalidLengthEtcdserver
- }
- iNdEx += length
- case 3:
- depth++
- case 4:
- if depth == 0 {
- return 0, ErrUnexpectedEndOfGroupEtcdserver
- }
- depth--
- case 5:
- iNdEx += 4
- default:
- return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
- }
- if iNdEx < 0 {
- return 0, ErrInvalidLengthEtcdserver
- }
- if depth == 0 {
- return iNdEx, nil
- }
- }
- return 0, io.ErrUnexpectedEOF
-}
-
-var (
- ErrInvalidLengthEtcdserver = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowEtcdserver = fmt.Errorf("proto: integer overflow")
- ErrUnexpectedEndOfGroupEtcdserver = fmt.Errorf("proto: unexpected end of group")
-)
diff --git a/etcd-fix/api/etcdserverpb/etcdserver.proto b/etcd-fix/api/etcdserverpb/etcdserver.proto
deleted file mode 100644
index 25e0aca..0000000
--- a/etcd-fix/api/etcdserverpb/etcdserver.proto
+++ /dev/null
@@ -1,34 +0,0 @@
-syntax = "proto2";
-package etcdserverpb;
-
-import "gogoproto/gogo.proto";
-
-option (gogoproto.marshaler_all) = true;
-option (gogoproto.sizer_all) = true;
-option (gogoproto.unmarshaler_all) = true;
-option (gogoproto.goproto_getters_all) = false;
-
-message Request {
- optional uint64 ID = 1 [(gogoproto.nullable) = false];
- optional string Method = 2 [(gogoproto.nullable) = false];
- optional string Path = 3 [(gogoproto.nullable) = false];
- optional string Val = 4 [(gogoproto.nullable) = false];
- optional bool Dir = 5 [(gogoproto.nullable) = false];
- optional string PrevValue = 6 [(gogoproto.nullable) = false];
- optional uint64 PrevIndex = 7 [(gogoproto.nullable) = false];
- optional bool PrevExist = 8 [(gogoproto.nullable) = true];
- optional int64 Expiration = 9 [(gogoproto.nullable) = false];
- optional bool Wait = 10 [(gogoproto.nullable) = false];
- optional uint64 Since = 11 [(gogoproto.nullable) = false];
- optional bool Recursive = 12 [(gogoproto.nullable) = false];
- optional bool Sorted = 13 [(gogoproto.nullable) = false];
- optional bool Quorum = 14 [(gogoproto.nullable) = false];
- optional int64 Time = 15 [(gogoproto.nullable) = false];
- optional bool Stream = 16 [(gogoproto.nullable) = false];
- optional bool Refresh = 17 [(gogoproto.nullable) = true];
-}
-
-message Metadata {
- optional uint64 NodeID = 1 [(gogoproto.nullable) = false];
- optional uint64 ClusterID = 2 [(gogoproto.nullable) = false];
-}
diff --git a/etcd-fix/api/etcdserverpb/gw/rpc.pb.gw.go b/etcd-fix/api/etcdserverpb/gw/rpc.pb.gw.go
deleted file mode 100644
index 2fca126..0000000
--- a/etcd-fix/api/etcdserverpb/gw/rpc.pb.gw.go
+++ /dev/null
@@ -1,3771 +0,0 @@
-// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
-// source: api/etcdserverpb/rpc.proto
-
-/*
-Package etcdserverpb is a reverse proxy.
-
-It translates gRPC into RESTful JSON APIs.
-*/
-package gw
-
-import (
- "context"
- "go.etcd.io/etcd/api/v3/etcdserverpb"
- "io"
- "net/http"
-
- "github.com/golang/protobuf/descriptor"
- "github.com/golang/protobuf/proto"
- "github.com/grpc-ecosystem/grpc-gateway/runtime"
- "github.com/grpc-ecosystem/grpc-gateway/utilities"
- "google.golang.org/grpc"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/status"
-)
-
-// Suppress "imported and not used" errors
-var _ codes.Code
-var _ io.Reader
-var _ status.Status
-var _ = runtime.String
-var _ = utilities.NewDoubleArray
-var _ = descriptor.ForMessage
-
-func request_KV_Range_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.RangeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Range(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_KV_Range_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.KVServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.RangeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Range(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_KV_Put_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.PutRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Put(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_KV_Put_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.KVServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.PutRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Put(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_KV_DeleteRange_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.DeleteRangeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.DeleteRange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_KV_DeleteRange_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.KVServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.DeleteRangeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.DeleteRange(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_KV_Txn_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.TxnRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Txn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_KV_Txn_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.KVServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.TxnRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Txn(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_KV_Compact_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.CompactionRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Compact(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_KV_Compact_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.KVServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.CompactionRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Compact(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Watch_Watch_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.WatchClient, req *http.Request, pathParams map[string]string) (etcdserverpb.Watch_WatchClient, runtime.ServerMetadata, error) {
- var metadata runtime.ServerMetadata
- stream, err := client.Watch(ctx)
- if err != nil {
- grpclog.Infof("Failed to start streaming: %v", err)
- return nil, metadata, err
- }
- dec := marshaler.NewDecoder(req.Body)
- handleSend := func() error {
- var protoReq etcdserverpb.WatchRequest
- err := dec.Decode(&protoReq)
- if err == io.EOF {
- return err
- }
- if err != nil {
- grpclog.Infof("Failed to decode request: %v", err)
- return err
- }
- if err := stream.Send(&protoReq); err != nil {
- grpclog.Infof("Failed to send request: %v", err)
- return err
- }
- return nil
- }
- if err := handleSend(); err != nil {
- if cerr := stream.CloseSend(); cerr != nil {
- grpclog.Infof("Failed to terminate client stream: %v", cerr)
- }
- if err == io.EOF {
- return stream, metadata, nil
- }
- return nil, metadata, err
- }
- go func() {
- for {
- if err := handleSend(); err != nil {
- break
- }
- }
- if err := stream.CloseSend(); err != nil {
- grpclog.Infof("Failed to terminate client stream: %v", err)
- }
- }()
- header, err := stream.Header()
- if err != nil {
- grpclog.Infof("Failed to get header from client: %v", err)
- return nil, metadata, err
- }
- metadata.HeaderMD = header
- return stream, metadata, nil
-}
-
-func request_Lease_LeaseGrant_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseGrantRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.LeaseGrant(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Lease_LeaseGrant_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.LeaseServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseGrantRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.LeaseGrant(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Lease_LeaseRevoke_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseRevokeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.LeaseRevoke(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Lease_LeaseRevoke_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.LeaseServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseRevokeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.LeaseRevoke(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Lease_LeaseRevoke_1(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseRevokeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.LeaseRevoke(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Lease_LeaseRevoke_1(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.LeaseServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseRevokeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.LeaseRevoke(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Lease_LeaseKeepAlive_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (etcdserverpb.Lease_LeaseKeepAliveClient, runtime.ServerMetadata, error) {
- var metadata runtime.ServerMetadata
- stream, err := client.LeaseKeepAlive(ctx)
- if err != nil {
- grpclog.Infof("Failed to start streaming: %v", err)
- return nil, metadata, err
- }
- dec := marshaler.NewDecoder(req.Body)
- handleSend := func() error {
- var protoReq etcdserverpb.LeaseKeepAliveRequest
- err := dec.Decode(&protoReq)
- if err == io.EOF {
- return err
- }
- if err != nil {
- grpclog.Infof("Failed to decode request: %v", err)
- return err
- }
- if err := stream.Send(&protoReq); err != nil {
- grpclog.Infof("Failed to send request: %v", err)
- return err
- }
- return nil
- }
- if err := handleSend(); err != nil {
- if cerr := stream.CloseSend(); cerr != nil {
- grpclog.Infof("Failed to terminate client stream: %v", cerr)
- }
- if err == io.EOF {
- return stream, metadata, nil
- }
- return nil, metadata, err
- }
- go func() {
- for {
- if err := handleSend(); err != nil {
- break
- }
- }
- if err := stream.CloseSend(); err != nil {
- grpclog.Infof("Failed to terminate client stream: %v", err)
- }
- }()
- header, err := stream.Header()
- if err != nil {
- grpclog.Infof("Failed to get header from client: %v", err)
- return nil, metadata, err
- }
- metadata.HeaderMD = header
- return stream, metadata, nil
-}
-
-func request_Lease_LeaseTimeToLive_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseTimeToLiveRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.LeaseTimeToLive(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Lease_LeaseTimeToLive_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.LeaseServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseTimeToLiveRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.LeaseTimeToLive(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Lease_LeaseTimeToLive_1(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseTimeToLiveRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.LeaseTimeToLive(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Lease_LeaseTimeToLive_1(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.LeaseServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseTimeToLiveRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.LeaseTimeToLive(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Lease_LeaseLeases_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseLeasesRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.LeaseLeases(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Lease_LeaseLeases_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.LeaseServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseLeasesRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.LeaseLeases(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Lease_LeaseLeases_1(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseLeasesRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.LeaseLeases(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Lease_LeaseLeases_1(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.LeaseServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.LeaseLeasesRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.LeaseLeases(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Cluster_MemberAdd_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberAddRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.MemberAdd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Cluster_MemberAdd_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.ClusterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberAddRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.MemberAdd(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Cluster_MemberRemove_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberRemoveRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.MemberRemove(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Cluster_MemberRemove_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.ClusterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberRemoveRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.MemberRemove(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Cluster_MemberUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberUpdateRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.MemberUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Cluster_MemberUpdate_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.ClusterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberUpdateRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.MemberUpdate(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Cluster_MemberList_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberListRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.MemberList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Cluster_MemberList_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.ClusterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberListRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.MemberList(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Cluster_MemberPromote_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberPromoteRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.MemberPromote(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Cluster_MemberPromote_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.ClusterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MemberPromoteRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.MemberPromote(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Maintenance_Alarm_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AlarmRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Alarm(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Maintenance_Alarm_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.MaintenanceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AlarmRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Alarm(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Maintenance_Status_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.StatusRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Status(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Maintenance_Status_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.MaintenanceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.StatusRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Status(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Maintenance_Defragment_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.DefragmentRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Defragment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Maintenance_Defragment_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.MaintenanceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.DefragmentRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Defragment(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Maintenance_Hash_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.HashRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Hash(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Maintenance_Hash_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.MaintenanceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.HashRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Hash(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Maintenance_HashKV_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.HashKVRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.HashKV(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Maintenance_HashKV_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.MaintenanceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.HashKVRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.HashKV(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Maintenance_Snapshot_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (etcdserverpb.Maintenance_SnapshotClient, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.SnapshotRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- stream, err := client.Snapshot(ctx, &protoReq)
- if err != nil {
- return nil, metadata, err
- }
- header, err := stream.Header()
- if err != nil {
- return nil, metadata, err
- }
- metadata.HeaderMD = header
- return stream, metadata, nil
-
-}
-
-func request_Maintenance_MoveLeader_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MoveLeaderRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.MoveLeader(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Maintenance_MoveLeader_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.MaintenanceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.MoveLeaderRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.MoveLeader(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Maintenance_Downgrade_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.DowngradeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Downgrade(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Maintenance_Downgrade_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.MaintenanceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.DowngradeRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Downgrade(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_AuthEnable_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthEnableRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.AuthEnable(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_AuthEnable_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthEnableRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.AuthEnable(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_AuthDisable_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthDisableRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.AuthDisable(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_AuthDisable_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthDisableRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.AuthDisable(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_AuthStatus_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthStatusRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.AuthStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_AuthStatus_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthStatusRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.AuthStatus(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_Authenticate_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthenticateRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.Authenticate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_Authenticate_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthenticateRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.Authenticate(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_UserAdd_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserAddRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.UserAdd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_UserAdd_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserAddRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.UserAdd(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_UserGet_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserGetRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.UserGet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_UserGet_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserGetRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.UserGet(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_UserList_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserListRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.UserList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_UserList_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserListRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.UserList(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_UserDelete_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserDeleteRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.UserDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_UserDelete_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserDeleteRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.UserDelete(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_UserChangePassword_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserChangePasswordRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.UserChangePassword(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_UserChangePassword_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserChangePasswordRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.UserChangePassword(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_UserGrantRole_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserGrantRoleRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.UserGrantRole(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_UserGrantRole_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserGrantRoleRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.UserGrantRole(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_UserRevokeRole_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserRevokeRoleRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.UserRevokeRole(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_UserRevokeRole_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthUserRevokeRoleRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.UserRevokeRole(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_RoleAdd_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleAddRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.RoleAdd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_RoleAdd_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleAddRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.RoleAdd(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_RoleGet_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleGetRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.RoleGet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_RoleGet_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleGetRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.RoleGet(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_RoleList_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleListRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.RoleList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_RoleList_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleListRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.RoleList(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_RoleDelete_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleDeleteRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.RoleDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_RoleDelete_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleDeleteRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.RoleDelete(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_RoleGrantPermission_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleGrantPermissionRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.RoleGrantPermission(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_RoleGrantPermission_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleGrantPermissionRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.RoleGrantPermission(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-func request_Auth_RoleRevokePermission_0(ctx context.Context, marshaler runtime.Marshaler, client etcdserverpb.AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleRevokePermissionRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := client.RoleRevokePermission(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
- return msg, metadata, err
-
-}
-
-func local_request_Auth_RoleRevokePermission_0(ctx context.Context, marshaler runtime.Marshaler, server etcdserverpb.AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
- var protoReq etcdserverpb.AuthRoleRevokePermissionRequest
- var metadata runtime.ServerMetadata
-
- newReader, berr := utilities.IOReaderFactory(req.Body)
- if berr != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
- }
- if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
- }
-
- msg, err := server.RoleRevokePermission(ctx, &protoReq)
- return msg, metadata, err
-
-}
-
-// etcdserverpb.RegisterKVHandlerServer registers the http handlers for service KV to "mux".
-// UnaryRPC :call etcdserverpb.KVServer directly.
-// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
-func RegisterKVHandlerServer(ctx context.Context, mux *runtime.ServeMux, server etcdserverpb.KVServer) error {
-
- mux.Handle("POST", pattern_KV_Range_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_KV_Range_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Range_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_Put_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_KV_Put_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Put_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_DeleteRange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_KV_DeleteRange_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_DeleteRange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_Txn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_KV_Txn_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Txn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_Compact_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_KV_Compact_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Compact_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-// etcdserverpb.RegisterWatchHandlerServer registers the http handlers for service Watch to "mux".
-// UnaryRPC :call etcdserverpb.WatchServer directly.
-// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
-func RegisterWatchHandlerServer(ctx context.Context, mux *runtime.ServeMux, server etcdserverpb.WatchServer) error {
-
- mux.Handle("POST", pattern_Watch_Watch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
- _, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- })
-
- return nil
-}
-
-// etcdserverpb.RegisterLeaseHandlerServer registers the http handlers for service Lease to "mux".
-// UnaryRPC :call etcdserverpb.LeaseServer directly.
-// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
-func RegisterLeaseHandlerServer(ctx context.Context, mux *runtime.ServeMux, server etcdserverpb.LeaseServer) error {
-
- mux.Handle("POST", pattern_Lease_LeaseGrant_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Lease_LeaseGrant_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseGrant_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseRevoke_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Lease_LeaseRevoke_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseRevoke_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseRevoke_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Lease_LeaseRevoke_1(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseRevoke_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseKeepAlive_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
- _, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- })
-
- mux.Handle("POST", pattern_Lease_LeaseTimeToLive_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Lease_LeaseTimeToLive_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseTimeToLive_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseTimeToLive_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Lease_LeaseTimeToLive_1(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseTimeToLive_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseLeases_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Lease_LeaseLeases_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseLeases_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseLeases_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Lease_LeaseLeases_1(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseLeases_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-// etcdserverpb.RegisterClusterHandlerServer registers the http handlers for service Cluster to "mux".
-// UnaryRPC :call etcdserverpb.ClusterServer directly.
-// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
-func RegisterClusterHandlerServer(ctx context.Context, mux *runtime.ServeMux, server etcdserverpb.ClusterServer) error {
-
- mux.Handle("POST", pattern_Cluster_MemberAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Cluster_MemberAdd_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberAdd_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberRemove_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Cluster_MemberRemove_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberRemove_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Cluster_MemberUpdate_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberUpdate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Cluster_MemberList_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberPromote_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Cluster_MemberPromote_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberPromote_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-// etcdserverpb.RegisterMaintenanceHandlerServer registers the http handlers for service Maintenance to "mux".
-// UnaryRPC :call etcdserverpb.MaintenanceServer directly.
-// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
-func RegisterMaintenanceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server etcdserverpb.MaintenanceServer) error {
-
- mux.Handle("POST", pattern_Maintenance_Alarm_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Maintenance_Alarm_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Alarm_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Status_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Maintenance_Status_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Status_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Defragment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Maintenance_Defragment_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Defragment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Hash_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Maintenance_Hash_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Hash_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_HashKV_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Maintenance_HashKV_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_HashKV_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Snapshot_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
- _, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- })
-
- mux.Handle("POST", pattern_Maintenance_MoveLeader_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Maintenance_MoveLeader_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_MoveLeader_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Downgrade_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Maintenance_Downgrade_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Downgrade_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-// etcdserverpb.RegisterAuthHandlerServer registers the http handlers for service Auth to "mux".
-// UnaryRPC :call etcdserverpb.AuthServer directly.
-// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
-func RegisterAuthHandlerServer(ctx context.Context, mux *runtime.ServeMux, server etcdserverpb.AuthServer) error {
-
- mux.Handle("POST", pattern_Auth_AuthEnable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_AuthEnable_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_AuthEnable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_AuthDisable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_AuthDisable_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_AuthDisable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_AuthStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_AuthStatus_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_AuthStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_Authenticate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_Authenticate_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_Authenticate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_UserAdd_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserAdd_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserGet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_UserGet_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserGet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_UserList_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_UserDelete_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserChangePassword_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_UserChangePassword_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserChangePassword_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserGrantRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_UserGrantRole_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserGrantRole_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserRevokeRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_UserRevokeRole_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserRevokeRole_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_RoleAdd_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleAdd_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleGet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_RoleGet_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleGet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_RoleList_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_RoleDelete_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleGrantPermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_RoleGrantPermission_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleGrantPermission_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleRevokePermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := local_request_Auth_RoleRevokePermission_0(rctx, inboundMarshaler, server, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleRevokePermission_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-// RegisterKVHandlerFromEndpoint is same as RegisterKVHandler but
-// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
-func RegisterKVHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
- conn, err := grpc.Dial(endpoint, opts...)
- if err != nil {
- return err
- }
- defer func() {
- if err != nil {
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- return
- }
- go func() {
- <-ctx.Done()
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- }()
- }()
-
- return RegisterKVHandler(ctx, mux, conn)
-}
-
-// RegisterKVHandler registers the http handlers for service KV to "mux".
-// The handlers forward requests to the grpc endpoint over "conn".
-func RegisterKVHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
- return RegisterKVHandlerClient(ctx, mux, etcdserverpb.NewKVClient(conn))
-}
-
-// etcdserverpb.RegisterKVHandlerClient registers the http handlers for service KV
-// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "KVClient".
-// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "KVClient"
-// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
-// "KVClient" to call the correct interceptors.
-func RegisterKVHandlerClient(ctx context.Context, mux *runtime.ServeMux, client etcdserverpb.KVClient) error {
-
- mux.Handle("POST", pattern_KV_Range_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_KV_Range_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Range_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_Put_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_KV_Put_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Put_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_DeleteRange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_KV_DeleteRange_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_DeleteRange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_Txn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_KV_Txn_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Txn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_KV_Compact_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_KV_Compact_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_KV_Compact_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-var (
- pattern_KV_Range_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "range"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_KV_Put_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "put"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_KV_DeleteRange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "deleterange"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_KV_Txn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "txn"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_KV_Compact_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "compaction"}, "", runtime.AssumeColonVerbOpt(true)))
-)
-
-var (
- forward_KV_Range_0 = runtime.ForwardResponseMessage
-
- forward_KV_Put_0 = runtime.ForwardResponseMessage
-
- forward_KV_DeleteRange_0 = runtime.ForwardResponseMessage
-
- forward_KV_Txn_0 = runtime.ForwardResponseMessage
-
- forward_KV_Compact_0 = runtime.ForwardResponseMessage
-)
-
-// RegisterWatchHandlerFromEndpoint is same as RegisterWatchHandler but
-// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
-func RegisterWatchHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
- conn, err := grpc.Dial(endpoint, opts...)
- if err != nil {
- return err
- }
- defer func() {
- if err != nil {
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- return
- }
- go func() {
- <-ctx.Done()
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- }()
- }()
-
- return RegisterWatchHandler(ctx, mux, conn)
-}
-
-// RegisterWatchHandler registers the http handlers for service Watch to "mux".
-// The handlers forward requests to the grpc endpoint over "conn".
-func RegisterWatchHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
- return RegisterWatchHandlerClient(ctx, mux, etcdserverpb.NewWatchClient(conn))
-}
-
-// etcdserverpb.RegisterWatchHandlerClient registers the http handlers for service Watch
-// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "WatchClient".
-// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WatchClient"
-// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
-// "WatchClient" to call the correct interceptors.
-func RegisterWatchHandlerClient(ctx context.Context, mux *runtime.ServeMux, client etcdserverpb.WatchClient) error {
-
- mux.Handle("POST", pattern_Watch_Watch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Watch_Watch_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Watch_Watch_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-var (
- pattern_Watch_Watch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v3", "watch"}, "", runtime.AssumeColonVerbOpt(true)))
-)
-
-var (
- forward_Watch_Watch_0 = runtime.ForwardResponseStream
-)
-
-// RegisterLeaseHandlerFromEndpoint is same as RegisterLeaseHandler but
-// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
-func RegisterLeaseHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
- conn, err := grpc.Dial(endpoint, opts...)
- if err != nil {
- return err
- }
- defer func() {
- if err != nil {
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- return
- }
- go func() {
- <-ctx.Done()
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- }()
- }()
-
- return RegisterLeaseHandler(ctx, mux, conn)
-}
-
-// RegisterLeaseHandler registers the http handlers for service Lease to "mux".
-// The handlers forward requests to the grpc endpoint over "conn".
-func RegisterLeaseHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
- return RegisterLeaseHandlerClient(ctx, mux, etcdserverpb.NewLeaseClient(conn))
-}
-
-// etcdserverpb.RegisterLeaseHandlerClient registers the http handlers for service Lease
-// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "LeaseClient".
-// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LeaseClient"
-// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
-// "LeaseClient" to call the correct interceptors.
-func RegisterLeaseHandlerClient(ctx context.Context, mux *runtime.ServeMux, client etcdserverpb.LeaseClient) error {
-
- mux.Handle("POST", pattern_Lease_LeaseGrant_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseGrant_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseGrant_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseRevoke_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseRevoke_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseRevoke_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseRevoke_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseRevoke_1(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseRevoke_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseKeepAlive_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseKeepAlive_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseKeepAlive_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseTimeToLive_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseTimeToLive_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseTimeToLive_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseTimeToLive_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseTimeToLive_1(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseTimeToLive_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseLeases_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseLeases_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseLeases_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Lease_LeaseLeases_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Lease_LeaseLeases_1(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Lease_LeaseLeases_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-var (
- pattern_Lease_LeaseGrant_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lease", "grant"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Lease_LeaseRevoke_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lease", "revoke"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Lease_LeaseRevoke_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "kv", "lease", "revoke"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Lease_LeaseKeepAlive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lease", "keepalive"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Lease_LeaseTimeToLive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lease", "timetolive"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Lease_LeaseTimeToLive_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "kv", "lease", "timetolive"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Lease_LeaseLeases_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lease", "leases"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Lease_LeaseLeases_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "kv", "lease", "leases"}, "", runtime.AssumeColonVerbOpt(true)))
-)
-
-var (
- forward_Lease_LeaseGrant_0 = runtime.ForwardResponseMessage
-
- forward_Lease_LeaseRevoke_0 = runtime.ForwardResponseMessage
-
- forward_Lease_LeaseRevoke_1 = runtime.ForwardResponseMessage
-
- forward_Lease_LeaseKeepAlive_0 = runtime.ForwardResponseStream
-
- forward_Lease_LeaseTimeToLive_0 = runtime.ForwardResponseMessage
-
- forward_Lease_LeaseTimeToLive_1 = runtime.ForwardResponseMessage
-
- forward_Lease_LeaseLeases_0 = runtime.ForwardResponseMessage
-
- forward_Lease_LeaseLeases_1 = runtime.ForwardResponseMessage
-)
-
-// RegisterClusterHandlerFromEndpoint is same as RegisterClusterHandler but
-// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
-func RegisterClusterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
- conn, err := grpc.Dial(endpoint, opts...)
- if err != nil {
- return err
- }
- defer func() {
- if err != nil {
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- return
- }
- go func() {
- <-ctx.Done()
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- }()
- }()
-
- return RegisterClusterHandler(ctx, mux, conn)
-}
-
-// RegisterClusterHandler registers the http handlers for service Cluster to "mux".
-// The handlers forward requests to the grpc endpoint over "conn".
-func RegisterClusterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
- return RegisterClusterHandlerClient(ctx, mux, etcdserverpb.NewClusterClient(conn))
-}
-
-// etcdserverpb.RegisterClusterHandlerClient registers the http handlers for service Cluster
-// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ClusterClient".
-// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ClusterClient"
-// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
-// "ClusterClient" to call the correct interceptors.
-func RegisterClusterHandlerClient(ctx context.Context, mux *runtime.ServeMux, client etcdserverpb.ClusterClient) error {
-
- mux.Handle("POST", pattern_Cluster_MemberAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Cluster_MemberAdd_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberAdd_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberRemove_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Cluster_MemberRemove_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberRemove_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Cluster_MemberUpdate_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberUpdate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Cluster_MemberList_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Cluster_MemberPromote_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Cluster_MemberPromote_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Cluster_MemberPromote_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-var (
- pattern_Cluster_MemberAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "add"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Cluster_MemberRemove_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "remove"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Cluster_MemberUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "update"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Cluster_MemberList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "list"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Cluster_MemberPromote_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "promote"}, "", runtime.AssumeColonVerbOpt(true)))
-)
-
-var (
- forward_Cluster_MemberAdd_0 = runtime.ForwardResponseMessage
-
- forward_Cluster_MemberRemove_0 = runtime.ForwardResponseMessage
-
- forward_Cluster_MemberUpdate_0 = runtime.ForwardResponseMessage
-
- forward_Cluster_MemberList_0 = runtime.ForwardResponseMessage
-
- forward_Cluster_MemberPromote_0 = runtime.ForwardResponseMessage
-)
-
-// RegisterMaintenanceHandlerFromEndpoint is same as RegisterMaintenanceHandler but
-// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
-func RegisterMaintenanceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
- conn, err := grpc.Dial(endpoint, opts...)
- if err != nil {
- return err
- }
- defer func() {
- if err != nil {
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- return
- }
- go func() {
- <-ctx.Done()
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- }()
- }()
-
- return RegisterMaintenanceHandler(ctx, mux, conn)
-}
-
-// RegisterMaintenanceHandler registers the http handlers for service Maintenance to "mux".
-// The handlers forward requests to the grpc endpoint over "conn".
-func RegisterMaintenanceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
- return RegisterMaintenanceHandlerClient(ctx, mux, etcdserverpb.NewMaintenanceClient(conn))
-}
-
-// etcdserverpb.RegisterMaintenanceHandlerClient registers the http handlers for service Maintenance
-// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MaintenanceClient".
-// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MaintenanceClient"
-// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
-// "MaintenanceClient" to call the correct interceptors.
-func RegisterMaintenanceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client etcdserverpb.MaintenanceClient) error {
-
- mux.Handle("POST", pattern_Maintenance_Alarm_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_Alarm_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Alarm_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Status_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_Status_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Status_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Defragment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_Defragment_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Defragment_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Hash_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_Hash_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Hash_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_HashKV_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_HashKV_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_HashKV_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Snapshot_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_Snapshot_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Snapshot_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_MoveLeader_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_MoveLeader_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_MoveLeader_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Maintenance_Downgrade_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Maintenance_Downgrade_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Maintenance_Downgrade_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-var (
- pattern_Maintenance_Alarm_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "alarm"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Maintenance_Status_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "status"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Maintenance_Defragment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "defragment"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Maintenance_Hash_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "hash"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Maintenance_HashKV_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "hash"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Maintenance_Snapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "snapshot"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Maintenance_MoveLeader_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "transfer-leadership"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Maintenance_Downgrade_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "downgrade"}, "", runtime.AssumeColonVerbOpt(true)))
-)
-
-var (
- forward_Maintenance_Alarm_0 = runtime.ForwardResponseMessage
-
- forward_Maintenance_Status_0 = runtime.ForwardResponseMessage
-
- forward_Maintenance_Defragment_0 = runtime.ForwardResponseMessage
-
- forward_Maintenance_Hash_0 = runtime.ForwardResponseMessage
-
- forward_Maintenance_HashKV_0 = runtime.ForwardResponseMessage
-
- forward_Maintenance_Snapshot_0 = runtime.ForwardResponseStream
-
- forward_Maintenance_MoveLeader_0 = runtime.ForwardResponseMessage
-
- forward_Maintenance_Downgrade_0 = runtime.ForwardResponseMessage
-)
-
-// RegisterAuthHandlerFromEndpoint is same as RegisterAuthHandler but
-// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
-func RegisterAuthHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
- conn, err := grpc.Dial(endpoint, opts...)
- if err != nil {
- return err
- }
- defer func() {
- if err != nil {
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- return
- }
- go func() {
- <-ctx.Done()
- if cerr := conn.Close(); cerr != nil {
- grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
- }
- }()
- }()
-
- return RegisterAuthHandler(ctx, mux, conn)
-}
-
-// RegisterAuthHandler registers the http handlers for service Auth to "mux".
-// The handlers forward requests to the grpc endpoint over "conn".
-func RegisterAuthHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
- return RegisterAuthHandlerClient(ctx, mux, etcdserverpb.NewAuthClient(conn))
-}
-
-// etcdserverpb.RegisterAuthHandlerClient registers the http handlers for service Auth
-// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AuthClient".
-// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AuthClient"
-// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
-// "AuthClient" to call the correct interceptors.
-func RegisterAuthHandlerClient(ctx context.Context, mux *runtime.ServeMux, client etcdserverpb.AuthClient) error {
-
- mux.Handle("POST", pattern_Auth_AuthEnable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_AuthEnable_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_AuthEnable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_AuthDisable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_AuthDisable_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_AuthDisable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_AuthStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_AuthStatus_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_AuthStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_Authenticate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_Authenticate_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_Authenticate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_UserAdd_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserAdd_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserGet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_UserGet_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserGet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_UserList_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_UserDelete_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserChangePassword_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_UserChangePassword_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserChangePassword_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserGrantRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_UserGrantRole_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserGrantRole_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_UserRevokeRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_UserRevokeRole_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_UserRevokeRole_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_RoleAdd_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleAdd_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleGet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_RoleGet_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleGet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_RoleList_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_RoleDelete_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleGrantPermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_RoleGrantPermission_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleGrantPermission_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- mux.Handle("POST", pattern_Auth_RoleRevokePermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
- ctx, cancel := context.WithCancel(req.Context())
- defer cancel()
- inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
- rctx, err := runtime.AnnotateContext(ctx, mux, req)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
- resp, md, err := request_Auth_RoleRevokePermission_0(rctx, inboundMarshaler, client, req, pathParams)
- ctx = runtime.NewServerMetadataContext(ctx, md)
- if err != nil {
- runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
- return
- }
-
- forward_Auth_RoleRevokePermission_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
- })
-
- return nil
-}
-
-var (
- pattern_Auth_AuthEnable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "auth", "enable"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_AuthDisable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "auth", "disable"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_AuthStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "auth", "status"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_Authenticate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "auth", "authenticate"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_UserAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "add"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_UserGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "get"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_UserList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "list"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_UserDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "delete"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_UserChangePassword_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "changepw"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_UserGrantRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "grant"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_UserRevokeRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "revoke"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_RoleAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "add"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_RoleGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "get"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_RoleList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "list"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_RoleDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "delete"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_RoleGrantPermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "grant"}, "", runtime.AssumeColonVerbOpt(true)))
-
- pattern_Auth_RoleRevokePermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "revoke"}, "", runtime.AssumeColonVerbOpt(true)))
-)
-
-var (
- forward_Auth_AuthEnable_0 = runtime.ForwardResponseMessage
-
- forward_Auth_AuthDisable_0 = runtime.ForwardResponseMessage
-
- forward_Auth_AuthStatus_0 = runtime.ForwardResponseMessage
-
- forward_Auth_Authenticate_0 = runtime.ForwardResponseMessage
-
- forward_Auth_UserAdd_0 = runtime.ForwardResponseMessage
-
- forward_Auth_UserGet_0 = runtime.ForwardResponseMessage
-
- forward_Auth_UserList_0 = runtime.ForwardResponseMessage
-
- forward_Auth_UserDelete_0 = runtime.ForwardResponseMessage
-
- forward_Auth_UserChangePassword_0 = runtime.ForwardResponseMessage
-
- forward_Auth_UserGrantRole_0 = runtime.ForwardResponseMessage
-
- forward_Auth_UserRevokeRole_0 = runtime.ForwardResponseMessage
-
- forward_Auth_RoleAdd_0 = runtime.ForwardResponseMessage
-
- forward_Auth_RoleGet_0 = runtime.ForwardResponseMessage
-
- forward_Auth_RoleList_0 = runtime.ForwardResponseMessage
-
- forward_Auth_RoleDelete_0 = runtime.ForwardResponseMessage
-
- forward_Auth_RoleGrantPermission_0 = runtime.ForwardResponseMessage
-
- forward_Auth_RoleRevokePermission_0 = runtime.ForwardResponseMessage
-)
diff --git a/etcd-fix/api/etcdserverpb/raft_internal.pb.go b/etcd-fix/api/etcdserverpb/raft_internal.pb.go
deleted file mode 100644
index a120244..0000000
--- a/etcd-fix/api/etcdserverpb/raft_internal.pb.go
+++ /dev/null
@@ -1,2685 +0,0 @@
-// Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: raft_internal.proto
-
-package etcdserverpb
-
-import (
- fmt "fmt"
- io "io"
- math "math"
- math_bits "math/bits"
-
- _ "github.com/gogo/protobuf/gogoproto"
- proto "github.com/golang/protobuf/proto"
- membershippb "go.etcd.io/etcd/api/v3/membershippb"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type RequestHeader struct {
- ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- // username is a username that is associated with an auth token of gRPC connection
- Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
- // auth_revision is a revision number of auth.authStore. It is not related to mvcc
- AuthRevision uint64 `protobuf:"varint,3,opt,name=auth_revision,json=authRevision,proto3" json:"auth_revision,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RequestHeader) Reset() { *m = RequestHeader{} }
-func (m *RequestHeader) String() string { return proto.CompactTextString(m) }
-func (*RequestHeader) ProtoMessage() {}
-func (*RequestHeader) Descriptor() ([]byte, []int) {
- return fileDescriptor_b4c9a9be0cfca103, []int{0}
-}
-func (m *RequestHeader) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *RequestHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_RequestHeader.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *RequestHeader) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RequestHeader.Merge(m, src)
-}
-func (m *RequestHeader) XXX_Size() int {
- return m.Size()
-}
-func (m *RequestHeader) XXX_DiscardUnknown() {
- xxx_messageInfo_RequestHeader.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RequestHeader proto.InternalMessageInfo
-
-// An InternalRaftRequest is the union of all requests which can be
-// sent via raft.
-type InternalRaftRequest struct {
- Header *RequestHeader `protobuf:"bytes,100,opt,name=header,proto3" json:"header,omitempty"`
- ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- V2 *Request `protobuf:"bytes,2,opt,name=v2,proto3" json:"v2,omitempty"`
- Range *RangeRequest `protobuf:"bytes,3,opt,name=range,proto3" json:"range,omitempty"`
- Put *PutRequest `protobuf:"bytes,4,opt,name=put,proto3" json:"put,omitempty"`
- DeleteRange *DeleteRangeRequest `protobuf:"bytes,5,opt,name=delete_range,json=deleteRange,proto3" json:"delete_range,omitempty"`
- Txn *TxnRequest `protobuf:"bytes,6,opt,name=txn,proto3" json:"txn,omitempty"`
- Compaction *CompactionRequest `protobuf:"bytes,7,opt,name=compaction,proto3" json:"compaction,omitempty"`
- LeaseGrant *LeaseGrantRequest `protobuf:"bytes,8,opt,name=lease_grant,json=leaseGrant,proto3" json:"lease_grant,omitempty"`
- LeaseRevoke *LeaseRevokeRequest `protobuf:"bytes,9,opt,name=lease_revoke,json=leaseRevoke,proto3" json:"lease_revoke,omitempty"`
- Alarm *AlarmRequest `protobuf:"bytes,10,opt,name=alarm,proto3" json:"alarm,omitempty"`
- LeaseCheckpoint *LeaseCheckpointRequest `protobuf:"bytes,11,opt,name=lease_checkpoint,json=leaseCheckpoint,proto3" json:"lease_checkpoint,omitempty"`
- AuthEnable *AuthEnableRequest `protobuf:"bytes,1000,opt,name=auth_enable,json=authEnable,proto3" json:"auth_enable,omitempty"`
- AuthDisable *AuthDisableRequest `protobuf:"bytes,1011,opt,name=auth_disable,json=authDisable,proto3" json:"auth_disable,omitempty"`
- AuthStatus *AuthStatusRequest `protobuf:"bytes,1013,opt,name=auth_status,json=authStatus,proto3" json:"auth_status,omitempty"`
- Authenticate *InternalAuthenticateRequest `protobuf:"bytes,1012,opt,name=authenticate,proto3" json:"authenticate,omitempty"`
- AuthUserAdd *AuthUserAddRequest `protobuf:"bytes,1100,opt,name=auth_user_add,json=authUserAdd,proto3" json:"auth_user_add,omitempty"`
- AuthUserDelete *AuthUserDeleteRequest `protobuf:"bytes,1101,opt,name=auth_user_delete,json=authUserDelete,proto3" json:"auth_user_delete,omitempty"`
- AuthUserGet *AuthUserGetRequest `protobuf:"bytes,1102,opt,name=auth_user_get,json=authUserGet,proto3" json:"auth_user_get,omitempty"`
- AuthUserChangePassword *AuthUserChangePasswordRequest `protobuf:"bytes,1103,opt,name=auth_user_change_password,json=authUserChangePassword,proto3" json:"auth_user_change_password,omitempty"`
- AuthUserGrantRole *AuthUserGrantRoleRequest `protobuf:"bytes,1104,opt,name=auth_user_grant_role,json=authUserGrantRole,proto3" json:"auth_user_grant_role,omitempty"`
- AuthUserRevokeRole *AuthUserRevokeRoleRequest `protobuf:"bytes,1105,opt,name=auth_user_revoke_role,json=authUserRevokeRole,proto3" json:"auth_user_revoke_role,omitempty"`
- AuthUserList *AuthUserListRequest `protobuf:"bytes,1106,opt,name=auth_user_list,json=authUserList,proto3" json:"auth_user_list,omitempty"`
- AuthRoleList *AuthRoleListRequest `protobuf:"bytes,1107,opt,name=auth_role_list,json=authRoleList,proto3" json:"auth_role_list,omitempty"`
- AuthRoleAdd *AuthRoleAddRequest `protobuf:"bytes,1200,opt,name=auth_role_add,json=authRoleAdd,proto3" json:"auth_role_add,omitempty"`
- AuthRoleDelete *AuthRoleDeleteRequest `protobuf:"bytes,1201,opt,name=auth_role_delete,json=authRoleDelete,proto3" json:"auth_role_delete,omitempty"`
- AuthRoleGet *AuthRoleGetRequest `protobuf:"bytes,1202,opt,name=auth_role_get,json=authRoleGet,proto3" json:"auth_role_get,omitempty"`
- AuthRoleGrantPermission *AuthRoleGrantPermissionRequest `protobuf:"bytes,1203,opt,name=auth_role_grant_permission,json=authRoleGrantPermission,proto3" json:"auth_role_grant_permission,omitempty"`
- AuthRoleRevokePermission *AuthRoleRevokePermissionRequest `protobuf:"bytes,1204,opt,name=auth_role_revoke_permission,json=authRoleRevokePermission,proto3" json:"auth_role_revoke_permission,omitempty"`
- ClusterVersionSet *membershippb.ClusterVersionSetRequest `protobuf:"bytes,1300,opt,name=cluster_version_set,json=clusterVersionSet,proto3" json:"cluster_version_set,omitempty"`
- ClusterMemberAttrSet *membershippb.ClusterMemberAttrSetRequest `protobuf:"bytes,1301,opt,name=cluster_member_attr_set,json=clusterMemberAttrSet,proto3" json:"cluster_member_attr_set,omitempty"`
- DowngradeInfoSet *membershippb.DowngradeInfoSetRequest `protobuf:"bytes,1302,opt,name=downgrade_info_set,json=downgradeInfoSet,proto3" json:"downgrade_info_set,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *InternalRaftRequest) Reset() { *m = InternalRaftRequest{} }
-func (m *InternalRaftRequest) String() string { return proto.CompactTextString(m) }
-func (*InternalRaftRequest) ProtoMessage() {}
-func (*InternalRaftRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b4c9a9be0cfca103, []int{1}
-}
-func (m *InternalRaftRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *InternalRaftRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_InternalRaftRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *InternalRaftRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_InternalRaftRequest.Merge(m, src)
-}
-func (m *InternalRaftRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *InternalRaftRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_InternalRaftRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_InternalRaftRequest proto.InternalMessageInfo
-
-type EmptyResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *EmptyResponse) Reset() { *m = EmptyResponse{} }
-func (m *EmptyResponse) String() string { return proto.CompactTextString(m) }
-func (*EmptyResponse) ProtoMessage() {}
-func (*EmptyResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b4c9a9be0cfca103, []int{2}
-}
-func (m *EmptyResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *EmptyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_EmptyResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *EmptyResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_EmptyResponse.Merge(m, src)
-}
-func (m *EmptyResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *EmptyResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_EmptyResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_EmptyResponse proto.InternalMessageInfo
-
-// What is the difference between AuthenticateRequest (defined in rpc.proto) and InternalAuthenticateRequest?
-// InternalAuthenticateRequest has a member that is filled by etcdserver and shouldn't be user-facing.
-// For avoiding misusage the field, we have an internal version of AuthenticateRequest.
-type InternalAuthenticateRequest struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
- // simple_token is generated in API layer (etcdserver/v3_server.go)
- SimpleToken string `protobuf:"bytes,3,opt,name=simple_token,json=simpleToken,proto3" json:"simple_token,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *InternalAuthenticateRequest) Reset() { *m = InternalAuthenticateRequest{} }
-func (m *InternalAuthenticateRequest) String() string { return proto.CompactTextString(m) }
-func (*InternalAuthenticateRequest) ProtoMessage() {}
-func (*InternalAuthenticateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b4c9a9be0cfca103, []int{3}
-}
-func (m *InternalAuthenticateRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *InternalAuthenticateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_InternalAuthenticateRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *InternalAuthenticateRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_InternalAuthenticateRequest.Merge(m, src)
-}
-func (m *InternalAuthenticateRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *InternalAuthenticateRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_InternalAuthenticateRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_InternalAuthenticateRequest proto.InternalMessageInfo
-
-func init() {
- proto.RegisterType((*RequestHeader)(nil), "etcdserverpb.RequestHeader")
- proto.RegisterType((*InternalRaftRequest)(nil), "etcdserverpb.InternalRaftRequest")
- proto.RegisterType((*EmptyResponse)(nil), "etcdserverpb.EmptyResponse")
- proto.RegisterType((*InternalAuthenticateRequest)(nil), "etcdserverpb.InternalAuthenticateRequest")
-}
-
-func init() { proto.RegisterFile("raft_internal.proto", fileDescriptor_b4c9a9be0cfca103) }
-
-var fileDescriptor_b4c9a9be0cfca103 = []byte{
- // 1003 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x96, 0xd9, 0x72, 0x1b, 0x45,
- 0x14, 0x86, 0x23, 0xc5, 0x71, 0xac, 0x96, 0xed, 0x38, 0x6d, 0x87, 0x34, 0x72, 0x95, 0x70, 0x1c,
- 0x12, 0xcc, 0x66, 0x53, 0xca, 0x03, 0x80, 0x90, 0x5c, 0x8e, 0xab, 0x42, 0x70, 0x4d, 0xcc, 0x52,
- 0xc5, 0xc5, 0xd0, 0x9a, 0x39, 0x96, 0x06, 0xcf, 0x46, 0x77, 0x4b, 0x31, 0xef, 0x11, 0x28, 0x1e,
- 0x83, 0xed, 0x21, 0x72, 0xc1, 0x62, 0xe0, 0x05, 0xc0, 0xdc, 0x70, 0x0f, 0xdc, 0x53, 0xbd, 0xcc,
- 0x26, 0xb5, 0x7c, 0xa7, 0xf9, 0xcf, 0x7f, 0xbe, 0x73, 0xba, 0xe7, 0xf4, 0xa8, 0xd1, 0x3a, 0xa3,
- 0x27, 0xc2, 0x0d, 0x62, 0x01, 0x2c, 0xa6, 0xe1, 0x6e, 0xca, 0x12, 0x91, 0xe0, 0x65, 0x10, 0x9e,
- 0xcf, 0x81, 0x4d, 0x80, 0xa5, 0x83, 0xd6, 0xc6, 0x30, 0x19, 0x26, 0x2a, 0xb0, 0x27, 0x7f, 0x69,
- 0x4f, 0x6b, 0xad, 0xf0, 0x18, 0xa5, 0xc1, 0x52, 0xcf, 0xfc, 0xbc, 0x2f, 0x83, 0x7b, 0x34, 0x0d,
- 0xf6, 0x22, 0x88, 0x06, 0xc0, 0xf8, 0x28, 0x48, 0xd3, 0x41, 0xe9, 0x41, 0xfb, 0xb6, 0x3f, 0x45,
- 0x2b, 0x0e, 0x7c, 0x3e, 0x06, 0x2e, 0x1e, 0x02, 0xf5, 0x81, 0xe1, 0x55, 0x54, 0x3f, 0xec, 0x93,
- 0xda, 0x56, 0x6d, 0x67, 0xc1, 0xa9, 0x1f, 0xf6, 0x71, 0x0b, 0x2d, 0x8d, 0xb9, 0x6c, 0x2d, 0x02,
- 0x52, 0xdf, 0xaa, 0xed, 0x34, 0x9c, 0xfc, 0x19, 0xdf, 0x45, 0x2b, 0x74, 0x2c, 0x46, 0x2e, 0x83,
- 0x49, 0xc0, 0x83, 0x24, 0x26, 0x57, 0x55, 0xda, 0xb2, 0x14, 0x1d, 0xa3, 0x6d, 0x3f, 0xc3, 0x68,
- 0xfd, 0xd0, 0xac, 0xce, 0xa1, 0x27, 0xc2, 0x94, 0xc3, 0x0f, 0xd0, 0xe2, 0x48, 0x95, 0x24, 0xfe,
- 0x56, 0x6d, 0xa7, 0xd9, 0xd9, 0xdc, 0x2d, 0xaf, 0x79, 0xb7, 0xd2, 0x95, 0x63, 0xac, 0x33, 0xdd,
- 0xdd, 0x43, 0xf5, 0x49, 0x47, 0xf5, 0xd5, 0xec, 0xdc, 0xb2, 0x02, 0x9c, 0xfa, 0xa4, 0x83, 0xdf,
- 0x42, 0xd7, 0x18, 0x8d, 0x87, 0xa0, 0x1a, 0x6c, 0x76, 0x5a, 0x53, 0x4e, 0x19, 0xca, 0xec, 0xda,
- 0x88, 0x5f, 0x43, 0x57, 0xd3, 0xb1, 0x20, 0x0b, 0xca, 0x4f, 0xaa, 0xfe, 0xa3, 0x71, 0xb6, 0x08,
- 0x47, 0x9a, 0x70, 0x0f, 0x2d, 0xfb, 0x10, 0x82, 0x00, 0x57, 0x17, 0xb9, 0xa6, 0x92, 0xb6, 0xaa,
- 0x49, 0x7d, 0xe5, 0xa8, 0x94, 0x6a, 0xfa, 0x85, 0x26, 0x0b, 0x8a, 0xb3, 0x98, 0x2c, 0xda, 0x0a,
- 0x1e, 0x9f, 0xc5, 0x79, 0x41, 0x71, 0x16, 0xe3, 0xb7, 0x11, 0xf2, 0x92, 0x28, 0xa5, 0x9e, 0x90,
- 0x9b, 0x7e, 0x5d, 0xa5, 0xbc, 0x54, 0x4d, 0xe9, 0xe5, 0xf1, 0x2c, 0xb3, 0x94, 0x82, 0xdf, 0x41,
- 0xcd, 0x10, 0x28, 0x07, 0x77, 0xc8, 0x68, 0x2c, 0xc8, 0x92, 0x8d, 0xf0, 0x48, 0x1a, 0x0e, 0x64,
- 0x3c, 0x27, 0x84, 0xb9, 0x24, 0xd7, 0xac, 0x09, 0x0c, 0x26, 0xc9, 0x29, 0x90, 0x86, 0x6d, 0xcd,
- 0x0a, 0xe1, 0x28, 0x43, 0xbe, 0xe6, 0xb0, 0xd0, 0xe4, 0x6b, 0xa1, 0x21, 0x65, 0x11, 0x41, 0xb6,
- 0xd7, 0xd2, 0x95, 0xa1, 0xfc, 0xb5, 0x28, 0x23, 0x7e, 0x1f, 0xad, 0xe9, 0xb2, 0xde, 0x08, 0xbc,
- 0xd3, 0x34, 0x09, 0x62, 0x41, 0x9a, 0x2a, 0xf9, 0x65, 0x4b, 0xe9, 0x5e, 0x6e, 0xca, 0x30, 0x37,
- 0xc2, 0xaa, 0x8e, 0xbb, 0xa8, 0xa9, 0x46, 0x18, 0x62, 0x3a, 0x08, 0x81, 0xfc, 0x6d, 0xdd, 0xcc,
- 0xee, 0x58, 0x8c, 0xf6, 0x95, 0x21, 0xdf, 0x0a, 0x9a, 0x4b, 0xb8, 0x8f, 0xd4, 0xc0, 0xbb, 0x7e,
- 0xc0, 0x15, 0xe3, 0x9f, 0xeb, 0xb6, 0xbd, 0x90, 0x8c, 0xbe, 0x76, 0xe4, 0x7b, 0x41, 0x0b, 0x2d,
- 0x6f, 0x84, 0x0b, 0x2a, 0xc6, 0x9c, 0xfc, 0x37, 0xb7, 0x91, 0x27, 0xca, 0x50, 0x69, 0x44, 0x4b,
- 0xf8, 0xb1, 0x6e, 0x04, 0x62, 0x11, 0x78, 0x54, 0x00, 0xf9, 0x57, 0x33, 0x5e, 0xad, 0x32, 0xb2,
- 0xb3, 0xd8, 0x2d, 0x59, 0x33, 0x5a, 0x25, 0x1f, 0xef, 0x9b, 0xe3, 0x2d, 0xcf, 0xbb, 0x4b, 0x7d,
- 0x9f, 0xfc, 0xb8, 0x34, 0x6f, 0x65, 0x1f, 0x70, 0x60, 0x5d, 0xdf, 0xaf, 0xac, 0xcc, 0x68, 0xf8,
- 0x31, 0x5a, 0x2b, 0x30, 0x7a, 0xe4, 0xc9, 0x4f, 0x9a, 0x74, 0xd7, 0x4e, 0x32, 0x67, 0xc5, 0xc0,
- 0x56, 0x69, 0x45, 0xae, 0xb6, 0x35, 0x04, 0x41, 0x7e, 0xbe, 0xb4, 0xad, 0x03, 0x10, 0x33, 0x6d,
- 0x1d, 0x80, 0xc0, 0x43, 0xf4, 0x62, 0x81, 0xf1, 0x46, 0xf2, 0x10, 0xba, 0x29, 0xe5, 0xfc, 0x69,
- 0xc2, 0x7c, 0xf2, 0x8b, 0x46, 0xbe, 0x6e, 0x47, 0xf6, 0x94, 0xfb, 0xc8, 0x98, 0x33, 0xfa, 0x0b,
- 0xd4, 0x1a, 0xc6, 0x1f, 0xa3, 0x8d, 0x52, 0xbf, 0xf2, 0xf4, 0xb8, 0x2c, 0x09, 0x81, 0x9c, 0xeb,
- 0x1a, 0xf7, 0xe7, 0xb4, 0xad, 0x4e, 0x5e, 0x52, 0x4c, 0xcb, 0x4d, 0x3a, 0x1d, 0xc1, 0x9f, 0xa0,
- 0x5b, 0x05, 0x59, 0x1f, 0x44, 0x8d, 0xfe, 0x55, 0xa3, 0x5f, 0xb1, 0xa3, 0xcd, 0x89, 0x2c, 0xb1,
- 0x31, 0x9d, 0x09, 0xe1, 0x87, 0x68, 0xb5, 0x80, 0x87, 0x01, 0x17, 0xe4, 0x37, 0x4d, 0xbd, 0x63,
- 0xa7, 0x3e, 0x0a, 0xb8, 0xa8, 0xcc, 0x51, 0x26, 0xe6, 0x24, 0xd9, 0x9a, 0x26, 0xfd, 0x3e, 0x97,
- 0x24, 0x4b, 0xcf, 0x90, 0x32, 0x31, 0x7f, 0xf5, 0x8a, 0x24, 0x27, 0xf2, 0x9b, 0xc6, 0xbc, 0x57,
- 0x2f, 0x73, 0xa6, 0x27, 0xd2, 0x68, 0xf9, 0x44, 0x2a, 0x8c, 0x99, 0xc8, 0x6f, 0x1b, 0xf3, 0x26,
- 0x52, 0x66, 0x59, 0x26, 0xb2, 0x90, 0xab, 0x6d, 0xc9, 0x89, 0xfc, 0xee, 0xd2, 0xb6, 0xa6, 0x27,
- 0xd2, 0x68, 0xf8, 0x33, 0xd4, 0x2a, 0x61, 0xd4, 0xa0, 0xa4, 0xc0, 0xa2, 0x80, 0xab, 0xff, 0xd6,
- 0xef, 0x35, 0xf3, 0x8d, 0x39, 0x4c, 0x69, 0x3f, 0xca, 0xdd, 0x19, 0xff, 0x36, 0xb5, 0xc7, 0x71,
- 0x84, 0x36, 0x8b, 0x5a, 0x66, 0x74, 0x4a, 0xc5, 0x7e, 0xd0, 0xc5, 0xde, 0xb4, 0x17, 0xd3, 0x53,
- 0x32, 0x5b, 0x8d, 0xd0, 0x39, 0x06, 0xfc, 0x11, 0x5a, 0xf7, 0xc2, 0x31, 0x17, 0xc0, 0xdc, 0x09,
- 0x30, 0x29, 0xb9, 0x1c, 0x04, 0x79, 0x86, 0xcc, 0x11, 0x28, 0x5f, 0x52, 0x76, 0x7b, 0xda, 0xf9,
- 0xa1, 0x36, 0x3e, 0x29, 0x76, 0xeb, 0xa6, 0x37, 0x1d, 0xc1, 0x14, 0xdd, 0xce, 0xc0, 0x9a, 0xe1,
- 0x52, 0x21, 0x98, 0x82, 0x7f, 0x89, 0xcc, 0xe7, 0xcf, 0x06, 0x7f, 0x4f, 0x69, 0x5d, 0x21, 0x58,
- 0x89, 0xbf, 0xe1, 0x59, 0x82, 0xf8, 0x18, 0x61, 0x3f, 0x79, 0x1a, 0x0f, 0x19, 0xf5, 0xc1, 0x0d,
- 0xe2, 0x93, 0x44, 0xd1, 0xbf, 0xd2, 0xf4, 0x7b, 0x55, 0x7a, 0x3f, 0x33, 0x1e, 0xc6, 0x27, 0x49,
- 0x89, 0xbc, 0xe6, 0x4f, 0x05, 0xb6, 0x6f, 0xa0, 0x95, 0xfd, 0x28, 0x15, 0x5f, 0x38, 0xc0, 0xd3,
- 0x24, 0xe6, 0xb0, 0x9d, 0xa2, 0xcd, 0x4b, 0x3e, 0xcd, 0x18, 0xa3, 0x05, 0x75, 0x07, 0xab, 0xa9,
- 0x3b, 0x98, 0xfa, 0x2d, 0xef, 0x66, 0xf9, 0x17, 0xcb, 0xdc, 0xcd, 0xb2, 0x67, 0x7c, 0x07, 0x2d,
- 0xf3, 0x20, 0x4a, 0x43, 0x70, 0x45, 0x72, 0x0a, 0xfa, 0x6a, 0xd6, 0x70, 0x9a, 0x5a, 0x3b, 0x96,
- 0xd2, 0xbb, 0x1b, 0xcf, 0xff, 0x6c, 0x5f, 0x79, 0x7e, 0xd1, 0xae, 0x9d, 0x5f, 0xb4, 0x6b, 0x7f,
- 0x5c, 0xb4, 0x6b, 0x5f, 0xff, 0xd5, 0xbe, 0x32, 0x58, 0x54, 0x17, 0xc3, 0x07, 0xff, 0x07, 0x00,
- 0x00, 0xff, 0xff, 0x94, 0x6f, 0x64, 0x0a, 0x98, 0x0a, 0x00, 0x00,
-}
-
-func (m *RequestHeader) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *RequestHeader) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RequestHeader) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.AuthRevision != 0 {
- i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRevision))
- i--
- dAtA[i] = 0x18
- }
- if len(m.Username) > 0 {
- i -= len(m.Username)
- copy(dAtA[i:], m.Username)
- i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.Username)))
- i--
- dAtA[i] = 0x12
- }
- if m.ID != 0 {
- i = encodeVarintRaftInternal(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *InternalRaftRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *InternalRaftRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *InternalRaftRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.DowngradeInfoSet != nil {
- {
- size, err := m.DowngradeInfoSet.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x51
- i--
- dAtA[i] = 0xb2
- }
- if m.ClusterMemberAttrSet != nil {
- {
- size, err := m.ClusterMemberAttrSet.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x51
- i--
- dAtA[i] = 0xaa
- }
- if m.ClusterVersionSet != nil {
- {
- size, err := m.ClusterVersionSet.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x51
- i--
- dAtA[i] = 0xa2
- }
- if m.AuthRoleRevokePermission != nil {
- {
- size, err := m.AuthRoleRevokePermission.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x4b
- i--
- dAtA[i] = 0xa2
- }
- if m.AuthRoleGrantPermission != nil {
- {
- size, err := m.AuthRoleGrantPermission.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x4b
- i--
- dAtA[i] = 0x9a
- }
- if m.AuthRoleGet != nil {
- {
- size, err := m.AuthRoleGet.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x4b
- i--
- dAtA[i] = 0x92
- }
- if m.AuthRoleDelete != nil {
- {
- size, err := m.AuthRoleDelete.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x4b
- i--
- dAtA[i] = 0x8a
- }
- if m.AuthRoleAdd != nil {
- {
- size, err := m.AuthRoleAdd.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x4b
- i--
- dAtA[i] = 0x82
- }
- if m.AuthRoleList != nil {
- {
- size, err := m.AuthRoleList.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x45
- i--
- dAtA[i] = 0x9a
- }
- if m.AuthUserList != nil {
- {
- size, err := m.AuthUserList.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x45
- i--
- dAtA[i] = 0x92
- }
- if m.AuthUserRevokeRole != nil {
- {
- size, err := m.AuthUserRevokeRole.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x45
- i--
- dAtA[i] = 0x8a
- }
- if m.AuthUserGrantRole != nil {
- {
- size, err := m.AuthUserGrantRole.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x45
- i--
- dAtA[i] = 0x82
- }
- if m.AuthUserChangePassword != nil {
- {
- size, err := m.AuthUserChangePassword.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x44
- i--
- dAtA[i] = 0xfa
- }
- if m.AuthUserGet != nil {
- {
- size, err := m.AuthUserGet.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x44
- i--
- dAtA[i] = 0xf2
- }
- if m.AuthUserDelete != nil {
- {
- size, err := m.AuthUserDelete.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x44
- i--
- dAtA[i] = 0xea
- }
- if m.AuthUserAdd != nil {
- {
- size, err := m.AuthUserAdd.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x44
- i--
- dAtA[i] = 0xe2
- }
- if m.AuthStatus != nil {
- {
- size, err := m.AuthStatus.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x3f
- i--
- dAtA[i] = 0xaa
- }
- if m.Authenticate != nil {
- {
- size, err := m.Authenticate.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x3f
- i--
- dAtA[i] = 0xa2
- }
- if m.AuthDisable != nil {
- {
- size, err := m.AuthDisable.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x3f
- i--
- dAtA[i] = 0x9a
- }
- if m.AuthEnable != nil {
- {
- size, err := m.AuthEnable.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x3e
- i--
- dAtA[i] = 0xc2
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x6
- i--
- dAtA[i] = 0xa2
- }
- if m.LeaseCheckpoint != nil {
- {
- size, err := m.LeaseCheckpoint.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x5a
- }
- if m.Alarm != nil {
- {
- size, err := m.Alarm.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x52
- }
- if m.LeaseRevoke != nil {
- {
- size, err := m.LeaseRevoke.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x4a
- }
- if m.LeaseGrant != nil {
- {
- size, err := m.LeaseGrant.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x42
- }
- if m.Compaction != nil {
- {
- size, err := m.Compaction.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x3a
- }
- if m.Txn != nil {
- {
- size, err := m.Txn.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x32
- }
- if m.DeleteRange != nil {
- {
- size, err := m.DeleteRange.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x2a
- }
- if m.Put != nil {
- {
- size, err := m.Put.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
- if m.Range != nil {
- {
- size, err := m.Range.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- if m.V2 != nil {
- {
- size, err := m.V2.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRaftInternal(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if m.ID != 0 {
- i = encodeVarintRaftInternal(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *EmptyResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *EmptyResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *EmptyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *InternalAuthenticateRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *InternalAuthenticateRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *InternalAuthenticateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.SimpleToken) > 0 {
- i -= len(m.SimpleToken)
- copy(dAtA[i:], m.SimpleToken)
- i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.SimpleToken)))
- i--
- dAtA[i] = 0x1a
- }
- if len(m.Password) > 0 {
- i -= len(m.Password)
- copy(dAtA[i:], m.Password)
- i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.Password)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func encodeVarintRaftInternal(dAtA []byte, offset int, v uint64) int {
- offset -= sovRaftInternal(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
- }
- dAtA[offset] = uint8(v)
- return base
-}
-func (m *RequestHeader) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRaftInternal(uint64(m.ID))
- }
- l = len(m.Username)
- if l > 0 {
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthRevision != 0 {
- n += 1 + sovRaftInternal(uint64(m.AuthRevision))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *InternalRaftRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRaftInternal(uint64(m.ID))
- }
- if m.V2 != nil {
- l = m.V2.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.Range != nil {
- l = m.Range.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.Put != nil {
- l = m.Put.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.DeleteRange != nil {
- l = m.DeleteRange.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.Txn != nil {
- l = m.Txn.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.Compaction != nil {
- l = m.Compaction.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.LeaseGrant != nil {
- l = m.LeaseGrant.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.LeaseRevoke != nil {
- l = m.LeaseRevoke.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.Alarm != nil {
- l = m.Alarm.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.LeaseCheckpoint != nil {
- l = m.LeaseCheckpoint.Size()
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.Header != nil {
- l = m.Header.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthEnable != nil {
- l = m.AuthEnable.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthDisable != nil {
- l = m.AuthDisable.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.Authenticate != nil {
- l = m.Authenticate.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthStatus != nil {
- l = m.AuthStatus.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthUserAdd != nil {
- l = m.AuthUserAdd.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthUserDelete != nil {
- l = m.AuthUserDelete.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthUserGet != nil {
- l = m.AuthUserGet.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthUserChangePassword != nil {
- l = m.AuthUserChangePassword.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthUserGrantRole != nil {
- l = m.AuthUserGrantRole.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthUserRevokeRole != nil {
- l = m.AuthUserRevokeRole.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthUserList != nil {
- l = m.AuthUserList.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthRoleList != nil {
- l = m.AuthRoleList.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthRoleAdd != nil {
- l = m.AuthRoleAdd.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthRoleDelete != nil {
- l = m.AuthRoleDelete.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthRoleGet != nil {
- l = m.AuthRoleGet.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthRoleGrantPermission != nil {
- l = m.AuthRoleGrantPermission.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.AuthRoleRevokePermission != nil {
- l = m.AuthRoleRevokePermission.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.ClusterVersionSet != nil {
- l = m.ClusterVersionSet.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.ClusterMemberAttrSet != nil {
- l = m.ClusterMemberAttrSet.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.DowngradeInfoSet != nil {
- l = m.DowngradeInfoSet.Size()
- n += 2 + l + sovRaftInternal(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *EmptyResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *InternalAuthenticateRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- l = len(m.Password)
- if l > 0 {
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- l = len(m.SimpleToken)
- if l > 0 {
- n += 1 + l + sovRaftInternal(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func sovRaftInternal(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozRaftInternal(x uint64) (n int) {
- return sovRaftInternal(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (m *RequestHeader) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: RequestHeader: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: RequestHeader: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Username = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRevision", wireType)
- }
- m.AuthRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.AuthRevision |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRaftInternal(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *InternalRaftRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: InternalRaftRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: InternalRaftRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field V2", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.V2 == nil {
- m.V2 = &Request{}
- }
- if err := m.V2.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Range == nil {
- m.Range = &RangeRequest{}
- }
- if err := m.Range.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Put", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Put == nil {
- m.Put = &PutRequest{}
- }
- if err := m.Put.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DeleteRange", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.DeleteRange == nil {
- m.DeleteRange = &DeleteRangeRequest{}
- }
- if err := m.DeleteRange.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 6:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Txn", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Txn == nil {
- m.Txn = &TxnRequest{}
- }
- if err := m.Txn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 7:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Compaction", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Compaction == nil {
- m.Compaction = &CompactionRequest{}
- }
- if err := m.Compaction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 8:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field LeaseGrant", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.LeaseGrant == nil {
- m.LeaseGrant = &LeaseGrantRequest{}
- }
- if err := m.LeaseGrant.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 9:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field LeaseRevoke", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.LeaseRevoke == nil {
- m.LeaseRevoke = &LeaseRevokeRequest{}
- }
- if err := m.LeaseRevoke.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 10:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Alarm == nil {
- m.Alarm = &AlarmRequest{}
- }
- if err := m.Alarm.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 11:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field LeaseCheckpoint", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.LeaseCheckpoint == nil {
- m.LeaseCheckpoint = &LeaseCheckpointRequest{}
- }
- if err := m.LeaseCheckpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 100:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &RequestHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1000:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthEnable", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthEnable == nil {
- m.AuthEnable = &AuthEnableRequest{}
- }
- if err := m.AuthEnable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1011:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthDisable", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthDisable == nil {
- m.AuthDisable = &AuthDisableRequest{}
- }
- if err := m.AuthDisable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1012:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Authenticate", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Authenticate == nil {
- m.Authenticate = &InternalAuthenticateRequest{}
- }
- if err := m.Authenticate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1013:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthStatus", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthStatus == nil {
- m.AuthStatus = &AuthStatusRequest{}
- }
- if err := m.AuthStatus.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1100:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthUserAdd", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthUserAdd == nil {
- m.AuthUserAdd = &AuthUserAddRequest{}
- }
- if err := m.AuthUserAdd.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1101:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthUserDelete", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthUserDelete == nil {
- m.AuthUserDelete = &AuthUserDeleteRequest{}
- }
- if err := m.AuthUserDelete.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1102:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthUserGet", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthUserGet == nil {
- m.AuthUserGet = &AuthUserGetRequest{}
- }
- if err := m.AuthUserGet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1103:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthUserChangePassword", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthUserChangePassword == nil {
- m.AuthUserChangePassword = &AuthUserChangePasswordRequest{}
- }
- if err := m.AuthUserChangePassword.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1104:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthUserGrantRole", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthUserGrantRole == nil {
- m.AuthUserGrantRole = &AuthUserGrantRoleRequest{}
- }
- if err := m.AuthUserGrantRole.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1105:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthUserRevokeRole", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthUserRevokeRole == nil {
- m.AuthUserRevokeRole = &AuthUserRevokeRoleRequest{}
- }
- if err := m.AuthUserRevokeRole.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1106:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthUserList", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthUserList == nil {
- m.AuthUserList = &AuthUserListRequest{}
- }
- if err := m.AuthUserList.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1107:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleList", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthRoleList == nil {
- m.AuthRoleList = &AuthRoleListRequest{}
- }
- if err := m.AuthRoleList.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1200:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleAdd", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthRoleAdd == nil {
- m.AuthRoleAdd = &AuthRoleAddRequest{}
- }
- if err := m.AuthRoleAdd.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1201:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleDelete", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthRoleDelete == nil {
- m.AuthRoleDelete = &AuthRoleDeleteRequest{}
- }
- if err := m.AuthRoleDelete.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1202:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleGet", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthRoleGet == nil {
- m.AuthRoleGet = &AuthRoleGetRequest{}
- }
- if err := m.AuthRoleGet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1203:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleGrantPermission", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthRoleGrantPermission == nil {
- m.AuthRoleGrantPermission = &AuthRoleGrantPermissionRequest{}
- }
- if err := m.AuthRoleGrantPermission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1204:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleRevokePermission", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.AuthRoleRevokePermission == nil {
- m.AuthRoleRevokePermission = &AuthRoleRevokePermissionRequest{}
- }
- if err := m.AuthRoleRevokePermission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1300:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterVersionSet", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.ClusterVersionSet == nil {
- m.ClusterVersionSet = &membershippb.ClusterVersionSetRequest{}
- }
- if err := m.ClusterVersionSet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1301:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterMemberAttrSet", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.ClusterMemberAttrSet == nil {
- m.ClusterMemberAttrSet = &membershippb.ClusterMemberAttrSetRequest{}
- }
- if err := m.ClusterMemberAttrSet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 1302:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DowngradeInfoSet", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.DowngradeInfoSet == nil {
- m.DowngradeInfoSet = &membershippb.DowngradeInfoSetRequest{}
- }
- if err := m.DowngradeInfoSet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRaftInternal(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *EmptyResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: EmptyResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: EmptyResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRaftInternal(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *InternalAuthenticateRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: InternalAuthenticateRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: InternalAuthenticateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Password = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field SimpleToken", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRaftInternal
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.SimpleToken = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRaftInternal(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRaftInternal
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func skipRaftInternal(dAtA []byte) (n int, err error) {
- l := len(dAtA)
- iNdEx := 0
- depth := 0
- for iNdEx < l {
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- wireType := int(wire & 0x7)
- switch wireType {
- case 0:
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- iNdEx++
- if dAtA[iNdEx-1] < 0x80 {
- break
- }
- }
- case 1:
- iNdEx += 8
- case 2:
- var length int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowRaftInternal
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- length |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if length < 0 {
- return 0, ErrInvalidLengthRaftInternal
- }
- iNdEx += length
- case 3:
- depth++
- case 4:
- if depth == 0 {
- return 0, ErrUnexpectedEndOfGroupRaftInternal
- }
- depth--
- case 5:
- iNdEx += 4
- default:
- return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
- }
- if iNdEx < 0 {
- return 0, ErrInvalidLengthRaftInternal
- }
- if depth == 0 {
- return iNdEx, nil
- }
- }
- return 0, io.ErrUnexpectedEOF
-}
-
-var (
- ErrInvalidLengthRaftInternal = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowRaftInternal = fmt.Errorf("proto: integer overflow")
- ErrUnexpectedEndOfGroupRaftInternal = fmt.Errorf("proto: unexpected end of group")
-)
diff --git a/etcd-fix/api/etcdserverpb/raft_internal.proto b/etcd-fix/api/etcdserverpb/raft_internal.proto
deleted file mode 100644
index 68926e5..0000000
--- a/etcd-fix/api/etcdserverpb/raft_internal.proto
+++ /dev/null
@@ -1,81 +0,0 @@
-syntax = "proto3";
-package etcdserverpb;
-
-import "gogoproto/gogo.proto";
-import "etcdserver.proto";
-import "rpc.proto";
-import "etcd/api/membershippb/membership.proto";
-
-option (gogoproto.marshaler_all) = true;
-option (gogoproto.sizer_all) = true;
-option (gogoproto.unmarshaler_all) = true;
-option (gogoproto.goproto_getters_all) = false;
-
-message RequestHeader {
- uint64 ID = 1;
- // username is a username that is associated with an auth token of gRPC connection
- string username = 2;
- // auth_revision is a revision number of auth.authStore. It is not related to mvcc
- uint64 auth_revision = 3;
-}
-
-// An InternalRaftRequest is the union of all requests which can be
-// sent via raft.
-message InternalRaftRequest {
- RequestHeader header = 100;
- uint64 ID = 1;
-
- Request v2 = 2;
-
- RangeRequest range = 3;
- PutRequest put = 4;
- DeleteRangeRequest delete_range = 5;
- TxnRequest txn = 6;
- CompactionRequest compaction = 7;
-
- LeaseGrantRequest lease_grant = 8;
- LeaseRevokeRequest lease_revoke = 9;
-
- AlarmRequest alarm = 10;
-
- LeaseCheckpointRequest lease_checkpoint = 11;
-
- AuthEnableRequest auth_enable = 1000;
- AuthDisableRequest auth_disable = 1011;
- AuthStatusRequest auth_status = 1013;
-
- InternalAuthenticateRequest authenticate = 1012;
-
- AuthUserAddRequest auth_user_add = 1100;
- AuthUserDeleteRequest auth_user_delete = 1101;
- AuthUserGetRequest auth_user_get = 1102;
- AuthUserChangePasswordRequest auth_user_change_password = 1103;
- AuthUserGrantRoleRequest auth_user_grant_role = 1104;
- AuthUserRevokeRoleRequest auth_user_revoke_role = 1105;
- AuthUserListRequest auth_user_list = 1106;
- AuthRoleListRequest auth_role_list = 1107;
-
- AuthRoleAddRequest auth_role_add = 1200;
- AuthRoleDeleteRequest auth_role_delete = 1201;
- AuthRoleGetRequest auth_role_get = 1202;
- AuthRoleGrantPermissionRequest auth_role_grant_permission = 1203;
- AuthRoleRevokePermissionRequest auth_role_revoke_permission = 1204;
-
- membershippb.ClusterVersionSetRequest cluster_version_set = 1300;
- membershippb.ClusterMemberAttrSetRequest cluster_member_attr_set = 1301;
- membershippb.DowngradeInfoSetRequest downgrade_info_set = 1302;
-}
-
-message EmptyResponse {
-}
-
-// What is the difference between AuthenticateRequest (defined in rpc.proto) and InternalAuthenticateRequest?
-// InternalAuthenticateRequest has a member that is filled by etcdserver and shouldn't be user-facing.
-// For avoiding misusage the field, we have an internal version of AuthenticateRequest.
-message InternalAuthenticateRequest {
- string name = 1;
- string password = 2;
-
- // simple_token is generated in API layer (etcdserver/v3_server.go)
- string simple_token = 3;
-}
diff --git a/etcd-fix/api/etcdserverpb/raft_internal_stringer.go b/etcd-fix/api/etcdserverpb/raft_internal_stringer.go
deleted file mode 100644
index 31e121e..0000000
--- a/etcd-fix/api/etcdserverpb/raft_internal_stringer.go
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package etcdserverpb
-
-import (
- "fmt"
- "strings"
-
- proto "github.com/golang/protobuf/proto"
-)
-
-// InternalRaftStringer implements custom proto Stringer:
-// redact password, replace value fields with value_size fields.
-type InternalRaftStringer struct {
- Request *InternalRaftRequest
-}
-
-func (as *InternalRaftStringer) String() string {
- switch {
- case as.Request.LeaseGrant != nil:
- return fmt.Sprintf("header:<%s> lease_grant:",
- as.Request.Header.String(),
- as.Request.LeaseGrant.TTL,
- as.Request.LeaseGrant.ID,
- )
- case as.Request.LeaseRevoke != nil:
- return fmt.Sprintf("header:<%s> lease_revoke:",
- as.Request.Header.String(),
- as.Request.LeaseRevoke.ID,
- )
- case as.Request.Authenticate != nil:
- return fmt.Sprintf("header:<%s> authenticate:",
- as.Request.Header.String(),
- as.Request.Authenticate.Name,
- as.Request.Authenticate.SimpleToken,
- )
- case as.Request.AuthUserAdd != nil:
- return fmt.Sprintf("header:<%s> auth_user_add:",
- as.Request.Header.String(),
- as.Request.AuthUserAdd.Name,
- )
- case as.Request.AuthUserChangePassword != nil:
- return fmt.Sprintf("header:<%s> auth_user_change_password:",
- as.Request.Header.String(),
- as.Request.AuthUserChangePassword.Name,
- )
- case as.Request.Put != nil:
- return fmt.Sprintf("header:<%s> put:<%s>",
- as.Request.Header.String(),
- NewLoggablePutRequest(as.Request.Put).String(),
- )
- case as.Request.Txn != nil:
- return fmt.Sprintf("header:<%s> txn:<%s>",
- as.Request.Header.String(),
- NewLoggableTxnRequest(as.Request.Txn).String(),
- )
- default:
- // nothing to redact
- }
- return as.Request.String()
-}
-
-// txnRequestStringer implements a custom proto String to replace value bytes fields with value size
-// fields in any nested txn and put operations.
-type txnRequestStringer struct {
- Request *TxnRequest
-}
-
-func NewLoggableTxnRequest(request *TxnRequest) *txnRequestStringer {
- return &txnRequestStringer{request}
-}
-
-func (as *txnRequestStringer) String() string {
- var compare []string
- for _, c := range as.Request.Compare {
- switch cv := c.TargetUnion.(type) {
- case *Compare_Value:
- compare = append(compare, newLoggableValueCompare(c, cv).String())
- default:
- // nothing to redact
- compare = append(compare, c.String())
- }
- }
- var success []string
- for _, s := range as.Request.Success {
- success = append(success, newLoggableRequestOp(s).String())
- }
- var failure []string
- for _, f := range as.Request.Failure {
- failure = append(failure, newLoggableRequestOp(f).String())
- }
- return fmt.Sprintf("compare:<%s> success:<%s> failure:<%s>",
- strings.Join(compare, " "),
- strings.Join(success, " "),
- strings.Join(failure, " "),
- )
-}
-
-// requestOpStringer implements a custom proto String to replace value bytes fields with value
-// size fields in any nested txn and put operations.
-type requestOpStringer struct {
- Op *RequestOp
-}
-
-func newLoggableRequestOp(op *RequestOp) *requestOpStringer {
- return &requestOpStringer{op}
-}
-
-func (as *requestOpStringer) String() string {
- switch op := as.Op.Request.(type) {
- case *RequestOp_RequestPut:
- return fmt.Sprintf("request_put:<%s>", NewLoggablePutRequest(op.RequestPut).String())
- case *RequestOp_RequestTxn:
- return fmt.Sprintf("request_txn:<%s>", NewLoggableTxnRequest(op.RequestTxn).String())
- default:
- // nothing to redact
- }
- return as.Op.String()
-}
-
-// loggableValueCompare implements a custom proto String for Compare.Value union member types to
-// replace the value bytes field with a value size field.
-// To preserve proto encoding of the key and range_end bytes, a faked out proto type is used here.
-type loggableValueCompare struct {
- Result Compare_CompareResult `protobuf:"varint,1,opt,name=result,proto3,enum=etcdserverpb.Compare_CompareResult"`
- Target Compare_CompareTarget `protobuf:"varint,2,opt,name=target,proto3,enum=etcdserverpb.Compare_CompareTarget"`
- Key []byte `protobuf:"bytes,3,opt,name=key,proto3"`
- ValueSize int64 `protobuf:"varint,7,opt,name=value_size,proto3"`
- RangeEnd []byte `protobuf:"bytes,64,opt,name=range_end,proto3"`
-}
-
-func newLoggableValueCompare(c *Compare, cv *Compare_Value) *loggableValueCompare {
- return &loggableValueCompare{
- c.Result,
- c.Target,
- c.Key,
- int64(len(cv.Value)),
- c.RangeEnd,
- }
-}
-
-func (m *loggableValueCompare) Reset() { *m = loggableValueCompare{} }
-func (m *loggableValueCompare) String() string { return proto.CompactTextString(m) }
-func (*loggableValueCompare) ProtoMessage() {}
-
-// loggablePutRequest implements a custom proto String to replace value bytes field with a value
-// size field.
-// To preserve proto encoding of the key bytes, a faked out proto type is used here.
-type loggablePutRequest struct {
- Key []byte `protobuf:"bytes,1,opt,name=key,proto3"`
- ValueSize int64 `protobuf:"varint,2,opt,name=value_size,proto3"`
- Lease int64 `protobuf:"varint,3,opt,name=lease,proto3"`
- PrevKv bool `protobuf:"varint,4,opt,name=prev_kv,proto3"`
- IgnoreValue bool `protobuf:"varint,5,opt,name=ignore_value,proto3"`
- IgnoreLease bool `protobuf:"varint,6,opt,name=ignore_lease,proto3"`
-}
-
-func NewLoggablePutRequest(request *PutRequest) *loggablePutRequest {
- return &loggablePutRequest{
- request.Key,
- int64(len(request.Value)),
- request.Lease,
- request.PrevKv,
- request.IgnoreValue,
- request.IgnoreLease,
- }
-}
-
-func (m *loggablePutRequest) Reset() { *m = loggablePutRequest{} }
-func (m *loggablePutRequest) String() string { return proto.CompactTextString(m) }
-func (*loggablePutRequest) ProtoMessage() {}
diff --git a/etcd-fix/api/etcdserverpb/raft_internal_stringer_test.go b/etcd-fix/api/etcdserverpb/raft_internal_stringer_test.go
deleted file mode 100644
index 35be878..0000000
--- a/etcd-fix/api/etcdserverpb/raft_internal_stringer_test.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2020 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package etcdserverpb_test
-
-import (
- "testing"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-)
-
-// TestInvalidGoYypeIntPanic tests conditions that caused
-// panic: invalid Go type int for field k8s_io.kubernetes.vendor.go_etcd_io.etcd.etcdserver.etcdserverpb.loggablePutRequest.value_size
-// See https://github.com/kubernetes/kubernetes/issues/91937 for more details
-func TestInvalidGoTypeIntPanic(t *testing.T) {
- result := pb.NewLoggablePutRequest(&pb.PutRequest{}).String()
- if result != "" {
- t.Errorf("Got result: %s, expected empty string", result)
- }
-}
diff --git a/etcd-fix/api/etcdserverpb/rpc.pb.go b/etcd-fix/api/etcdserverpb/rpc.pb.go
deleted file mode 100644
index f094204..0000000
--- a/etcd-fix/api/etcdserverpb/rpc.pb.go
+++ /dev/null
@@ -1,26143 +0,0 @@
-// Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: rpc.proto
-
-package etcdserverpb
-
-import (
- context "context"
- fmt "fmt"
- io "io"
- math "math"
- math_bits "math/bits"
-
- _ "github.com/gogo/protobuf/gogoproto"
- proto "github.com/golang/protobuf/proto"
- authpb "go.etcd.io/etcd/api/v3/authpb"
- mvccpb "go.etcd.io/etcd/api/v3/mvccpb"
- _ "google.golang.org/genproto/googleapis/api/annotations"
- grpc "google.golang.org/grpc"
- codes "google.golang.org/grpc/codes"
- status "google.golang.org/grpc/status"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type AlarmType int32
-
-const (
- AlarmType_NONE AlarmType = 0
- AlarmType_NOSPACE AlarmType = 1
- AlarmType_CORRUPT AlarmType = 2
-)
-
-var AlarmType_name = map[int32]string{
- 0: "NONE",
- 1: "NOSPACE",
- 2: "CORRUPT",
-}
-
-var AlarmType_value = map[string]int32{
- "NONE": 0,
- "NOSPACE": 1,
- "CORRUPT": 2,
-}
-
-func (x AlarmType) String() string {
- return proto.EnumName(AlarmType_name, int32(x))
-}
-
-func (AlarmType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{0}
-}
-
-type RangeRequest_SortOrder int32
-
-const (
- RangeRequest_NONE RangeRequest_SortOrder = 0
- RangeRequest_ASCEND RangeRequest_SortOrder = 1
- RangeRequest_DESCEND RangeRequest_SortOrder = 2
-)
-
-var RangeRequest_SortOrder_name = map[int32]string{
- 0: "NONE",
- 1: "ASCEND",
- 2: "DESCEND",
-}
-
-var RangeRequest_SortOrder_value = map[string]int32{
- "NONE": 0,
- "ASCEND": 1,
- "DESCEND": 2,
-}
-
-func (x RangeRequest_SortOrder) String() string {
- return proto.EnumName(RangeRequest_SortOrder_name, int32(x))
-}
-
-func (RangeRequest_SortOrder) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{1, 0}
-}
-
-type RangeRequest_SortTarget int32
-
-const (
- RangeRequest_KEY RangeRequest_SortTarget = 0
- RangeRequest_VERSION RangeRequest_SortTarget = 1
- RangeRequest_CREATE RangeRequest_SortTarget = 2
- RangeRequest_MOD RangeRequest_SortTarget = 3
- RangeRequest_VALUE RangeRequest_SortTarget = 4
-)
-
-var RangeRequest_SortTarget_name = map[int32]string{
- 0: "KEY",
- 1: "VERSION",
- 2: "CREATE",
- 3: "MOD",
- 4: "VALUE",
-}
-
-var RangeRequest_SortTarget_value = map[string]int32{
- "KEY": 0,
- "VERSION": 1,
- "CREATE": 2,
- "MOD": 3,
- "VALUE": 4,
-}
-
-func (x RangeRequest_SortTarget) String() string {
- return proto.EnumName(RangeRequest_SortTarget_name, int32(x))
-}
-
-func (RangeRequest_SortTarget) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{1, 1}
-}
-
-type Compare_CompareResult int32
-
-const (
- Compare_EQUAL Compare_CompareResult = 0
- Compare_GREATER Compare_CompareResult = 1
- Compare_LESS Compare_CompareResult = 2
- Compare_NOT_EQUAL Compare_CompareResult = 3
-)
-
-var Compare_CompareResult_name = map[int32]string{
- 0: "EQUAL",
- 1: "GREATER",
- 2: "LESS",
- 3: "NOT_EQUAL",
-}
-
-var Compare_CompareResult_value = map[string]int32{
- "EQUAL": 0,
- "GREATER": 1,
- "LESS": 2,
- "NOT_EQUAL": 3,
-}
-
-func (x Compare_CompareResult) String() string {
- return proto.EnumName(Compare_CompareResult_name, int32(x))
-}
-
-func (Compare_CompareResult) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{9, 0}
-}
-
-type Compare_CompareTarget int32
-
-const (
- Compare_VERSION Compare_CompareTarget = 0
- Compare_CREATE Compare_CompareTarget = 1
- Compare_MOD Compare_CompareTarget = 2
- Compare_VALUE Compare_CompareTarget = 3
- Compare_LEASE Compare_CompareTarget = 4
-)
-
-var Compare_CompareTarget_name = map[int32]string{
- 0: "VERSION",
- 1: "CREATE",
- 2: "MOD",
- 3: "VALUE",
- 4: "LEASE",
-}
-
-var Compare_CompareTarget_value = map[string]int32{
- "VERSION": 0,
- "CREATE": 1,
- "MOD": 2,
- "VALUE": 3,
- "LEASE": 4,
-}
-
-func (x Compare_CompareTarget) String() string {
- return proto.EnumName(Compare_CompareTarget_name, int32(x))
-}
-
-func (Compare_CompareTarget) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{9, 1}
-}
-
-type WatchCreateRequest_FilterType int32
-
-const (
- // filter out put event.
- WatchCreateRequest_NOPUT WatchCreateRequest_FilterType = 0
- // filter out delete event.
- WatchCreateRequest_NODELETE WatchCreateRequest_FilterType = 1
-)
-
-var WatchCreateRequest_FilterType_name = map[int32]string{
- 0: "NOPUT",
- 1: "NODELETE",
-}
-
-var WatchCreateRequest_FilterType_value = map[string]int32{
- "NOPUT": 0,
- "NODELETE": 1,
-}
-
-func (x WatchCreateRequest_FilterType) String() string {
- return proto.EnumName(WatchCreateRequest_FilterType_name, int32(x))
-}
-
-func (WatchCreateRequest_FilterType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{21, 0}
-}
-
-type AlarmRequest_AlarmAction int32
-
-const (
- AlarmRequest_GET AlarmRequest_AlarmAction = 0
- AlarmRequest_ACTIVATE AlarmRequest_AlarmAction = 1
- AlarmRequest_DEACTIVATE AlarmRequest_AlarmAction = 2
-)
-
-var AlarmRequest_AlarmAction_name = map[int32]string{
- 0: "GET",
- 1: "ACTIVATE",
- 2: "DEACTIVATE",
-}
-
-var AlarmRequest_AlarmAction_value = map[string]int32{
- "GET": 0,
- "ACTIVATE": 1,
- "DEACTIVATE": 2,
-}
-
-func (x AlarmRequest_AlarmAction) String() string {
- return proto.EnumName(AlarmRequest_AlarmAction_name, int32(x))
-}
-
-func (AlarmRequest_AlarmAction) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{54, 0}
-}
-
-type DowngradeRequest_DowngradeAction int32
-
-const (
- DowngradeRequest_VALIDATE DowngradeRequest_DowngradeAction = 0
- DowngradeRequest_ENABLE DowngradeRequest_DowngradeAction = 1
- DowngradeRequest_CANCEL DowngradeRequest_DowngradeAction = 2
-)
-
-var DowngradeRequest_DowngradeAction_name = map[int32]string{
- 0: "VALIDATE",
- 1: "ENABLE",
- 2: "CANCEL",
-}
-
-var DowngradeRequest_DowngradeAction_value = map[string]int32{
- "VALIDATE": 0,
- "ENABLE": 1,
- "CANCEL": 2,
-}
-
-func (x DowngradeRequest_DowngradeAction) String() string {
- return proto.EnumName(DowngradeRequest_DowngradeAction_name, int32(x))
-}
-
-func (DowngradeRequest_DowngradeAction) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{57, 0}
-}
-
-type ResponseHeader struct {
- // cluster_id is the ID of the cluster which sent the response.
- ClusterId uint64 `protobuf:"varint,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
- // member_id is the ID of the member which sent the response.
- MemberId uint64 `protobuf:"varint,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"`
- // revision is the key-value store revision when the request was applied.
- // For watch progress responses, the header.revision indicates progress. All future events
- // recieved in this stream are guaranteed to have a higher revision number than the
- // header.revision number.
- Revision int64 `protobuf:"varint,3,opt,name=revision,proto3" json:"revision,omitempty"`
- // raft_term is the raft term when the request was applied.
- RaftTerm uint64 `protobuf:"varint,4,opt,name=raft_term,json=raftTerm,proto3" json:"raft_term,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ResponseHeader) Reset() { *m = ResponseHeader{} }
-func (m *ResponseHeader) String() string { return proto.CompactTextString(m) }
-func (*ResponseHeader) ProtoMessage() {}
-func (*ResponseHeader) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{0}
-}
-func (m *ResponseHeader) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *ResponseHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_ResponseHeader.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *ResponseHeader) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ResponseHeader.Merge(m, src)
-}
-func (m *ResponseHeader) XXX_Size() int {
- return m.Size()
-}
-func (m *ResponseHeader) XXX_DiscardUnknown() {
- xxx_messageInfo_ResponseHeader.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ResponseHeader proto.InternalMessageInfo
-
-func (m *ResponseHeader) GetClusterId() uint64 {
- if m != nil {
- return m.ClusterId
- }
- return 0
-}
-
-func (m *ResponseHeader) GetMemberId() uint64 {
- if m != nil {
- return m.MemberId
- }
- return 0
-}
-
-func (m *ResponseHeader) GetRevision() int64 {
- if m != nil {
- return m.Revision
- }
- return 0
-}
-
-func (m *ResponseHeader) GetRaftTerm() uint64 {
- if m != nil {
- return m.RaftTerm
- }
- return 0
-}
-
-type RangeRequest struct {
- // key is the first key for the range. If range_end is not given, the request only looks up key.
- Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
- // range_end is the upper bound on the requested range [key, range_end).
- // If range_end is '\0', the range is all keys >= key.
- // If range_end is key plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"),
- // then the range request gets all keys prefixed with key.
- // If both key and range_end are '\0', then the range request returns all keys.
- RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"`
- // limit is a limit on the number of keys returned for the request. When limit is set to 0,
- // it is treated as no limit.
- Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"`
- // revision is the point-in-time of the key-value store to use for the range.
- // If revision is less or equal to zero, the range is over the newest key-value store.
- // If the revision has been compacted, ErrCompacted is returned as a response.
- Revision int64 `protobuf:"varint,4,opt,name=revision,proto3" json:"revision,omitempty"`
- // sort_order is the order for returned sorted results.
- SortOrder RangeRequest_SortOrder `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3,enum=etcdserverpb.RangeRequest_SortOrder" json:"sort_order,omitempty"`
- // sort_target is the key-value field to use for sorting.
- SortTarget RangeRequest_SortTarget `protobuf:"varint,6,opt,name=sort_target,json=sortTarget,proto3,enum=etcdserverpb.RangeRequest_SortTarget" json:"sort_target,omitempty"`
- // serializable sets the range request to use serializable member-local reads.
- // Range requests are linearizable by default; linearizable requests have higher
- // latency and lower throughput than serializable requests but reflect the current
- // consensus of the cluster. For better performance, in exchange for possible stale reads,
- // a serializable range request is served locally without needing to reach consensus
- // with other nodes in the cluster.
- Serializable bool `protobuf:"varint,7,opt,name=serializable,proto3" json:"serializable,omitempty"`
- // keys_only when set returns only the keys and not the values.
- KeysOnly bool `protobuf:"varint,8,opt,name=keys_only,json=keysOnly,proto3" json:"keys_only,omitempty"`
- // count_only when set returns only the count of the keys in the range.
- CountOnly bool `protobuf:"varint,9,opt,name=count_only,json=countOnly,proto3" json:"count_only,omitempty"`
- // min_mod_revision is the lower bound for returned key mod revisions; all keys with
- // lesser mod revisions will be filtered away.
- MinModRevision int64 `protobuf:"varint,10,opt,name=min_mod_revision,json=minModRevision,proto3" json:"min_mod_revision,omitempty"`
- // max_mod_revision is the upper bound for returned key mod revisions; all keys with
- // greater mod revisions will be filtered away.
- MaxModRevision int64 `protobuf:"varint,11,opt,name=max_mod_revision,json=maxModRevision,proto3" json:"max_mod_revision,omitempty"`
- // min_create_revision is the lower bound for returned key create revisions; all keys with
- // lesser create revisions will be filtered away.
- MinCreateRevision int64 `protobuf:"varint,12,opt,name=min_create_revision,json=minCreateRevision,proto3" json:"min_create_revision,omitempty"`
- // max_create_revision is the upper bound for returned key create revisions; all keys with
- // greater create revisions will be filtered away.
- MaxCreateRevision int64 `protobuf:"varint,13,opt,name=max_create_revision,json=maxCreateRevision,proto3" json:"max_create_revision,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RangeRequest) Reset() { *m = RangeRequest{} }
-func (m *RangeRequest) String() string { return proto.CompactTextString(m) }
-func (*RangeRequest) ProtoMessage() {}
-func (*RangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{1}
-}
-func (m *RangeRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *RangeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_RangeRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *RangeRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RangeRequest.Merge(m, src)
-}
-func (m *RangeRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *RangeRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_RangeRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RangeRequest proto.InternalMessageInfo
-
-func (m *RangeRequest) GetKey() []byte {
- if m != nil {
- return m.Key
- }
- return nil
-}
-
-func (m *RangeRequest) GetRangeEnd() []byte {
- if m != nil {
- return m.RangeEnd
- }
- return nil
-}
-
-func (m *RangeRequest) GetLimit() int64 {
- if m != nil {
- return m.Limit
- }
- return 0
-}
-
-func (m *RangeRequest) GetRevision() int64 {
- if m != nil {
- return m.Revision
- }
- return 0
-}
-
-func (m *RangeRequest) GetSortOrder() RangeRequest_SortOrder {
- if m != nil {
- return m.SortOrder
- }
- return RangeRequest_NONE
-}
-
-func (m *RangeRequest) GetSortTarget() RangeRequest_SortTarget {
- if m != nil {
- return m.SortTarget
- }
- return RangeRequest_KEY
-}
-
-func (m *RangeRequest) GetSerializable() bool {
- if m != nil {
- return m.Serializable
- }
- return false
-}
-
-func (m *RangeRequest) GetKeysOnly() bool {
- if m != nil {
- return m.KeysOnly
- }
- return false
-}
-
-func (m *RangeRequest) GetCountOnly() bool {
- if m != nil {
- return m.CountOnly
- }
- return false
-}
-
-func (m *RangeRequest) GetMinModRevision() int64 {
- if m != nil {
- return m.MinModRevision
- }
- return 0
-}
-
-func (m *RangeRequest) GetMaxModRevision() int64 {
- if m != nil {
- return m.MaxModRevision
- }
- return 0
-}
-
-func (m *RangeRequest) GetMinCreateRevision() int64 {
- if m != nil {
- return m.MinCreateRevision
- }
- return 0
-}
-
-func (m *RangeRequest) GetMaxCreateRevision() int64 {
- if m != nil {
- return m.MaxCreateRevision
- }
- return 0
-}
-
-type RangeResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // kvs is the list of key-value pairs matched by the range request.
- // kvs is empty when count is requested.
- Kvs []*mvccpb.KeyValue `protobuf:"bytes,2,rep,name=kvs,proto3" json:"kvs,omitempty"`
- // more indicates if there are more keys to return in the requested range.
- More bool `protobuf:"varint,3,opt,name=more,proto3" json:"more,omitempty"`
- // count is set to the number of keys within the range when requested.
- Count int64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RangeResponse) Reset() { *m = RangeResponse{} }
-func (m *RangeResponse) String() string { return proto.CompactTextString(m) }
-func (*RangeResponse) ProtoMessage() {}
-func (*RangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{2}
-}
-func (m *RangeResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *RangeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_RangeResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *RangeResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RangeResponse.Merge(m, src)
-}
-func (m *RangeResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *RangeResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_RangeResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RangeResponse proto.InternalMessageInfo
-
-func (m *RangeResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *RangeResponse) GetKvs() []*mvccpb.KeyValue {
- if m != nil {
- return m.Kvs
- }
- return nil
-}
-
-func (m *RangeResponse) GetMore() bool {
- if m != nil {
- return m.More
- }
- return false
-}
-
-func (m *RangeResponse) GetCount() int64 {
- if m != nil {
- return m.Count
- }
- return 0
-}
-
-type PutRequest struct {
- // key is the key, in bytes, to put into the key-value store.
- Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
- // value is the value, in bytes, to associate with the key in the key-value store.
- Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
- // lease is the lease ID to associate with the key in the key-value store. A lease
- // value of 0 indicates no lease.
- Lease int64 `protobuf:"varint,3,opt,name=lease,proto3" json:"lease,omitempty"`
- // If prev_kv is set, etcd gets the previous key-value pair before changing it.
- // The previous key-value pair will be returned in the put response.
- PrevKv bool `protobuf:"varint,4,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"`
- // If ignore_value is set, etcd updates the key using its current value.
- // Returns an error if the key does not exist.
- IgnoreValue bool `protobuf:"varint,5,opt,name=ignore_value,json=ignoreValue,proto3" json:"ignore_value,omitempty"`
- // If ignore_lease is set, etcd updates the key using its current lease.
- // Returns an error if the key does not exist.
- IgnoreLease bool `protobuf:"varint,6,opt,name=ignore_lease,json=ignoreLease,proto3" json:"ignore_lease,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *PutRequest) Reset() { *m = PutRequest{} }
-func (m *PutRequest) String() string { return proto.CompactTextString(m) }
-func (*PutRequest) ProtoMessage() {}
-func (*PutRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{3}
-}
-func (m *PutRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *PutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_PutRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *PutRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_PutRequest.Merge(m, src)
-}
-func (m *PutRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *PutRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_PutRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PutRequest proto.InternalMessageInfo
-
-func (m *PutRequest) GetKey() []byte {
- if m != nil {
- return m.Key
- }
- return nil
-}
-
-func (m *PutRequest) GetValue() []byte {
- if m != nil {
- return m.Value
- }
- return nil
-}
-
-func (m *PutRequest) GetLease() int64 {
- if m != nil {
- return m.Lease
- }
- return 0
-}
-
-func (m *PutRequest) GetPrevKv() bool {
- if m != nil {
- return m.PrevKv
- }
- return false
-}
-
-func (m *PutRequest) GetIgnoreValue() bool {
- if m != nil {
- return m.IgnoreValue
- }
- return false
-}
-
-func (m *PutRequest) GetIgnoreLease() bool {
- if m != nil {
- return m.IgnoreLease
- }
- return false
-}
-
-type PutResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // if prev_kv is set in the request, the previous key-value pair will be returned.
- PrevKv *mvccpb.KeyValue `protobuf:"bytes,2,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *PutResponse) Reset() { *m = PutResponse{} }
-func (m *PutResponse) String() string { return proto.CompactTextString(m) }
-func (*PutResponse) ProtoMessage() {}
-func (*PutResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{4}
-}
-func (m *PutResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *PutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_PutResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *PutResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_PutResponse.Merge(m, src)
-}
-func (m *PutResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *PutResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_PutResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PutResponse proto.InternalMessageInfo
-
-func (m *PutResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *PutResponse) GetPrevKv() *mvccpb.KeyValue {
- if m != nil {
- return m.PrevKv
- }
- return nil
-}
-
-type DeleteRangeRequest struct {
- // key is the first key to delete in the range.
- Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
- // range_end is the key following the last key to delete for the range [key, range_end).
- // If range_end is not given, the range is defined to contain only the key argument.
- // If range_end is one bit larger than the given key, then the range is all the keys
- // with the prefix (the given key).
- // If range_end is '\0', the range is all keys greater than or equal to the key argument.
- RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"`
- // If prev_kv is set, etcd gets the previous key-value pairs before deleting it.
- // The previous key-value pairs will be returned in the delete response.
- PrevKv bool `protobuf:"varint,3,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} }
-func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) }
-func (*DeleteRangeRequest) ProtoMessage() {}
-func (*DeleteRangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{5}
-}
-func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *DeleteRangeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_DeleteRangeRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *DeleteRangeRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DeleteRangeRequest.Merge(m, src)
-}
-func (m *DeleteRangeRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *DeleteRangeRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_DeleteRangeRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DeleteRangeRequest proto.InternalMessageInfo
-
-func (m *DeleteRangeRequest) GetKey() []byte {
- if m != nil {
- return m.Key
- }
- return nil
-}
-
-func (m *DeleteRangeRequest) GetRangeEnd() []byte {
- if m != nil {
- return m.RangeEnd
- }
- return nil
-}
-
-func (m *DeleteRangeRequest) GetPrevKv() bool {
- if m != nil {
- return m.PrevKv
- }
- return false
-}
-
-type DeleteRangeResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // deleted is the number of keys deleted by the delete range request.
- Deleted int64 `protobuf:"varint,2,opt,name=deleted,proto3" json:"deleted,omitempty"`
- // if prev_kv is set in the request, the previous key-value pairs will be returned.
- PrevKvs []*mvccpb.KeyValue `protobuf:"bytes,3,rep,name=prev_kvs,json=prevKvs,proto3" json:"prev_kvs,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} }
-func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) }
-func (*DeleteRangeResponse) ProtoMessage() {}
-func (*DeleteRangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{6}
-}
-func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *DeleteRangeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_DeleteRangeResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *DeleteRangeResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DeleteRangeResponse.Merge(m, src)
-}
-func (m *DeleteRangeResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *DeleteRangeResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_DeleteRangeResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DeleteRangeResponse proto.InternalMessageInfo
-
-func (m *DeleteRangeResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *DeleteRangeResponse) GetDeleted() int64 {
- if m != nil {
- return m.Deleted
- }
- return 0
-}
-
-func (m *DeleteRangeResponse) GetPrevKvs() []*mvccpb.KeyValue {
- if m != nil {
- return m.PrevKvs
- }
- return nil
-}
-
-type RequestOp struct {
- // request is a union of request types accepted by a transaction.
- //
- // Types that are valid to be assigned to Request:
- // *RequestOp_RequestRange
- // *RequestOp_RequestPut
- // *RequestOp_RequestDeleteRange
- // *RequestOp_RequestTxn
- Request isRequestOp_Request `protobuf_oneof:"request"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RequestOp) Reset() { *m = RequestOp{} }
-func (m *RequestOp) String() string { return proto.CompactTextString(m) }
-func (*RequestOp) ProtoMessage() {}
-func (*RequestOp) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{7}
-}
-func (m *RequestOp) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *RequestOp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_RequestOp.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *RequestOp) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RequestOp.Merge(m, src)
-}
-func (m *RequestOp) XXX_Size() int {
- return m.Size()
-}
-func (m *RequestOp) XXX_DiscardUnknown() {
- xxx_messageInfo_RequestOp.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RequestOp proto.InternalMessageInfo
-
-type isRequestOp_Request interface {
- isRequestOp_Request()
- MarshalTo([]byte) (int, error)
- Size() int
-}
-
-type RequestOp_RequestRange struct {
- RequestRange *RangeRequest `protobuf:"bytes,1,opt,name=request_range,json=requestRange,proto3,oneof" json:"request_range,omitempty"`
-}
-type RequestOp_RequestPut struct {
- RequestPut *PutRequest `protobuf:"bytes,2,opt,name=request_put,json=requestPut,proto3,oneof" json:"request_put,omitempty"`
-}
-type RequestOp_RequestDeleteRange struct {
- RequestDeleteRange *DeleteRangeRequest `protobuf:"bytes,3,opt,name=request_delete_range,json=requestDeleteRange,proto3,oneof" json:"request_delete_range,omitempty"`
-}
-type RequestOp_RequestTxn struct {
- RequestTxn *TxnRequest `protobuf:"bytes,4,opt,name=request_txn,json=requestTxn,proto3,oneof" json:"request_txn,omitempty"`
-}
-
-func (*RequestOp_RequestRange) isRequestOp_Request() {}
-func (*RequestOp_RequestPut) isRequestOp_Request() {}
-func (*RequestOp_RequestDeleteRange) isRequestOp_Request() {}
-func (*RequestOp_RequestTxn) isRequestOp_Request() {}
-
-func (m *RequestOp) GetRequest() isRequestOp_Request {
- if m != nil {
- return m.Request
- }
- return nil
-}
-
-func (m *RequestOp) GetRequestRange() *RangeRequest {
- if x, ok := m.GetRequest().(*RequestOp_RequestRange); ok {
- return x.RequestRange
- }
- return nil
-}
-
-func (m *RequestOp) GetRequestPut() *PutRequest {
- if x, ok := m.GetRequest().(*RequestOp_RequestPut); ok {
- return x.RequestPut
- }
- return nil
-}
-
-func (m *RequestOp) GetRequestDeleteRange() *DeleteRangeRequest {
- if x, ok := m.GetRequest().(*RequestOp_RequestDeleteRange); ok {
- return x.RequestDeleteRange
- }
- return nil
-}
-
-func (m *RequestOp) GetRequestTxn() *TxnRequest {
- if x, ok := m.GetRequest().(*RequestOp_RequestTxn); ok {
- return x.RequestTxn
- }
- return nil
-}
-
-// XXX_OneofWrappers is for the internal use of the proto package.
-func (*RequestOp) XXX_OneofWrappers() []interface{} {
- return []interface{}{
- (*RequestOp_RequestRange)(nil),
- (*RequestOp_RequestPut)(nil),
- (*RequestOp_RequestDeleteRange)(nil),
- (*RequestOp_RequestTxn)(nil),
- }
-}
-
-type ResponseOp struct {
- // response is a union of response types returned by a transaction.
- //
- // Types that are valid to be assigned to Response:
- // *ResponseOp_ResponseRange
- // *ResponseOp_ResponsePut
- // *ResponseOp_ResponseDeleteRange
- // *ResponseOp_ResponseTxn
- Response isResponseOp_Response `protobuf_oneof:"response"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ResponseOp) Reset() { *m = ResponseOp{} }
-func (m *ResponseOp) String() string { return proto.CompactTextString(m) }
-func (*ResponseOp) ProtoMessage() {}
-func (*ResponseOp) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{8}
-}
-func (m *ResponseOp) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *ResponseOp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_ResponseOp.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *ResponseOp) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ResponseOp.Merge(m, src)
-}
-func (m *ResponseOp) XXX_Size() int {
- return m.Size()
-}
-func (m *ResponseOp) XXX_DiscardUnknown() {
- xxx_messageInfo_ResponseOp.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ResponseOp proto.InternalMessageInfo
-
-type isResponseOp_Response interface {
- isResponseOp_Response()
- MarshalTo([]byte) (int, error)
- Size() int
-}
-
-type ResponseOp_ResponseRange struct {
- ResponseRange *RangeResponse `protobuf:"bytes,1,opt,name=response_range,json=responseRange,proto3,oneof" json:"response_range,omitempty"`
-}
-type ResponseOp_ResponsePut struct {
- ResponsePut *PutResponse `protobuf:"bytes,2,opt,name=response_put,json=responsePut,proto3,oneof" json:"response_put,omitempty"`
-}
-type ResponseOp_ResponseDeleteRange struct {
- ResponseDeleteRange *DeleteRangeResponse `protobuf:"bytes,3,opt,name=response_delete_range,json=responseDeleteRange,proto3,oneof" json:"response_delete_range,omitempty"`
-}
-type ResponseOp_ResponseTxn struct {
- ResponseTxn *TxnResponse `protobuf:"bytes,4,opt,name=response_txn,json=responseTxn,proto3,oneof" json:"response_txn,omitempty"`
-}
-
-func (*ResponseOp_ResponseRange) isResponseOp_Response() {}
-func (*ResponseOp_ResponsePut) isResponseOp_Response() {}
-func (*ResponseOp_ResponseDeleteRange) isResponseOp_Response() {}
-func (*ResponseOp_ResponseTxn) isResponseOp_Response() {}
-
-func (m *ResponseOp) GetResponse() isResponseOp_Response {
- if m != nil {
- return m.Response
- }
- return nil
-}
-
-func (m *ResponseOp) GetResponseRange() *RangeResponse {
- if x, ok := m.GetResponse().(*ResponseOp_ResponseRange); ok {
- return x.ResponseRange
- }
- return nil
-}
-
-func (m *ResponseOp) GetResponsePut() *PutResponse {
- if x, ok := m.GetResponse().(*ResponseOp_ResponsePut); ok {
- return x.ResponsePut
- }
- return nil
-}
-
-func (m *ResponseOp) GetResponseDeleteRange() *DeleteRangeResponse {
- if x, ok := m.GetResponse().(*ResponseOp_ResponseDeleteRange); ok {
- return x.ResponseDeleteRange
- }
- return nil
-}
-
-func (m *ResponseOp) GetResponseTxn() *TxnResponse {
- if x, ok := m.GetResponse().(*ResponseOp_ResponseTxn); ok {
- return x.ResponseTxn
- }
- return nil
-}
-
-// XXX_OneofWrappers is for the internal use of the proto package.
-func (*ResponseOp) XXX_OneofWrappers() []interface{} {
- return []interface{}{
- (*ResponseOp_ResponseRange)(nil),
- (*ResponseOp_ResponsePut)(nil),
- (*ResponseOp_ResponseDeleteRange)(nil),
- (*ResponseOp_ResponseTxn)(nil),
- }
-}
-
-type Compare struct {
- // result is logical comparison operation for this comparison.
- Result Compare_CompareResult `protobuf:"varint,1,opt,name=result,proto3,enum=etcdserverpb.Compare_CompareResult" json:"result,omitempty"`
- // target is the key-value field to inspect for the comparison.
- Target Compare_CompareTarget `protobuf:"varint,2,opt,name=target,proto3,enum=etcdserverpb.Compare_CompareTarget" json:"target,omitempty"`
- // key is the subject key for the comparison operation.
- Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // Types that are valid to be assigned to TargetUnion:
- // *Compare_Version
- // *Compare_CreateRevision
- // *Compare_ModRevision
- // *Compare_Value
- // *Compare_Lease
- TargetUnion isCompare_TargetUnion `protobuf_oneof:"target_union"`
- // range_end compares the given target to all keys in the range [key, range_end).
- // See RangeRequest for more details on key ranges.
- RangeEnd []byte `protobuf:"bytes,64,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Compare) Reset() { *m = Compare{} }
-func (m *Compare) String() string { return proto.CompactTextString(m) }
-func (*Compare) ProtoMessage() {}
-func (*Compare) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{9}
-}
-func (m *Compare) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Compare) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Compare.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Compare) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Compare.Merge(m, src)
-}
-func (m *Compare) XXX_Size() int {
- return m.Size()
-}
-func (m *Compare) XXX_DiscardUnknown() {
- xxx_messageInfo_Compare.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Compare proto.InternalMessageInfo
-
-type isCompare_TargetUnion interface {
- isCompare_TargetUnion()
- MarshalTo([]byte) (int, error)
- Size() int
-}
-
-type Compare_Version struct {
- Version int64 `protobuf:"varint,4,opt,name=version,proto3,oneof" json:"version,omitempty"`
-}
-type Compare_CreateRevision struct {
- CreateRevision int64 `protobuf:"varint,5,opt,name=create_revision,json=createRevision,proto3,oneof" json:"create_revision,omitempty"`
-}
-type Compare_ModRevision struct {
- ModRevision int64 `protobuf:"varint,6,opt,name=mod_revision,json=modRevision,proto3,oneof" json:"mod_revision,omitempty"`
-}
-type Compare_Value struct {
- Value []byte `protobuf:"bytes,7,opt,name=value,proto3,oneof" json:"value,omitempty"`
-}
-type Compare_Lease struct {
- Lease int64 `protobuf:"varint,8,opt,name=lease,proto3,oneof" json:"lease,omitempty"`
-}
-
-func (*Compare_Version) isCompare_TargetUnion() {}
-func (*Compare_CreateRevision) isCompare_TargetUnion() {}
-func (*Compare_ModRevision) isCompare_TargetUnion() {}
-func (*Compare_Value) isCompare_TargetUnion() {}
-func (*Compare_Lease) isCompare_TargetUnion() {}
-
-func (m *Compare) GetTargetUnion() isCompare_TargetUnion {
- if m != nil {
- return m.TargetUnion
- }
- return nil
-}
-
-func (m *Compare) GetResult() Compare_CompareResult {
- if m != nil {
- return m.Result
- }
- return Compare_EQUAL
-}
-
-func (m *Compare) GetTarget() Compare_CompareTarget {
- if m != nil {
- return m.Target
- }
- return Compare_VERSION
-}
-
-func (m *Compare) GetKey() []byte {
- if m != nil {
- return m.Key
- }
- return nil
-}
-
-func (m *Compare) GetVersion() int64 {
- if x, ok := m.GetTargetUnion().(*Compare_Version); ok {
- return x.Version
- }
- return 0
-}
-
-func (m *Compare) GetCreateRevision() int64 {
- if x, ok := m.GetTargetUnion().(*Compare_CreateRevision); ok {
- return x.CreateRevision
- }
- return 0
-}
-
-func (m *Compare) GetModRevision() int64 {
- if x, ok := m.GetTargetUnion().(*Compare_ModRevision); ok {
- return x.ModRevision
- }
- return 0
-}
-
-func (m *Compare) GetValue() []byte {
- if x, ok := m.GetTargetUnion().(*Compare_Value); ok {
- return x.Value
- }
- return nil
-}
-
-func (m *Compare) GetLease() int64 {
- if x, ok := m.GetTargetUnion().(*Compare_Lease); ok {
- return x.Lease
- }
- return 0
-}
-
-func (m *Compare) GetRangeEnd() []byte {
- if m != nil {
- return m.RangeEnd
- }
- return nil
-}
-
-// XXX_OneofWrappers is for the internal use of the proto package.
-func (*Compare) XXX_OneofWrappers() []interface{} {
- return []interface{}{
- (*Compare_Version)(nil),
- (*Compare_CreateRevision)(nil),
- (*Compare_ModRevision)(nil),
- (*Compare_Value)(nil),
- (*Compare_Lease)(nil),
- }
-}
-
-// From google paxosdb paper:
-// Our implementation hinges around a powerful primitive which we call MultiOp. All other database
-// operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically
-// and consists of three components:
-// 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check
-// for the absence or presence of a value, or compare with a given value. Two different tests in the guard
-// may apply to the same or different entries in the database. All tests in the guard are applied and
-// MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise
-// it executes f op (see item 3 below).
-// 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or
-// lookup operation, and applies to a single database entry. Two different operations in the list may apply
-// to the same or different entries in the database. These operations are executed
-// if guard evaluates to
-// true.
-// 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false.
-type TxnRequest struct {
- // compare is a list of predicates representing a conjunction of terms.
- // If the comparisons succeed, then the success requests will be processed in order,
- // and the response will contain their respective responses in order.
- // If the comparisons fail, then the failure requests will be processed in order,
- // and the response will contain their respective responses in order.
- Compare []*Compare `protobuf:"bytes,1,rep,name=compare,proto3" json:"compare,omitempty"`
- // success is a list of requests which will be applied when compare evaluates to true.
- Success []*RequestOp `protobuf:"bytes,2,rep,name=success,proto3" json:"success,omitempty"`
- // failure is a list of requests which will be applied when compare evaluates to false.
- Failure []*RequestOp `protobuf:"bytes,3,rep,name=failure,proto3" json:"failure,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *TxnRequest) Reset() { *m = TxnRequest{} }
-func (m *TxnRequest) String() string { return proto.CompactTextString(m) }
-func (*TxnRequest) ProtoMessage() {}
-func (*TxnRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{10}
-}
-func (m *TxnRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *TxnRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_TxnRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *TxnRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_TxnRequest.Merge(m, src)
-}
-func (m *TxnRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *TxnRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_TxnRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_TxnRequest proto.InternalMessageInfo
-
-func (m *TxnRequest) GetCompare() []*Compare {
- if m != nil {
- return m.Compare
- }
- return nil
-}
-
-func (m *TxnRequest) GetSuccess() []*RequestOp {
- if m != nil {
- return m.Success
- }
- return nil
-}
-
-func (m *TxnRequest) GetFailure() []*RequestOp {
- if m != nil {
- return m.Failure
- }
- return nil
-}
-
-type TxnResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // succeeded is set to true if the compare evaluated to true or false otherwise.
- Succeeded bool `protobuf:"varint,2,opt,name=succeeded,proto3" json:"succeeded,omitempty"`
- // responses is a list of responses corresponding to the results from applying
- // success if succeeded is true or failure if succeeded is false.
- Responses []*ResponseOp `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *TxnResponse) Reset() { *m = TxnResponse{} }
-func (m *TxnResponse) String() string { return proto.CompactTextString(m) }
-func (*TxnResponse) ProtoMessage() {}
-func (*TxnResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{11}
-}
-func (m *TxnResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *TxnResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_TxnResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *TxnResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_TxnResponse.Merge(m, src)
-}
-func (m *TxnResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *TxnResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_TxnResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_TxnResponse proto.InternalMessageInfo
-
-func (m *TxnResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *TxnResponse) GetSucceeded() bool {
- if m != nil {
- return m.Succeeded
- }
- return false
-}
-
-func (m *TxnResponse) GetResponses() []*ResponseOp {
- if m != nil {
- return m.Responses
- }
- return nil
-}
-
-// CompactionRequest compacts the key-value store up to a given revision. All superseded keys
-// with a revision less than the compaction revision will be removed.
-type CompactionRequest struct {
- // revision is the key-value store revision for the compaction operation.
- Revision int64 `protobuf:"varint,1,opt,name=revision,proto3" json:"revision,omitempty"`
- // physical is set so the RPC will wait until the compaction is physically
- // applied to the local database such that compacted entries are totally
- // removed from the backend database.
- Physical bool `protobuf:"varint,2,opt,name=physical,proto3" json:"physical,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *CompactionRequest) Reset() { *m = CompactionRequest{} }
-func (m *CompactionRequest) String() string { return proto.CompactTextString(m) }
-func (*CompactionRequest) ProtoMessage() {}
-func (*CompactionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{12}
-}
-func (m *CompactionRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *CompactionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_CompactionRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *CompactionRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_CompactionRequest.Merge(m, src)
-}
-func (m *CompactionRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *CompactionRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_CompactionRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CompactionRequest proto.InternalMessageInfo
-
-func (m *CompactionRequest) GetRevision() int64 {
- if m != nil {
- return m.Revision
- }
- return 0
-}
-
-func (m *CompactionRequest) GetPhysical() bool {
- if m != nil {
- return m.Physical
- }
- return false
-}
-
-type CompactionResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *CompactionResponse) Reset() { *m = CompactionResponse{} }
-func (m *CompactionResponse) String() string { return proto.CompactTextString(m) }
-func (*CompactionResponse) ProtoMessage() {}
-func (*CompactionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{13}
-}
-func (m *CompactionResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *CompactionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_CompactionResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *CompactionResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_CompactionResponse.Merge(m, src)
-}
-func (m *CompactionResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *CompactionResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_CompactionResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CompactionResponse proto.InternalMessageInfo
-
-func (m *CompactionResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type HashRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *HashRequest) Reset() { *m = HashRequest{} }
-func (m *HashRequest) String() string { return proto.CompactTextString(m) }
-func (*HashRequest) ProtoMessage() {}
-func (*HashRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{14}
-}
-func (m *HashRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *HashRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_HashRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *HashRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HashRequest.Merge(m, src)
-}
-func (m *HashRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *HashRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_HashRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HashRequest proto.InternalMessageInfo
-
-type HashKVRequest struct {
- // revision is the key-value store revision for the hash operation.
- Revision int64 `protobuf:"varint,1,opt,name=revision,proto3" json:"revision,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *HashKVRequest) Reset() { *m = HashKVRequest{} }
-func (m *HashKVRequest) String() string { return proto.CompactTextString(m) }
-func (*HashKVRequest) ProtoMessage() {}
-func (*HashKVRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{15}
-}
-func (m *HashKVRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *HashKVRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_HashKVRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *HashKVRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HashKVRequest.Merge(m, src)
-}
-func (m *HashKVRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *HashKVRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_HashKVRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HashKVRequest proto.InternalMessageInfo
-
-func (m *HashKVRequest) GetRevision() int64 {
- if m != nil {
- return m.Revision
- }
- return 0
-}
-
-type HashKVResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // hash is the hash value computed from the responding member's MVCC keys up to a given revision.
- Hash uint32 `protobuf:"varint,2,opt,name=hash,proto3" json:"hash,omitempty"`
- // compact_revision is the compacted revision of key-value store when hash begins.
- CompactRevision int64 `protobuf:"varint,3,opt,name=compact_revision,json=compactRevision,proto3" json:"compact_revision,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *HashKVResponse) Reset() { *m = HashKVResponse{} }
-func (m *HashKVResponse) String() string { return proto.CompactTextString(m) }
-func (*HashKVResponse) ProtoMessage() {}
-func (*HashKVResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{16}
-}
-func (m *HashKVResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *HashKVResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_HashKVResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *HashKVResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HashKVResponse.Merge(m, src)
-}
-func (m *HashKVResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *HashKVResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_HashKVResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HashKVResponse proto.InternalMessageInfo
-
-func (m *HashKVResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *HashKVResponse) GetHash() uint32 {
- if m != nil {
- return m.Hash
- }
- return 0
-}
-
-func (m *HashKVResponse) GetCompactRevision() int64 {
- if m != nil {
- return m.CompactRevision
- }
- return 0
-}
-
-type HashResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // hash is the hash value computed from the responding member's KV's backend.
- Hash uint32 `protobuf:"varint,2,opt,name=hash,proto3" json:"hash,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *HashResponse) Reset() { *m = HashResponse{} }
-func (m *HashResponse) String() string { return proto.CompactTextString(m) }
-func (*HashResponse) ProtoMessage() {}
-func (*HashResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{17}
-}
-func (m *HashResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *HashResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_HashResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *HashResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HashResponse.Merge(m, src)
-}
-func (m *HashResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *HashResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_HashResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HashResponse proto.InternalMessageInfo
-
-func (m *HashResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *HashResponse) GetHash() uint32 {
- if m != nil {
- return m.Hash
- }
- return 0
-}
-
-type SnapshotRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *SnapshotRequest) Reset() { *m = SnapshotRequest{} }
-func (m *SnapshotRequest) String() string { return proto.CompactTextString(m) }
-func (*SnapshotRequest) ProtoMessage() {}
-func (*SnapshotRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{18}
-}
-func (m *SnapshotRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *SnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_SnapshotRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *SnapshotRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SnapshotRequest.Merge(m, src)
-}
-func (m *SnapshotRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *SnapshotRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_SnapshotRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SnapshotRequest proto.InternalMessageInfo
-
-type SnapshotResponse struct {
- // header has the current key-value store information. The first header in the snapshot
- // stream indicates the point in time of the snapshot.
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // remaining_bytes is the number of blob bytes to be sent after this message
- RemainingBytes uint64 `protobuf:"varint,2,opt,name=remaining_bytes,json=remainingBytes,proto3" json:"remaining_bytes,omitempty"`
- // blob contains the next chunk of the snapshot in the snapshot stream.
- Blob []byte `protobuf:"bytes,3,opt,name=blob,proto3" json:"blob,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *SnapshotResponse) Reset() { *m = SnapshotResponse{} }
-func (m *SnapshotResponse) String() string { return proto.CompactTextString(m) }
-func (*SnapshotResponse) ProtoMessage() {}
-func (*SnapshotResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{19}
-}
-func (m *SnapshotResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *SnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_SnapshotResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *SnapshotResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SnapshotResponse.Merge(m, src)
-}
-func (m *SnapshotResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *SnapshotResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_SnapshotResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SnapshotResponse proto.InternalMessageInfo
-
-func (m *SnapshotResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *SnapshotResponse) GetRemainingBytes() uint64 {
- if m != nil {
- return m.RemainingBytes
- }
- return 0
-}
-
-func (m *SnapshotResponse) GetBlob() []byte {
- if m != nil {
- return m.Blob
- }
- return nil
-}
-
-type WatchRequest struct {
- // request_union is a request to either create a new watcher or cancel an existing watcher.
- //
- // Types that are valid to be assigned to RequestUnion:
- // *WatchRequest_CreateRequest
- // *WatchRequest_CancelRequest
- // *WatchRequest_ProgressRequest
- RequestUnion isWatchRequest_RequestUnion `protobuf_oneof:"request_union"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *WatchRequest) Reset() { *m = WatchRequest{} }
-func (m *WatchRequest) String() string { return proto.CompactTextString(m) }
-func (*WatchRequest) ProtoMessage() {}
-func (*WatchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{20}
-}
-func (m *WatchRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *WatchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_WatchRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *WatchRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_WatchRequest.Merge(m, src)
-}
-func (m *WatchRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *WatchRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_WatchRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_WatchRequest proto.InternalMessageInfo
-
-type isWatchRequest_RequestUnion interface {
- isWatchRequest_RequestUnion()
- MarshalTo([]byte) (int, error)
- Size() int
-}
-
-type WatchRequest_CreateRequest struct {
- CreateRequest *WatchCreateRequest `protobuf:"bytes,1,opt,name=create_request,json=createRequest,proto3,oneof" json:"create_request,omitempty"`
-}
-type WatchRequest_CancelRequest struct {
- CancelRequest *WatchCancelRequest `protobuf:"bytes,2,opt,name=cancel_request,json=cancelRequest,proto3,oneof" json:"cancel_request,omitempty"`
-}
-type WatchRequest_ProgressRequest struct {
- ProgressRequest *WatchProgressRequest `protobuf:"bytes,3,opt,name=progress_request,json=progressRequest,proto3,oneof" json:"progress_request,omitempty"`
-}
-
-func (*WatchRequest_CreateRequest) isWatchRequest_RequestUnion() {}
-func (*WatchRequest_CancelRequest) isWatchRequest_RequestUnion() {}
-func (*WatchRequest_ProgressRequest) isWatchRequest_RequestUnion() {}
-
-func (m *WatchRequest) GetRequestUnion() isWatchRequest_RequestUnion {
- if m != nil {
- return m.RequestUnion
- }
- return nil
-}
-
-func (m *WatchRequest) GetCreateRequest() *WatchCreateRequest {
- if x, ok := m.GetRequestUnion().(*WatchRequest_CreateRequest); ok {
- return x.CreateRequest
- }
- return nil
-}
-
-func (m *WatchRequest) GetCancelRequest() *WatchCancelRequest {
- if x, ok := m.GetRequestUnion().(*WatchRequest_CancelRequest); ok {
- return x.CancelRequest
- }
- return nil
-}
-
-func (m *WatchRequest) GetProgressRequest() *WatchProgressRequest {
- if x, ok := m.GetRequestUnion().(*WatchRequest_ProgressRequest); ok {
- return x.ProgressRequest
- }
- return nil
-}
-
-// XXX_OneofWrappers is for the internal use of the proto package.
-func (*WatchRequest) XXX_OneofWrappers() []interface{} {
- return []interface{}{
- (*WatchRequest_CreateRequest)(nil),
- (*WatchRequest_CancelRequest)(nil),
- (*WatchRequest_ProgressRequest)(nil),
- }
-}
-
-type WatchCreateRequest struct {
- // key is the key to register for watching.
- Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
- // range_end is the end of the range [key, range_end) to watch. If range_end is not given,
- // only the key argument is watched. If range_end is equal to '\0', all keys greater than
- // or equal to the key argument are watched.
- // If the range_end is one bit larger than the given key,
- // then all keys with the prefix (the given key) will be watched.
- RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"`
- // start_revision is an optional revision to watch from (inclusive). No start_revision is "now".
- StartRevision int64 `protobuf:"varint,3,opt,name=start_revision,json=startRevision,proto3" json:"start_revision,omitempty"`
- // progress_notify is set so that the etcd server will periodically send a WatchResponse with
- // no events to the new watcher if there are no recent events. It is useful when clients
- // wish to recover a disconnected watcher starting from a recent known revision.
- // The etcd server may decide how often it will send notifications based on current load.
- ProgressNotify bool `protobuf:"varint,4,opt,name=progress_notify,json=progressNotify,proto3" json:"progress_notify,omitempty"`
- // filters filter the events at server side before it sends back to the watcher.
- Filters []WatchCreateRequest_FilterType `protobuf:"varint,5,rep,packed,name=filters,proto3,enum=etcdserverpb.WatchCreateRequest_FilterType" json:"filters,omitempty"`
- // If prev_kv is set, created watcher gets the previous KV before the event happens.
- // If the previous KV is already compacted, nothing will be returned.
- PrevKv bool `protobuf:"varint,6,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"`
- // If watch_id is provided and non-zero, it will be assigned to this watcher.
- // Since creating a watcher in etcd is not a synchronous operation,
- // this can be used ensure that ordering is correct when creating multiple
- // watchers on the same stream. Creating a watcher with an ID already in
- // use on the stream will cause an error to be returned.
- WatchId int64 `protobuf:"varint,7,opt,name=watch_id,json=watchId,proto3" json:"watch_id,omitempty"`
- // fragment enables splitting large revisions into multiple watch responses.
- Fragment bool `protobuf:"varint,8,opt,name=fragment,proto3" json:"fragment,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *WatchCreateRequest) Reset() { *m = WatchCreateRequest{} }
-func (m *WatchCreateRequest) String() string { return proto.CompactTextString(m) }
-func (*WatchCreateRequest) ProtoMessage() {}
-func (*WatchCreateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{21}
-}
-func (m *WatchCreateRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *WatchCreateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_WatchCreateRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *WatchCreateRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_WatchCreateRequest.Merge(m, src)
-}
-func (m *WatchCreateRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *WatchCreateRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_WatchCreateRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_WatchCreateRequest proto.InternalMessageInfo
-
-func (m *WatchCreateRequest) GetKey() []byte {
- if m != nil {
- return m.Key
- }
- return nil
-}
-
-func (m *WatchCreateRequest) GetRangeEnd() []byte {
- if m != nil {
- return m.RangeEnd
- }
- return nil
-}
-
-func (m *WatchCreateRequest) GetStartRevision() int64 {
- if m != nil {
- return m.StartRevision
- }
- return 0
-}
-
-func (m *WatchCreateRequest) GetProgressNotify() bool {
- if m != nil {
- return m.ProgressNotify
- }
- return false
-}
-
-func (m *WatchCreateRequest) GetFilters() []WatchCreateRequest_FilterType {
- if m != nil {
- return m.Filters
- }
- return nil
-}
-
-func (m *WatchCreateRequest) GetPrevKv() bool {
- if m != nil {
- return m.PrevKv
- }
- return false
-}
-
-func (m *WatchCreateRequest) GetWatchId() int64 {
- if m != nil {
- return m.WatchId
- }
- return 0
-}
-
-func (m *WatchCreateRequest) GetFragment() bool {
- if m != nil {
- return m.Fragment
- }
- return false
-}
-
-type WatchCancelRequest struct {
- // watch_id is the watcher id to cancel so that no more events are transmitted.
- WatchId int64 `protobuf:"varint,1,opt,name=watch_id,json=watchId,proto3" json:"watch_id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *WatchCancelRequest) Reset() { *m = WatchCancelRequest{} }
-func (m *WatchCancelRequest) String() string { return proto.CompactTextString(m) }
-func (*WatchCancelRequest) ProtoMessage() {}
-func (*WatchCancelRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{22}
-}
-func (m *WatchCancelRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *WatchCancelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_WatchCancelRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *WatchCancelRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_WatchCancelRequest.Merge(m, src)
-}
-func (m *WatchCancelRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *WatchCancelRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_WatchCancelRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_WatchCancelRequest proto.InternalMessageInfo
-
-func (m *WatchCancelRequest) GetWatchId() int64 {
- if m != nil {
- return m.WatchId
- }
- return 0
-}
-
-// Requests the a watch stream progress status be sent in the watch response stream as soon as
-// possible.
-type WatchProgressRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *WatchProgressRequest) Reset() { *m = WatchProgressRequest{} }
-func (m *WatchProgressRequest) String() string { return proto.CompactTextString(m) }
-func (*WatchProgressRequest) ProtoMessage() {}
-func (*WatchProgressRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{23}
-}
-func (m *WatchProgressRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *WatchProgressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_WatchProgressRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *WatchProgressRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_WatchProgressRequest.Merge(m, src)
-}
-func (m *WatchProgressRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *WatchProgressRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_WatchProgressRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_WatchProgressRequest proto.InternalMessageInfo
-
-type WatchResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // watch_id is the ID of the watcher that corresponds to the response.
- WatchId int64 `protobuf:"varint,2,opt,name=watch_id,json=watchId,proto3" json:"watch_id,omitempty"`
- // created is set to true if the response is for a create watch request.
- // The client should record the watch_id and expect to receive events for
- // the created watcher from the same stream.
- // All events sent to the created watcher will attach with the same watch_id.
- Created bool `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"`
- // canceled is set to true if the response is for a cancel watch request.
- // No further events will be sent to the canceled watcher.
- Canceled bool `protobuf:"varint,4,opt,name=canceled,proto3" json:"canceled,omitempty"`
- // compact_revision is set to the minimum index if a watcher tries to watch
- // at a compacted index.
- //
- // This happens when creating a watcher at a compacted revision or the watcher cannot
- // catch up with the progress of the key-value store.
- //
- // The client should treat the watcher as canceled and should not try to create any
- // watcher with the same start_revision again.
- CompactRevision int64 `protobuf:"varint,5,opt,name=compact_revision,json=compactRevision,proto3" json:"compact_revision,omitempty"`
- // cancel_reason indicates the reason for canceling the watcher.
- CancelReason string `protobuf:"bytes,6,opt,name=cancel_reason,json=cancelReason,proto3" json:"cancel_reason,omitempty"`
- // framgment is true if large watch response was split over multiple responses.
- Fragment bool `protobuf:"varint,7,opt,name=fragment,proto3" json:"fragment,omitempty"`
- Events []*mvccpb.Event `protobuf:"bytes,11,rep,name=events,proto3" json:"events,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *WatchResponse) Reset() { *m = WatchResponse{} }
-func (m *WatchResponse) String() string { return proto.CompactTextString(m) }
-func (*WatchResponse) ProtoMessage() {}
-func (*WatchResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{24}
-}
-func (m *WatchResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *WatchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_WatchResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *WatchResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_WatchResponse.Merge(m, src)
-}
-func (m *WatchResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *WatchResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_WatchResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_WatchResponse proto.InternalMessageInfo
-
-func (m *WatchResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *WatchResponse) GetWatchId() int64 {
- if m != nil {
- return m.WatchId
- }
- return 0
-}
-
-func (m *WatchResponse) GetCreated() bool {
- if m != nil {
- return m.Created
- }
- return false
-}
-
-func (m *WatchResponse) GetCanceled() bool {
- if m != nil {
- return m.Canceled
- }
- return false
-}
-
-func (m *WatchResponse) GetCompactRevision() int64 {
- if m != nil {
- return m.CompactRevision
- }
- return 0
-}
-
-func (m *WatchResponse) GetCancelReason() string {
- if m != nil {
- return m.CancelReason
- }
- return ""
-}
-
-func (m *WatchResponse) GetFragment() bool {
- if m != nil {
- return m.Fragment
- }
- return false
-}
-
-func (m *WatchResponse) GetEvents() []*mvccpb.Event {
- if m != nil {
- return m.Events
- }
- return nil
-}
-
-type LeaseGrantRequest struct {
- // TTL is the advisory time-to-live in seconds. Expired lease will return -1.
- TTL int64 `protobuf:"varint,1,opt,name=TTL,proto3" json:"TTL,omitempty"`
- // ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID.
- ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseGrantRequest) Reset() { *m = LeaseGrantRequest{} }
-func (m *LeaseGrantRequest) String() string { return proto.CompactTextString(m) }
-func (*LeaseGrantRequest) ProtoMessage() {}
-func (*LeaseGrantRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{25}
-}
-func (m *LeaseGrantRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseGrantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseGrantRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseGrantRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseGrantRequest.Merge(m, src)
-}
-func (m *LeaseGrantRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseGrantRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseGrantRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseGrantRequest proto.InternalMessageInfo
-
-func (m *LeaseGrantRequest) GetTTL() int64 {
- if m != nil {
- return m.TTL
- }
- return 0
-}
-
-func (m *LeaseGrantRequest) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-type LeaseGrantResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // ID is the lease ID for the granted lease.
- ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"`
- // TTL is the server chosen lease time-to-live in seconds.
- TTL int64 `protobuf:"varint,3,opt,name=TTL,proto3" json:"TTL,omitempty"`
- Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseGrantResponse) Reset() { *m = LeaseGrantResponse{} }
-func (m *LeaseGrantResponse) String() string { return proto.CompactTextString(m) }
-func (*LeaseGrantResponse) ProtoMessage() {}
-func (*LeaseGrantResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{26}
-}
-func (m *LeaseGrantResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseGrantResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseGrantResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseGrantResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseGrantResponse.Merge(m, src)
-}
-func (m *LeaseGrantResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseGrantResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseGrantResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseGrantResponse proto.InternalMessageInfo
-
-func (m *LeaseGrantResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *LeaseGrantResponse) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-func (m *LeaseGrantResponse) GetTTL() int64 {
- if m != nil {
- return m.TTL
- }
- return 0
-}
-
-func (m *LeaseGrantResponse) GetError() string {
- if m != nil {
- return m.Error
- }
- return ""
-}
-
-type LeaseRevokeRequest struct {
- // ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted.
- ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseRevokeRequest) Reset() { *m = LeaseRevokeRequest{} }
-func (m *LeaseRevokeRequest) String() string { return proto.CompactTextString(m) }
-func (*LeaseRevokeRequest) ProtoMessage() {}
-func (*LeaseRevokeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{27}
-}
-func (m *LeaseRevokeRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseRevokeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseRevokeRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseRevokeRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseRevokeRequest.Merge(m, src)
-}
-func (m *LeaseRevokeRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseRevokeRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseRevokeRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseRevokeRequest proto.InternalMessageInfo
-
-func (m *LeaseRevokeRequest) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-type LeaseRevokeResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseRevokeResponse) Reset() { *m = LeaseRevokeResponse{} }
-func (m *LeaseRevokeResponse) String() string { return proto.CompactTextString(m) }
-func (*LeaseRevokeResponse) ProtoMessage() {}
-func (*LeaseRevokeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{28}
-}
-func (m *LeaseRevokeResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseRevokeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseRevokeResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseRevokeResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseRevokeResponse.Merge(m, src)
-}
-func (m *LeaseRevokeResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseRevokeResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseRevokeResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseRevokeResponse proto.InternalMessageInfo
-
-func (m *LeaseRevokeResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type LeaseCheckpoint struct {
- // ID is the lease ID to checkpoint.
- ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- // Remaining_TTL is the remaining time until expiry of the lease.
- Remaining_TTL int64 `protobuf:"varint,2,opt,name=remaining_TTL,json=remainingTTL,proto3" json:"remaining_TTL,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseCheckpoint) Reset() { *m = LeaseCheckpoint{} }
-func (m *LeaseCheckpoint) String() string { return proto.CompactTextString(m) }
-func (*LeaseCheckpoint) ProtoMessage() {}
-func (*LeaseCheckpoint) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{29}
-}
-func (m *LeaseCheckpoint) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseCheckpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseCheckpoint.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseCheckpoint) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseCheckpoint.Merge(m, src)
-}
-func (m *LeaseCheckpoint) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseCheckpoint) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseCheckpoint.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseCheckpoint proto.InternalMessageInfo
-
-func (m *LeaseCheckpoint) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-func (m *LeaseCheckpoint) GetRemaining_TTL() int64 {
- if m != nil {
- return m.Remaining_TTL
- }
- return 0
-}
-
-type LeaseCheckpointRequest struct {
- Checkpoints []*LeaseCheckpoint `protobuf:"bytes,1,rep,name=checkpoints,proto3" json:"checkpoints,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseCheckpointRequest) Reset() { *m = LeaseCheckpointRequest{} }
-func (m *LeaseCheckpointRequest) String() string { return proto.CompactTextString(m) }
-func (*LeaseCheckpointRequest) ProtoMessage() {}
-func (*LeaseCheckpointRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{30}
-}
-func (m *LeaseCheckpointRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseCheckpointRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseCheckpointRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseCheckpointRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseCheckpointRequest.Merge(m, src)
-}
-func (m *LeaseCheckpointRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseCheckpointRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseCheckpointRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseCheckpointRequest proto.InternalMessageInfo
-
-func (m *LeaseCheckpointRequest) GetCheckpoints() []*LeaseCheckpoint {
- if m != nil {
- return m.Checkpoints
- }
- return nil
-}
-
-type LeaseCheckpointResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseCheckpointResponse) Reset() { *m = LeaseCheckpointResponse{} }
-func (m *LeaseCheckpointResponse) String() string { return proto.CompactTextString(m) }
-func (*LeaseCheckpointResponse) ProtoMessage() {}
-func (*LeaseCheckpointResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{31}
-}
-func (m *LeaseCheckpointResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseCheckpointResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseCheckpointResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseCheckpointResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseCheckpointResponse.Merge(m, src)
-}
-func (m *LeaseCheckpointResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseCheckpointResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseCheckpointResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseCheckpointResponse proto.InternalMessageInfo
-
-func (m *LeaseCheckpointResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type LeaseKeepAliveRequest struct {
- // ID is the lease ID for the lease to keep alive.
- ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseKeepAliveRequest) Reset() { *m = LeaseKeepAliveRequest{} }
-func (m *LeaseKeepAliveRequest) String() string { return proto.CompactTextString(m) }
-func (*LeaseKeepAliveRequest) ProtoMessage() {}
-func (*LeaseKeepAliveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{32}
-}
-func (m *LeaseKeepAliveRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseKeepAliveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseKeepAliveRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseKeepAliveRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseKeepAliveRequest.Merge(m, src)
-}
-func (m *LeaseKeepAliveRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseKeepAliveRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseKeepAliveRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseKeepAliveRequest proto.InternalMessageInfo
-
-func (m *LeaseKeepAliveRequest) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-type LeaseKeepAliveResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // ID is the lease ID from the keep alive request.
- ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"`
- // TTL is the new time-to-live for the lease.
- TTL int64 `protobuf:"varint,3,opt,name=TTL,proto3" json:"TTL,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseKeepAliveResponse) Reset() { *m = LeaseKeepAliveResponse{} }
-func (m *LeaseKeepAliveResponse) String() string { return proto.CompactTextString(m) }
-func (*LeaseKeepAliveResponse) ProtoMessage() {}
-func (*LeaseKeepAliveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{33}
-}
-func (m *LeaseKeepAliveResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseKeepAliveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseKeepAliveResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseKeepAliveResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseKeepAliveResponse.Merge(m, src)
-}
-func (m *LeaseKeepAliveResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseKeepAliveResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseKeepAliveResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseKeepAliveResponse proto.InternalMessageInfo
-
-func (m *LeaseKeepAliveResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *LeaseKeepAliveResponse) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-func (m *LeaseKeepAliveResponse) GetTTL() int64 {
- if m != nil {
- return m.TTL
- }
- return 0
-}
-
-type LeaseTimeToLiveRequest struct {
- // ID is the lease ID for the lease.
- ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- // keys is true to query all the keys attached to this lease.
- Keys bool `protobuf:"varint,2,opt,name=keys,proto3" json:"keys,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseTimeToLiveRequest) Reset() { *m = LeaseTimeToLiveRequest{} }
-func (m *LeaseTimeToLiveRequest) String() string { return proto.CompactTextString(m) }
-func (*LeaseTimeToLiveRequest) ProtoMessage() {}
-func (*LeaseTimeToLiveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{34}
-}
-func (m *LeaseTimeToLiveRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseTimeToLiveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseTimeToLiveRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseTimeToLiveRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseTimeToLiveRequest.Merge(m, src)
-}
-func (m *LeaseTimeToLiveRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseTimeToLiveRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseTimeToLiveRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseTimeToLiveRequest proto.InternalMessageInfo
-
-func (m *LeaseTimeToLiveRequest) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-func (m *LeaseTimeToLiveRequest) GetKeys() bool {
- if m != nil {
- return m.Keys
- }
- return false
-}
-
-type LeaseTimeToLiveResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // ID is the lease ID from the keep alive request.
- ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"`
- // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds.
- TTL int64 `protobuf:"varint,3,opt,name=TTL,proto3" json:"TTL,omitempty"`
- // GrantedTTL is the initial granted time in seconds upon lease creation/renewal.
- GrantedTTL int64 `protobuf:"varint,4,opt,name=grantedTTL,proto3" json:"grantedTTL,omitempty"`
- // Keys is the list of keys attached to this lease.
- Keys [][]byte `protobuf:"bytes,5,rep,name=keys,proto3" json:"keys,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseTimeToLiveResponse) Reset() { *m = LeaseTimeToLiveResponse{} }
-func (m *LeaseTimeToLiveResponse) String() string { return proto.CompactTextString(m) }
-func (*LeaseTimeToLiveResponse) ProtoMessage() {}
-func (*LeaseTimeToLiveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{35}
-}
-func (m *LeaseTimeToLiveResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseTimeToLiveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseTimeToLiveResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseTimeToLiveResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseTimeToLiveResponse.Merge(m, src)
-}
-func (m *LeaseTimeToLiveResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseTimeToLiveResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseTimeToLiveResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseTimeToLiveResponse proto.InternalMessageInfo
-
-func (m *LeaseTimeToLiveResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *LeaseTimeToLiveResponse) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-func (m *LeaseTimeToLiveResponse) GetTTL() int64 {
- if m != nil {
- return m.TTL
- }
- return 0
-}
-
-func (m *LeaseTimeToLiveResponse) GetGrantedTTL() int64 {
- if m != nil {
- return m.GrantedTTL
- }
- return 0
-}
-
-func (m *LeaseTimeToLiveResponse) GetKeys() [][]byte {
- if m != nil {
- return m.Keys
- }
- return nil
-}
-
-type LeaseLeasesRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseLeasesRequest) Reset() { *m = LeaseLeasesRequest{} }
-func (m *LeaseLeasesRequest) String() string { return proto.CompactTextString(m) }
-func (*LeaseLeasesRequest) ProtoMessage() {}
-func (*LeaseLeasesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{36}
-}
-func (m *LeaseLeasesRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseLeasesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseLeasesRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseLeasesRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseLeasesRequest.Merge(m, src)
-}
-func (m *LeaseLeasesRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseLeasesRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseLeasesRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseLeasesRequest proto.InternalMessageInfo
-
-type LeaseStatus struct {
- ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseStatus) Reset() { *m = LeaseStatus{} }
-func (m *LeaseStatus) String() string { return proto.CompactTextString(m) }
-func (*LeaseStatus) ProtoMessage() {}
-func (*LeaseStatus) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{37}
-}
-func (m *LeaseStatus) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseStatus.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseStatus) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseStatus.Merge(m, src)
-}
-func (m *LeaseStatus) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseStatus) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseStatus.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseStatus proto.InternalMessageInfo
-
-func (m *LeaseStatus) GetID() int64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-type LeaseLeasesResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- Leases []*LeaseStatus `protobuf:"bytes,2,rep,name=leases,proto3" json:"leases,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *LeaseLeasesResponse) Reset() { *m = LeaseLeasesResponse{} }
-func (m *LeaseLeasesResponse) String() string { return proto.CompactTextString(m) }
-func (*LeaseLeasesResponse) ProtoMessage() {}
-func (*LeaseLeasesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{38}
-}
-func (m *LeaseLeasesResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *LeaseLeasesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_LeaseLeasesResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *LeaseLeasesResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LeaseLeasesResponse.Merge(m, src)
-}
-func (m *LeaseLeasesResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *LeaseLeasesResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LeaseLeasesResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseLeasesResponse proto.InternalMessageInfo
-
-func (m *LeaseLeasesResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *LeaseLeasesResponse) GetLeases() []*LeaseStatus {
- if m != nil {
- return m.Leases
- }
- return nil
-}
-
-type Member struct {
- // ID is the member ID for this member.
- ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- // name is the human-readable name of the member. If the member is not started, the name will be an empty string.
- Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
- // peerURLs is the list of URLs the member exposes to the cluster for communication.
- PeerURLs []string `protobuf:"bytes,3,rep,name=peerURLs,proto3" json:"peerURLs,omitempty"`
- // clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty.
- ClientURLs []string `protobuf:"bytes,4,rep,name=clientURLs,proto3" json:"clientURLs,omitempty"`
- // isLearner indicates if the member is raft learner.
- IsLearner bool `protobuf:"varint,5,opt,name=isLearner,proto3" json:"isLearner,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Member) Reset() { *m = Member{} }
-func (m *Member) String() string { return proto.CompactTextString(m) }
-func (*Member) ProtoMessage() {}
-func (*Member) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{39}
-}
-func (m *Member) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Member) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Member.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Member) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Member.Merge(m, src)
-}
-func (m *Member) XXX_Size() int {
- return m.Size()
-}
-func (m *Member) XXX_DiscardUnknown() {
- xxx_messageInfo_Member.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Member proto.InternalMessageInfo
-
-func (m *Member) GetID() uint64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-func (m *Member) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *Member) GetPeerURLs() []string {
- if m != nil {
- return m.PeerURLs
- }
- return nil
-}
-
-func (m *Member) GetClientURLs() []string {
- if m != nil {
- return m.ClientURLs
- }
- return nil
-}
-
-func (m *Member) GetIsLearner() bool {
- if m != nil {
- return m.IsLearner
- }
- return false
-}
-
-type MemberAddRequest struct {
- // peerURLs is the list of URLs the added member will use to communicate with the cluster.
- PeerURLs []string `protobuf:"bytes,1,rep,name=peerURLs,proto3" json:"peerURLs,omitempty"`
- // isLearner indicates if the added member is raft learner.
- IsLearner bool `protobuf:"varint,2,opt,name=isLearner,proto3" json:"isLearner,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberAddRequest) Reset() { *m = MemberAddRequest{} }
-func (m *MemberAddRequest) String() string { return proto.CompactTextString(m) }
-func (*MemberAddRequest) ProtoMessage() {}
-func (*MemberAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{40}
-}
-func (m *MemberAddRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberAddRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberAddRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberAddRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberAddRequest.Merge(m, src)
-}
-func (m *MemberAddRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberAddRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberAddRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberAddRequest proto.InternalMessageInfo
-
-func (m *MemberAddRequest) GetPeerURLs() []string {
- if m != nil {
- return m.PeerURLs
- }
- return nil
-}
-
-func (m *MemberAddRequest) GetIsLearner() bool {
- if m != nil {
- return m.IsLearner
- }
- return false
-}
-
-type MemberAddResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // member is the member information for the added member.
- Member *Member `protobuf:"bytes,2,opt,name=member,proto3" json:"member,omitempty"`
- // members is a list of all members after adding the new member.
- Members []*Member `protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberAddResponse) Reset() { *m = MemberAddResponse{} }
-func (m *MemberAddResponse) String() string { return proto.CompactTextString(m) }
-func (*MemberAddResponse) ProtoMessage() {}
-func (*MemberAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{41}
-}
-func (m *MemberAddResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberAddResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberAddResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberAddResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberAddResponse.Merge(m, src)
-}
-func (m *MemberAddResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberAddResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberAddResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberAddResponse proto.InternalMessageInfo
-
-func (m *MemberAddResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *MemberAddResponse) GetMember() *Member {
- if m != nil {
- return m.Member
- }
- return nil
-}
-
-func (m *MemberAddResponse) GetMembers() []*Member {
- if m != nil {
- return m.Members
- }
- return nil
-}
-
-type MemberRemoveRequest struct {
- // ID is the member ID of the member to remove.
- ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberRemoveRequest) Reset() { *m = MemberRemoveRequest{} }
-func (m *MemberRemoveRequest) String() string { return proto.CompactTextString(m) }
-func (*MemberRemoveRequest) ProtoMessage() {}
-func (*MemberRemoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{42}
-}
-func (m *MemberRemoveRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberRemoveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberRemoveRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberRemoveRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberRemoveRequest.Merge(m, src)
-}
-func (m *MemberRemoveRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberRemoveRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberRemoveRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberRemoveRequest proto.InternalMessageInfo
-
-func (m *MemberRemoveRequest) GetID() uint64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-type MemberRemoveResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // members is a list of all members after removing the member.
- Members []*Member `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberRemoveResponse) Reset() { *m = MemberRemoveResponse{} }
-func (m *MemberRemoveResponse) String() string { return proto.CompactTextString(m) }
-func (*MemberRemoveResponse) ProtoMessage() {}
-func (*MemberRemoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{43}
-}
-func (m *MemberRemoveResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberRemoveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberRemoveResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberRemoveResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberRemoveResponse.Merge(m, src)
-}
-func (m *MemberRemoveResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberRemoveResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberRemoveResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberRemoveResponse proto.InternalMessageInfo
-
-func (m *MemberRemoveResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *MemberRemoveResponse) GetMembers() []*Member {
- if m != nil {
- return m.Members
- }
- return nil
-}
-
-type MemberUpdateRequest struct {
- // ID is the member ID of the member to update.
- ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- // peerURLs is the new list of URLs the member will use to communicate with the cluster.
- PeerURLs []string `protobuf:"bytes,2,rep,name=peerURLs,proto3" json:"peerURLs,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberUpdateRequest) Reset() { *m = MemberUpdateRequest{} }
-func (m *MemberUpdateRequest) String() string { return proto.CompactTextString(m) }
-func (*MemberUpdateRequest) ProtoMessage() {}
-func (*MemberUpdateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{44}
-}
-func (m *MemberUpdateRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberUpdateRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberUpdateRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberUpdateRequest.Merge(m, src)
-}
-func (m *MemberUpdateRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberUpdateRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberUpdateRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberUpdateRequest proto.InternalMessageInfo
-
-func (m *MemberUpdateRequest) GetID() uint64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-func (m *MemberUpdateRequest) GetPeerURLs() []string {
- if m != nil {
- return m.PeerURLs
- }
- return nil
-}
-
-type MemberUpdateResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // members is a list of all members after updating the member.
- Members []*Member `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberUpdateResponse) Reset() { *m = MemberUpdateResponse{} }
-func (m *MemberUpdateResponse) String() string { return proto.CompactTextString(m) }
-func (*MemberUpdateResponse) ProtoMessage() {}
-func (*MemberUpdateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{45}
-}
-func (m *MemberUpdateResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberUpdateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberUpdateResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberUpdateResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberUpdateResponse.Merge(m, src)
-}
-func (m *MemberUpdateResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberUpdateResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberUpdateResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberUpdateResponse proto.InternalMessageInfo
-
-func (m *MemberUpdateResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *MemberUpdateResponse) GetMembers() []*Member {
- if m != nil {
- return m.Members
- }
- return nil
-}
-
-type MemberListRequest struct {
- Linearizable bool `protobuf:"varint,1,opt,name=linearizable,proto3" json:"linearizable,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberListRequest) Reset() { *m = MemberListRequest{} }
-func (m *MemberListRequest) String() string { return proto.CompactTextString(m) }
-func (*MemberListRequest) ProtoMessage() {}
-func (*MemberListRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{46}
-}
-func (m *MemberListRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberListRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberListRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberListRequest.Merge(m, src)
-}
-func (m *MemberListRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberListRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberListRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberListRequest proto.InternalMessageInfo
-
-func (m *MemberListRequest) GetLinearizable() bool {
- if m != nil {
- return m.Linearizable
- }
- return false
-}
-
-type MemberListResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // members is a list of all members associated with the cluster.
- Members []*Member `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberListResponse) Reset() { *m = MemberListResponse{} }
-func (m *MemberListResponse) String() string { return proto.CompactTextString(m) }
-func (*MemberListResponse) ProtoMessage() {}
-func (*MemberListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{47}
-}
-func (m *MemberListResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberListResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberListResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberListResponse.Merge(m, src)
-}
-func (m *MemberListResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberListResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberListResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberListResponse proto.InternalMessageInfo
-
-func (m *MemberListResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *MemberListResponse) GetMembers() []*Member {
- if m != nil {
- return m.Members
- }
- return nil
-}
-
-type MemberPromoteRequest struct {
- // ID is the member ID of the member to promote.
- ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberPromoteRequest) Reset() { *m = MemberPromoteRequest{} }
-func (m *MemberPromoteRequest) String() string { return proto.CompactTextString(m) }
-func (*MemberPromoteRequest) ProtoMessage() {}
-func (*MemberPromoteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{48}
-}
-func (m *MemberPromoteRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberPromoteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberPromoteRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberPromoteRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberPromoteRequest.Merge(m, src)
-}
-func (m *MemberPromoteRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberPromoteRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberPromoteRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberPromoteRequest proto.InternalMessageInfo
-
-func (m *MemberPromoteRequest) GetID() uint64 {
- if m != nil {
- return m.ID
- }
- return 0
-}
-
-type MemberPromoteResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // members is a list of all members after promoting the member.
- Members []*Member `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MemberPromoteResponse) Reset() { *m = MemberPromoteResponse{} }
-func (m *MemberPromoteResponse) String() string { return proto.CompactTextString(m) }
-func (*MemberPromoteResponse) ProtoMessage() {}
-func (*MemberPromoteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{49}
-}
-func (m *MemberPromoteResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MemberPromoteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MemberPromoteResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MemberPromoteResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MemberPromoteResponse.Merge(m, src)
-}
-func (m *MemberPromoteResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *MemberPromoteResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_MemberPromoteResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MemberPromoteResponse proto.InternalMessageInfo
-
-func (m *MemberPromoteResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *MemberPromoteResponse) GetMembers() []*Member {
- if m != nil {
- return m.Members
- }
- return nil
-}
-
-type DefragmentRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DefragmentRequest) Reset() { *m = DefragmentRequest{} }
-func (m *DefragmentRequest) String() string { return proto.CompactTextString(m) }
-func (*DefragmentRequest) ProtoMessage() {}
-func (*DefragmentRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{50}
-}
-func (m *DefragmentRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *DefragmentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_DefragmentRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *DefragmentRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DefragmentRequest.Merge(m, src)
-}
-func (m *DefragmentRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *DefragmentRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_DefragmentRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DefragmentRequest proto.InternalMessageInfo
-
-type DefragmentResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DefragmentResponse) Reset() { *m = DefragmentResponse{} }
-func (m *DefragmentResponse) String() string { return proto.CompactTextString(m) }
-func (*DefragmentResponse) ProtoMessage() {}
-func (*DefragmentResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{51}
-}
-func (m *DefragmentResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *DefragmentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_DefragmentResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *DefragmentResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DefragmentResponse.Merge(m, src)
-}
-func (m *DefragmentResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *DefragmentResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_DefragmentResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DefragmentResponse proto.InternalMessageInfo
-
-func (m *DefragmentResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type MoveLeaderRequest struct {
- // targetID is the node ID for the new leader.
- TargetID uint64 `protobuf:"varint,1,opt,name=targetID,proto3" json:"targetID,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MoveLeaderRequest) Reset() { *m = MoveLeaderRequest{} }
-func (m *MoveLeaderRequest) String() string { return proto.CompactTextString(m) }
-func (*MoveLeaderRequest) ProtoMessage() {}
-func (*MoveLeaderRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{52}
-}
-func (m *MoveLeaderRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MoveLeaderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MoveLeaderRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MoveLeaderRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MoveLeaderRequest.Merge(m, src)
-}
-func (m *MoveLeaderRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *MoveLeaderRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_MoveLeaderRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MoveLeaderRequest proto.InternalMessageInfo
-
-func (m *MoveLeaderRequest) GetTargetID() uint64 {
- if m != nil {
- return m.TargetID
- }
- return 0
-}
-
-type MoveLeaderResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MoveLeaderResponse) Reset() { *m = MoveLeaderResponse{} }
-func (m *MoveLeaderResponse) String() string { return proto.CompactTextString(m) }
-func (*MoveLeaderResponse) ProtoMessage() {}
-func (*MoveLeaderResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{53}
-}
-func (m *MoveLeaderResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *MoveLeaderResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_MoveLeaderResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *MoveLeaderResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MoveLeaderResponse.Merge(m, src)
-}
-func (m *MoveLeaderResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *MoveLeaderResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_MoveLeaderResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MoveLeaderResponse proto.InternalMessageInfo
-
-func (m *MoveLeaderResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AlarmRequest struct {
- // action is the kind of alarm request to issue. The action
- // may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a
- // raised alarm.
- Action AlarmRequest_AlarmAction `protobuf:"varint,1,opt,name=action,proto3,enum=etcdserverpb.AlarmRequest_AlarmAction" json:"action,omitempty"`
- // memberID is the ID of the member associated with the alarm. If memberID is 0, the
- // alarm request covers all members.
- MemberID uint64 `protobuf:"varint,2,opt,name=memberID,proto3" json:"memberID,omitempty"`
- // alarm is the type of alarm to consider for this request.
- Alarm AlarmType `protobuf:"varint,3,opt,name=alarm,proto3,enum=etcdserverpb.AlarmType" json:"alarm,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AlarmRequest) Reset() { *m = AlarmRequest{} }
-func (m *AlarmRequest) String() string { return proto.CompactTextString(m) }
-func (*AlarmRequest) ProtoMessage() {}
-func (*AlarmRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{54}
-}
-func (m *AlarmRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AlarmRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AlarmRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AlarmRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AlarmRequest.Merge(m, src)
-}
-func (m *AlarmRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AlarmRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AlarmRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AlarmRequest proto.InternalMessageInfo
-
-func (m *AlarmRequest) GetAction() AlarmRequest_AlarmAction {
- if m != nil {
- return m.Action
- }
- return AlarmRequest_GET
-}
-
-func (m *AlarmRequest) GetMemberID() uint64 {
- if m != nil {
- return m.MemberID
- }
- return 0
-}
-
-func (m *AlarmRequest) GetAlarm() AlarmType {
- if m != nil {
- return m.Alarm
- }
- return AlarmType_NONE
-}
-
-type AlarmMember struct {
- // memberID is the ID of the member associated with the raised alarm.
- MemberID uint64 `protobuf:"varint,1,opt,name=memberID,proto3" json:"memberID,omitempty"`
- // alarm is the type of alarm which has been raised.
- Alarm AlarmType `protobuf:"varint,2,opt,name=alarm,proto3,enum=etcdserverpb.AlarmType" json:"alarm,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AlarmMember) Reset() { *m = AlarmMember{} }
-func (m *AlarmMember) String() string { return proto.CompactTextString(m) }
-func (*AlarmMember) ProtoMessage() {}
-func (*AlarmMember) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{55}
-}
-func (m *AlarmMember) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AlarmMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AlarmMember.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AlarmMember) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AlarmMember.Merge(m, src)
-}
-func (m *AlarmMember) XXX_Size() int {
- return m.Size()
-}
-func (m *AlarmMember) XXX_DiscardUnknown() {
- xxx_messageInfo_AlarmMember.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AlarmMember proto.InternalMessageInfo
-
-func (m *AlarmMember) GetMemberID() uint64 {
- if m != nil {
- return m.MemberID
- }
- return 0
-}
-
-func (m *AlarmMember) GetAlarm() AlarmType {
- if m != nil {
- return m.Alarm
- }
- return AlarmType_NONE
-}
-
-type AlarmResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // alarms is a list of alarms associated with the alarm request.
- Alarms []*AlarmMember `protobuf:"bytes,2,rep,name=alarms,proto3" json:"alarms,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AlarmResponse) Reset() { *m = AlarmResponse{} }
-func (m *AlarmResponse) String() string { return proto.CompactTextString(m) }
-func (*AlarmResponse) ProtoMessage() {}
-func (*AlarmResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{56}
-}
-func (m *AlarmResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AlarmResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AlarmResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AlarmResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AlarmResponse.Merge(m, src)
-}
-func (m *AlarmResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AlarmResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AlarmResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AlarmResponse proto.InternalMessageInfo
-
-func (m *AlarmResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *AlarmResponse) GetAlarms() []*AlarmMember {
- if m != nil {
- return m.Alarms
- }
- return nil
-}
-
-type DowngradeRequest struct {
- // action is the kind of downgrade request to issue. The action may
- // VALIDATE the target version, DOWNGRADE the cluster version,
- // or CANCEL the current downgrading job.
- Action DowngradeRequest_DowngradeAction `protobuf:"varint,1,opt,name=action,proto3,enum=etcdserverpb.DowngradeRequest_DowngradeAction" json:"action,omitempty"`
- // version is the target version to downgrade.
- Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DowngradeRequest) Reset() { *m = DowngradeRequest{} }
-func (m *DowngradeRequest) String() string { return proto.CompactTextString(m) }
-func (*DowngradeRequest) ProtoMessage() {}
-func (*DowngradeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{57}
-}
-func (m *DowngradeRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *DowngradeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_DowngradeRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *DowngradeRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DowngradeRequest.Merge(m, src)
-}
-func (m *DowngradeRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *DowngradeRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_DowngradeRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DowngradeRequest proto.InternalMessageInfo
-
-func (m *DowngradeRequest) GetAction() DowngradeRequest_DowngradeAction {
- if m != nil {
- return m.Action
- }
- return DowngradeRequest_VALIDATE
-}
-
-func (m *DowngradeRequest) GetVersion() string {
- if m != nil {
- return m.Version
- }
- return ""
-}
-
-type DowngradeResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // version is the current cluster version.
- Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DowngradeResponse) Reset() { *m = DowngradeResponse{} }
-func (m *DowngradeResponse) String() string { return proto.CompactTextString(m) }
-func (*DowngradeResponse) ProtoMessage() {}
-func (*DowngradeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{58}
-}
-func (m *DowngradeResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *DowngradeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_DowngradeResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *DowngradeResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DowngradeResponse.Merge(m, src)
-}
-func (m *DowngradeResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *DowngradeResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_DowngradeResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DowngradeResponse proto.InternalMessageInfo
-
-func (m *DowngradeResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *DowngradeResponse) GetVersion() string {
- if m != nil {
- return m.Version
- }
- return ""
-}
-
-type StatusRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *StatusRequest) Reset() { *m = StatusRequest{} }
-func (m *StatusRequest) String() string { return proto.CompactTextString(m) }
-func (*StatusRequest) ProtoMessage() {}
-func (*StatusRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{59}
-}
-func (m *StatusRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *StatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_StatusRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *StatusRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_StatusRequest.Merge(m, src)
-}
-func (m *StatusRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *StatusRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_StatusRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_StatusRequest proto.InternalMessageInfo
-
-type StatusResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // version is the cluster protocol version used by the responding member.
- Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
- // dbSize is the size of the backend database physically allocated, in bytes, of the responding member.
- DbSize int64 `protobuf:"varint,3,opt,name=dbSize,proto3" json:"dbSize,omitempty"`
- // leader is the member ID which the responding member believes is the current leader.
- Leader uint64 `protobuf:"varint,4,opt,name=leader,proto3" json:"leader,omitempty"`
- // raftIndex is the current raft committed index of the responding member.
- RaftIndex uint64 `protobuf:"varint,5,opt,name=raftIndex,proto3" json:"raftIndex,omitempty"`
- // raftTerm is the current raft term of the responding member.
- RaftTerm uint64 `protobuf:"varint,6,opt,name=raftTerm,proto3" json:"raftTerm,omitempty"`
- // raftAppliedIndex is the current raft applied index of the responding member.
- RaftAppliedIndex uint64 `protobuf:"varint,7,opt,name=raftAppliedIndex,proto3" json:"raftAppliedIndex,omitempty"`
- // errors contains alarm/health information and status.
- Errors []string `protobuf:"bytes,8,rep,name=errors,proto3" json:"errors,omitempty"`
- // dbSizeInUse is the size of the backend database logically in use, in bytes, of the responding member.
- DbSizeInUse int64 `protobuf:"varint,9,opt,name=dbSizeInUse,proto3" json:"dbSizeInUse,omitempty"`
- // isLearner indicates if the member is raft learner.
- IsLearner bool `protobuf:"varint,10,opt,name=isLearner,proto3" json:"isLearner,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *StatusResponse) Reset() { *m = StatusResponse{} }
-func (m *StatusResponse) String() string { return proto.CompactTextString(m) }
-func (*StatusResponse) ProtoMessage() {}
-func (*StatusResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{60}
-}
-func (m *StatusResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *StatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_StatusResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *StatusResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_StatusResponse.Merge(m, src)
-}
-func (m *StatusResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *StatusResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_StatusResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_StatusResponse proto.InternalMessageInfo
-
-func (m *StatusResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *StatusResponse) GetVersion() string {
- if m != nil {
- return m.Version
- }
- return ""
-}
-
-func (m *StatusResponse) GetDbSize() int64 {
- if m != nil {
- return m.DbSize
- }
- return 0
-}
-
-func (m *StatusResponse) GetLeader() uint64 {
- if m != nil {
- return m.Leader
- }
- return 0
-}
-
-func (m *StatusResponse) GetRaftIndex() uint64 {
- if m != nil {
- return m.RaftIndex
- }
- return 0
-}
-
-func (m *StatusResponse) GetRaftTerm() uint64 {
- if m != nil {
- return m.RaftTerm
- }
- return 0
-}
-
-func (m *StatusResponse) GetRaftAppliedIndex() uint64 {
- if m != nil {
- return m.RaftAppliedIndex
- }
- return 0
-}
-
-func (m *StatusResponse) GetErrors() []string {
- if m != nil {
- return m.Errors
- }
- return nil
-}
-
-func (m *StatusResponse) GetDbSizeInUse() int64 {
- if m != nil {
- return m.DbSizeInUse
- }
- return 0
-}
-
-func (m *StatusResponse) GetIsLearner() bool {
- if m != nil {
- return m.IsLearner
- }
- return false
-}
-
-type AuthEnableRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthEnableRequest) Reset() { *m = AuthEnableRequest{} }
-func (m *AuthEnableRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthEnableRequest) ProtoMessage() {}
-func (*AuthEnableRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{61}
-}
-func (m *AuthEnableRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthEnableRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthEnableRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthEnableRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthEnableRequest.Merge(m, src)
-}
-func (m *AuthEnableRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthEnableRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthEnableRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthEnableRequest proto.InternalMessageInfo
-
-type AuthDisableRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthDisableRequest) Reset() { *m = AuthDisableRequest{} }
-func (m *AuthDisableRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthDisableRequest) ProtoMessage() {}
-func (*AuthDisableRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{62}
-}
-func (m *AuthDisableRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthDisableRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthDisableRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthDisableRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthDisableRequest.Merge(m, src)
-}
-func (m *AuthDisableRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthDisableRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthDisableRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthDisableRequest proto.InternalMessageInfo
-
-type AuthStatusRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthStatusRequest) Reset() { *m = AuthStatusRequest{} }
-func (m *AuthStatusRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthStatusRequest) ProtoMessage() {}
-func (*AuthStatusRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{63}
-}
-func (m *AuthStatusRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthStatusRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthStatusRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthStatusRequest.Merge(m, src)
-}
-func (m *AuthStatusRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthStatusRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthStatusRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthStatusRequest proto.InternalMessageInfo
-
-type AuthenticateRequest struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthenticateRequest) Reset() { *m = AuthenticateRequest{} }
-func (m *AuthenticateRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthenticateRequest) ProtoMessage() {}
-func (*AuthenticateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{64}
-}
-func (m *AuthenticateRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthenticateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthenticateRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthenticateRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthenticateRequest.Merge(m, src)
-}
-func (m *AuthenticateRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthenticateRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthenticateRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthenticateRequest proto.InternalMessageInfo
-
-func (m *AuthenticateRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *AuthenticateRequest) GetPassword() string {
- if m != nil {
- return m.Password
- }
- return ""
-}
-
-type AuthUserAddRequest struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
- Options *authpb.UserAddOptions `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"`
- HashedPassword string `protobuf:"bytes,4,opt,name=hashedPassword,proto3" json:"hashedPassword,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserAddRequest) Reset() { *m = AuthUserAddRequest{} }
-func (m *AuthUserAddRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthUserAddRequest) ProtoMessage() {}
-func (*AuthUserAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{65}
-}
-func (m *AuthUserAddRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserAddRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserAddRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserAddRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserAddRequest.Merge(m, src)
-}
-func (m *AuthUserAddRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserAddRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserAddRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserAddRequest proto.InternalMessageInfo
-
-func (m *AuthUserAddRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *AuthUserAddRequest) GetPassword() string {
- if m != nil {
- return m.Password
- }
- return ""
-}
-
-func (m *AuthUserAddRequest) GetOptions() *authpb.UserAddOptions {
- if m != nil {
- return m.Options
- }
- return nil
-}
-
-func (m *AuthUserAddRequest) GetHashedPassword() string {
- if m != nil {
- return m.HashedPassword
- }
- return ""
-}
-
-type AuthUserGetRequest struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserGetRequest) Reset() { *m = AuthUserGetRequest{} }
-func (m *AuthUserGetRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthUserGetRequest) ProtoMessage() {}
-func (*AuthUserGetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{66}
-}
-func (m *AuthUserGetRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserGetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserGetRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserGetRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserGetRequest.Merge(m, src)
-}
-func (m *AuthUserGetRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserGetRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserGetRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserGetRequest proto.InternalMessageInfo
-
-func (m *AuthUserGetRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-type AuthUserDeleteRequest struct {
- // name is the name of the user to delete.
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserDeleteRequest) Reset() { *m = AuthUserDeleteRequest{} }
-func (m *AuthUserDeleteRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthUserDeleteRequest) ProtoMessage() {}
-func (*AuthUserDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{67}
-}
-func (m *AuthUserDeleteRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserDeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserDeleteRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserDeleteRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserDeleteRequest.Merge(m, src)
-}
-func (m *AuthUserDeleteRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserDeleteRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserDeleteRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserDeleteRequest proto.InternalMessageInfo
-
-func (m *AuthUserDeleteRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-type AuthUserChangePasswordRequest struct {
- // name is the name of the user whose password is being changed.
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- // password is the new password for the user. Note that this field will be removed in the API layer.
- Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
- // hashedPassword is the new password for the user. Note that this field will be initialized in the API layer.
- HashedPassword string `protobuf:"bytes,3,opt,name=hashedPassword,proto3" json:"hashedPassword,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserChangePasswordRequest) Reset() { *m = AuthUserChangePasswordRequest{} }
-func (m *AuthUserChangePasswordRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthUserChangePasswordRequest) ProtoMessage() {}
-func (*AuthUserChangePasswordRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{68}
-}
-func (m *AuthUserChangePasswordRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserChangePasswordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserChangePasswordRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserChangePasswordRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserChangePasswordRequest.Merge(m, src)
-}
-func (m *AuthUserChangePasswordRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserChangePasswordRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserChangePasswordRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserChangePasswordRequest proto.InternalMessageInfo
-
-func (m *AuthUserChangePasswordRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *AuthUserChangePasswordRequest) GetPassword() string {
- if m != nil {
- return m.Password
- }
- return ""
-}
-
-func (m *AuthUserChangePasswordRequest) GetHashedPassword() string {
- if m != nil {
- return m.HashedPassword
- }
- return ""
-}
-
-type AuthUserGrantRoleRequest struct {
- // user is the name of the user which should be granted a given role.
- User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
- // role is the name of the role to grant to the user.
- Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserGrantRoleRequest) Reset() { *m = AuthUserGrantRoleRequest{} }
-func (m *AuthUserGrantRoleRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthUserGrantRoleRequest) ProtoMessage() {}
-func (*AuthUserGrantRoleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{69}
-}
-func (m *AuthUserGrantRoleRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserGrantRoleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserGrantRoleRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserGrantRoleRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserGrantRoleRequest.Merge(m, src)
-}
-func (m *AuthUserGrantRoleRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserGrantRoleRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserGrantRoleRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserGrantRoleRequest proto.InternalMessageInfo
-
-func (m *AuthUserGrantRoleRequest) GetUser() string {
- if m != nil {
- return m.User
- }
- return ""
-}
-
-func (m *AuthUserGrantRoleRequest) GetRole() string {
- if m != nil {
- return m.Role
- }
- return ""
-}
-
-type AuthUserRevokeRoleRequest struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserRevokeRoleRequest) Reset() { *m = AuthUserRevokeRoleRequest{} }
-func (m *AuthUserRevokeRoleRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthUserRevokeRoleRequest) ProtoMessage() {}
-func (*AuthUserRevokeRoleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{70}
-}
-func (m *AuthUserRevokeRoleRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserRevokeRoleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserRevokeRoleRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserRevokeRoleRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserRevokeRoleRequest.Merge(m, src)
-}
-func (m *AuthUserRevokeRoleRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserRevokeRoleRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserRevokeRoleRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserRevokeRoleRequest proto.InternalMessageInfo
-
-func (m *AuthUserRevokeRoleRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *AuthUserRevokeRoleRequest) GetRole() string {
- if m != nil {
- return m.Role
- }
- return ""
-}
-
-type AuthRoleAddRequest struct {
- // name is the name of the role to add to the authentication system.
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleAddRequest) Reset() { *m = AuthRoleAddRequest{} }
-func (m *AuthRoleAddRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleAddRequest) ProtoMessage() {}
-func (*AuthRoleAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{71}
-}
-func (m *AuthRoleAddRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleAddRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleAddRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleAddRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleAddRequest.Merge(m, src)
-}
-func (m *AuthRoleAddRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleAddRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleAddRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleAddRequest proto.InternalMessageInfo
-
-func (m *AuthRoleAddRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-type AuthRoleGetRequest struct {
- Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleGetRequest) Reset() { *m = AuthRoleGetRequest{} }
-func (m *AuthRoleGetRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleGetRequest) ProtoMessage() {}
-func (*AuthRoleGetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{72}
-}
-func (m *AuthRoleGetRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleGetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleGetRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleGetRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleGetRequest.Merge(m, src)
-}
-func (m *AuthRoleGetRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleGetRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleGetRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleGetRequest proto.InternalMessageInfo
-
-func (m *AuthRoleGetRequest) GetRole() string {
- if m != nil {
- return m.Role
- }
- return ""
-}
-
-type AuthUserListRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserListRequest) Reset() { *m = AuthUserListRequest{} }
-func (m *AuthUserListRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthUserListRequest) ProtoMessage() {}
-func (*AuthUserListRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{73}
-}
-func (m *AuthUserListRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserListRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserListRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserListRequest.Merge(m, src)
-}
-func (m *AuthUserListRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserListRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserListRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserListRequest proto.InternalMessageInfo
-
-type AuthRoleListRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleListRequest) Reset() { *m = AuthRoleListRequest{} }
-func (m *AuthRoleListRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleListRequest) ProtoMessage() {}
-func (*AuthRoleListRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{74}
-}
-func (m *AuthRoleListRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleListRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleListRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleListRequest.Merge(m, src)
-}
-func (m *AuthRoleListRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleListRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleListRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleListRequest proto.InternalMessageInfo
-
-type AuthRoleDeleteRequest struct {
- Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleDeleteRequest) Reset() { *m = AuthRoleDeleteRequest{} }
-func (m *AuthRoleDeleteRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleDeleteRequest) ProtoMessage() {}
-func (*AuthRoleDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{75}
-}
-func (m *AuthRoleDeleteRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleDeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleDeleteRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleDeleteRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleDeleteRequest.Merge(m, src)
-}
-func (m *AuthRoleDeleteRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleDeleteRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleDeleteRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleDeleteRequest proto.InternalMessageInfo
-
-func (m *AuthRoleDeleteRequest) GetRole() string {
- if m != nil {
- return m.Role
- }
- return ""
-}
-
-type AuthRoleGrantPermissionRequest struct {
- // name is the name of the role which will be granted the permission.
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- // perm is the permission to grant to the role.
- Perm *authpb.Permission `protobuf:"bytes,2,opt,name=perm,proto3" json:"perm,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleGrantPermissionRequest) Reset() { *m = AuthRoleGrantPermissionRequest{} }
-func (m *AuthRoleGrantPermissionRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleGrantPermissionRequest) ProtoMessage() {}
-func (*AuthRoleGrantPermissionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{76}
-}
-func (m *AuthRoleGrantPermissionRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleGrantPermissionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleGrantPermissionRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleGrantPermissionRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleGrantPermissionRequest.Merge(m, src)
-}
-func (m *AuthRoleGrantPermissionRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleGrantPermissionRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleGrantPermissionRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleGrantPermissionRequest proto.InternalMessageInfo
-
-func (m *AuthRoleGrantPermissionRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *AuthRoleGrantPermissionRequest) GetPerm() *authpb.Permission {
- if m != nil {
- return m.Perm
- }
- return nil
-}
-
-type AuthRoleRevokePermissionRequest struct {
- Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"`
- Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
- RangeEnd []byte `protobuf:"bytes,3,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleRevokePermissionRequest) Reset() { *m = AuthRoleRevokePermissionRequest{} }
-func (m *AuthRoleRevokePermissionRequest) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleRevokePermissionRequest) ProtoMessage() {}
-func (*AuthRoleRevokePermissionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{77}
-}
-func (m *AuthRoleRevokePermissionRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleRevokePermissionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleRevokePermissionRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleRevokePermissionRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleRevokePermissionRequest.Merge(m, src)
-}
-func (m *AuthRoleRevokePermissionRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleRevokePermissionRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleRevokePermissionRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleRevokePermissionRequest proto.InternalMessageInfo
-
-func (m *AuthRoleRevokePermissionRequest) GetRole() string {
- if m != nil {
- return m.Role
- }
- return ""
-}
-
-func (m *AuthRoleRevokePermissionRequest) GetKey() []byte {
- if m != nil {
- return m.Key
- }
- return nil
-}
-
-func (m *AuthRoleRevokePermissionRequest) GetRangeEnd() []byte {
- if m != nil {
- return m.RangeEnd
- }
- return nil
-}
-
-type AuthEnableResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthEnableResponse) Reset() { *m = AuthEnableResponse{} }
-func (m *AuthEnableResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthEnableResponse) ProtoMessage() {}
-func (*AuthEnableResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{78}
-}
-func (m *AuthEnableResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthEnableResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthEnableResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthEnableResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthEnableResponse.Merge(m, src)
-}
-func (m *AuthEnableResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthEnableResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthEnableResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthEnableResponse proto.InternalMessageInfo
-
-func (m *AuthEnableResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthDisableResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthDisableResponse) Reset() { *m = AuthDisableResponse{} }
-func (m *AuthDisableResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthDisableResponse) ProtoMessage() {}
-func (*AuthDisableResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{79}
-}
-func (m *AuthDisableResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthDisableResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthDisableResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthDisableResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthDisableResponse.Merge(m, src)
-}
-func (m *AuthDisableResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthDisableResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthDisableResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthDisableResponse proto.InternalMessageInfo
-
-func (m *AuthDisableResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthStatusResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"`
- // authRevision is the current revision of auth store
- AuthRevision uint64 `protobuf:"varint,3,opt,name=authRevision,proto3" json:"authRevision,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthStatusResponse) Reset() { *m = AuthStatusResponse{} }
-func (m *AuthStatusResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthStatusResponse) ProtoMessage() {}
-func (*AuthStatusResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{80}
-}
-func (m *AuthStatusResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthStatusResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthStatusResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthStatusResponse.Merge(m, src)
-}
-func (m *AuthStatusResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthStatusResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthStatusResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthStatusResponse proto.InternalMessageInfo
-
-func (m *AuthStatusResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *AuthStatusResponse) GetEnabled() bool {
- if m != nil {
- return m.Enabled
- }
- return false
-}
-
-func (m *AuthStatusResponse) GetAuthRevision() uint64 {
- if m != nil {
- return m.AuthRevision
- }
- return 0
-}
-
-type AuthenticateResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- // token is an authorized token that can be used in succeeding RPCs
- Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthenticateResponse) Reset() { *m = AuthenticateResponse{} }
-func (m *AuthenticateResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthenticateResponse) ProtoMessage() {}
-func (*AuthenticateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{81}
-}
-func (m *AuthenticateResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthenticateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthenticateResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthenticateResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthenticateResponse.Merge(m, src)
-}
-func (m *AuthenticateResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthenticateResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthenticateResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthenticateResponse proto.InternalMessageInfo
-
-func (m *AuthenticateResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *AuthenticateResponse) GetToken() string {
- if m != nil {
- return m.Token
- }
- return ""
-}
-
-type AuthUserAddResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserAddResponse) Reset() { *m = AuthUserAddResponse{} }
-func (m *AuthUserAddResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthUserAddResponse) ProtoMessage() {}
-func (*AuthUserAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{82}
-}
-func (m *AuthUserAddResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserAddResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserAddResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserAddResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserAddResponse.Merge(m, src)
-}
-func (m *AuthUserAddResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserAddResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserAddResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserAddResponse proto.InternalMessageInfo
-
-func (m *AuthUserAddResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthUserGetResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- Roles []string `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserGetResponse) Reset() { *m = AuthUserGetResponse{} }
-func (m *AuthUserGetResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthUserGetResponse) ProtoMessage() {}
-func (*AuthUserGetResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{83}
-}
-func (m *AuthUserGetResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserGetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserGetResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserGetResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserGetResponse.Merge(m, src)
-}
-func (m *AuthUserGetResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserGetResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserGetResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserGetResponse proto.InternalMessageInfo
-
-func (m *AuthUserGetResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *AuthUserGetResponse) GetRoles() []string {
- if m != nil {
- return m.Roles
- }
- return nil
-}
-
-type AuthUserDeleteResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserDeleteResponse) Reset() { *m = AuthUserDeleteResponse{} }
-func (m *AuthUserDeleteResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthUserDeleteResponse) ProtoMessage() {}
-func (*AuthUserDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{84}
-}
-func (m *AuthUserDeleteResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserDeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserDeleteResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserDeleteResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserDeleteResponse.Merge(m, src)
-}
-func (m *AuthUserDeleteResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserDeleteResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserDeleteResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserDeleteResponse proto.InternalMessageInfo
-
-func (m *AuthUserDeleteResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthUserChangePasswordResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserChangePasswordResponse) Reset() { *m = AuthUserChangePasswordResponse{} }
-func (m *AuthUserChangePasswordResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthUserChangePasswordResponse) ProtoMessage() {}
-func (*AuthUserChangePasswordResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{85}
-}
-func (m *AuthUserChangePasswordResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserChangePasswordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserChangePasswordResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserChangePasswordResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserChangePasswordResponse.Merge(m, src)
-}
-func (m *AuthUserChangePasswordResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserChangePasswordResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserChangePasswordResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserChangePasswordResponse proto.InternalMessageInfo
-
-func (m *AuthUserChangePasswordResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthUserGrantRoleResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserGrantRoleResponse) Reset() { *m = AuthUserGrantRoleResponse{} }
-func (m *AuthUserGrantRoleResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthUserGrantRoleResponse) ProtoMessage() {}
-func (*AuthUserGrantRoleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{86}
-}
-func (m *AuthUserGrantRoleResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserGrantRoleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserGrantRoleResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserGrantRoleResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserGrantRoleResponse.Merge(m, src)
-}
-func (m *AuthUserGrantRoleResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserGrantRoleResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserGrantRoleResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserGrantRoleResponse proto.InternalMessageInfo
-
-func (m *AuthUserGrantRoleResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthUserRevokeRoleResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserRevokeRoleResponse) Reset() { *m = AuthUserRevokeRoleResponse{} }
-func (m *AuthUserRevokeRoleResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthUserRevokeRoleResponse) ProtoMessage() {}
-func (*AuthUserRevokeRoleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{87}
-}
-func (m *AuthUserRevokeRoleResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserRevokeRoleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserRevokeRoleResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserRevokeRoleResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserRevokeRoleResponse.Merge(m, src)
-}
-func (m *AuthUserRevokeRoleResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserRevokeRoleResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserRevokeRoleResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserRevokeRoleResponse proto.InternalMessageInfo
-
-func (m *AuthUserRevokeRoleResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthRoleAddResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleAddResponse) Reset() { *m = AuthRoleAddResponse{} }
-func (m *AuthRoleAddResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleAddResponse) ProtoMessage() {}
-func (*AuthRoleAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{88}
-}
-func (m *AuthRoleAddResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleAddResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleAddResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleAddResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleAddResponse.Merge(m, src)
-}
-func (m *AuthRoleAddResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleAddResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleAddResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleAddResponse proto.InternalMessageInfo
-
-func (m *AuthRoleAddResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthRoleGetResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- Perm []*authpb.Permission `protobuf:"bytes,2,rep,name=perm,proto3" json:"perm,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleGetResponse) Reset() { *m = AuthRoleGetResponse{} }
-func (m *AuthRoleGetResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleGetResponse) ProtoMessage() {}
-func (*AuthRoleGetResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{89}
-}
-func (m *AuthRoleGetResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleGetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleGetResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleGetResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleGetResponse.Merge(m, src)
-}
-func (m *AuthRoleGetResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleGetResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleGetResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleGetResponse proto.InternalMessageInfo
-
-func (m *AuthRoleGetResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *AuthRoleGetResponse) GetPerm() []*authpb.Permission {
- if m != nil {
- return m.Perm
- }
- return nil
-}
-
-type AuthRoleListResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- Roles []string `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleListResponse) Reset() { *m = AuthRoleListResponse{} }
-func (m *AuthRoleListResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleListResponse) ProtoMessage() {}
-func (*AuthRoleListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{90}
-}
-func (m *AuthRoleListResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleListResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleListResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleListResponse.Merge(m, src)
-}
-func (m *AuthRoleListResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleListResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleListResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleListResponse proto.InternalMessageInfo
-
-func (m *AuthRoleListResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *AuthRoleListResponse) GetRoles() []string {
- if m != nil {
- return m.Roles
- }
- return nil
-}
-
-type AuthUserListResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- Users []string `protobuf:"bytes,2,rep,name=users,proto3" json:"users,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthUserListResponse) Reset() { *m = AuthUserListResponse{} }
-func (m *AuthUserListResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthUserListResponse) ProtoMessage() {}
-func (*AuthUserListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{91}
-}
-func (m *AuthUserListResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthUserListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthUserListResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthUserListResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthUserListResponse.Merge(m, src)
-}
-func (m *AuthUserListResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthUserListResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthUserListResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthUserListResponse proto.InternalMessageInfo
-
-func (m *AuthUserListResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func (m *AuthUserListResponse) GetUsers() []string {
- if m != nil {
- return m.Users
- }
- return nil
-}
-
-type AuthRoleDeleteResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleDeleteResponse) Reset() { *m = AuthRoleDeleteResponse{} }
-func (m *AuthRoleDeleteResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleDeleteResponse) ProtoMessage() {}
-func (*AuthRoleDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{92}
-}
-func (m *AuthRoleDeleteResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleDeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleDeleteResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleDeleteResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleDeleteResponse.Merge(m, src)
-}
-func (m *AuthRoleDeleteResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleDeleteResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleDeleteResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleDeleteResponse proto.InternalMessageInfo
-
-func (m *AuthRoleDeleteResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthRoleGrantPermissionResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleGrantPermissionResponse) Reset() { *m = AuthRoleGrantPermissionResponse{} }
-func (m *AuthRoleGrantPermissionResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleGrantPermissionResponse) ProtoMessage() {}
-func (*AuthRoleGrantPermissionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{93}
-}
-func (m *AuthRoleGrantPermissionResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleGrantPermissionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleGrantPermissionResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleGrantPermissionResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleGrantPermissionResponse.Merge(m, src)
-}
-func (m *AuthRoleGrantPermissionResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleGrantPermissionResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleGrantPermissionResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleGrantPermissionResponse proto.InternalMessageInfo
-
-func (m *AuthRoleGrantPermissionResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-type AuthRoleRevokePermissionResponse struct {
- Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AuthRoleRevokePermissionResponse) Reset() { *m = AuthRoleRevokePermissionResponse{} }
-func (m *AuthRoleRevokePermissionResponse) String() string { return proto.CompactTextString(m) }
-func (*AuthRoleRevokePermissionResponse) ProtoMessage() {}
-func (*AuthRoleRevokePermissionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_77a6da22d6a3feb1, []int{94}
-}
-func (m *AuthRoleRevokePermissionResponse) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *AuthRoleRevokePermissionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_AuthRoleRevokePermissionResponse.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *AuthRoleRevokePermissionResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AuthRoleRevokePermissionResponse.Merge(m, src)
-}
-func (m *AuthRoleRevokePermissionResponse) XXX_Size() int {
- return m.Size()
-}
-func (m *AuthRoleRevokePermissionResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AuthRoleRevokePermissionResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AuthRoleRevokePermissionResponse proto.InternalMessageInfo
-
-func (m *AuthRoleRevokePermissionResponse) GetHeader() *ResponseHeader {
- if m != nil {
- return m.Header
- }
- return nil
-}
-
-func init() {
- proto.RegisterEnum("etcdserverpb.AlarmType", AlarmType_name, AlarmType_value)
- proto.RegisterEnum("etcdserverpb.RangeRequest_SortOrder", RangeRequest_SortOrder_name, RangeRequest_SortOrder_value)
- proto.RegisterEnum("etcdserverpb.RangeRequest_SortTarget", RangeRequest_SortTarget_name, RangeRequest_SortTarget_value)
- proto.RegisterEnum("etcdserverpb.Compare_CompareResult", Compare_CompareResult_name, Compare_CompareResult_value)
- proto.RegisterEnum("etcdserverpb.Compare_CompareTarget", Compare_CompareTarget_name, Compare_CompareTarget_value)
- proto.RegisterEnum("etcdserverpb.WatchCreateRequest_FilterType", WatchCreateRequest_FilterType_name, WatchCreateRequest_FilterType_value)
- proto.RegisterEnum("etcdserverpb.AlarmRequest_AlarmAction", AlarmRequest_AlarmAction_name, AlarmRequest_AlarmAction_value)
- proto.RegisterEnum("etcdserverpb.DowngradeRequest_DowngradeAction", DowngradeRequest_DowngradeAction_name, DowngradeRequest_DowngradeAction_value)
- proto.RegisterType((*ResponseHeader)(nil), "etcdserverpb.ResponseHeader")
- proto.RegisterType((*RangeRequest)(nil), "etcdserverpb.RangeRequest")
- proto.RegisterType((*RangeResponse)(nil), "etcdserverpb.RangeResponse")
- proto.RegisterType((*PutRequest)(nil), "etcdserverpb.PutRequest")
- proto.RegisterType((*PutResponse)(nil), "etcdserverpb.PutResponse")
- proto.RegisterType((*DeleteRangeRequest)(nil), "etcdserverpb.DeleteRangeRequest")
- proto.RegisterType((*DeleteRangeResponse)(nil), "etcdserverpb.DeleteRangeResponse")
- proto.RegisterType((*RequestOp)(nil), "etcdserverpb.RequestOp")
- proto.RegisterType((*ResponseOp)(nil), "etcdserverpb.ResponseOp")
- proto.RegisterType((*Compare)(nil), "etcdserverpb.Compare")
- proto.RegisterType((*TxnRequest)(nil), "etcdserverpb.TxnRequest")
- proto.RegisterType((*TxnResponse)(nil), "etcdserverpb.TxnResponse")
- proto.RegisterType((*CompactionRequest)(nil), "etcdserverpb.CompactionRequest")
- proto.RegisterType((*CompactionResponse)(nil), "etcdserverpb.CompactionResponse")
- proto.RegisterType((*HashRequest)(nil), "etcdserverpb.HashRequest")
- proto.RegisterType((*HashKVRequest)(nil), "etcdserverpb.HashKVRequest")
- proto.RegisterType((*HashKVResponse)(nil), "etcdserverpb.HashKVResponse")
- proto.RegisterType((*HashResponse)(nil), "etcdserverpb.HashResponse")
- proto.RegisterType((*SnapshotRequest)(nil), "etcdserverpb.SnapshotRequest")
- proto.RegisterType((*SnapshotResponse)(nil), "etcdserverpb.SnapshotResponse")
- proto.RegisterType((*WatchRequest)(nil), "etcdserverpb.WatchRequest")
- proto.RegisterType((*WatchCreateRequest)(nil), "etcdserverpb.WatchCreateRequest")
- proto.RegisterType((*WatchCancelRequest)(nil), "etcdserverpb.WatchCancelRequest")
- proto.RegisterType((*WatchProgressRequest)(nil), "etcdserverpb.WatchProgressRequest")
- proto.RegisterType((*WatchResponse)(nil), "etcdserverpb.WatchResponse")
- proto.RegisterType((*LeaseGrantRequest)(nil), "etcdserverpb.LeaseGrantRequest")
- proto.RegisterType((*LeaseGrantResponse)(nil), "etcdserverpb.LeaseGrantResponse")
- proto.RegisterType((*LeaseRevokeRequest)(nil), "etcdserverpb.LeaseRevokeRequest")
- proto.RegisterType((*LeaseRevokeResponse)(nil), "etcdserverpb.LeaseRevokeResponse")
- proto.RegisterType((*LeaseCheckpoint)(nil), "etcdserverpb.LeaseCheckpoint")
- proto.RegisterType((*LeaseCheckpointRequest)(nil), "etcdserverpb.LeaseCheckpointRequest")
- proto.RegisterType((*LeaseCheckpointResponse)(nil), "etcdserverpb.LeaseCheckpointResponse")
- proto.RegisterType((*LeaseKeepAliveRequest)(nil), "etcdserverpb.LeaseKeepAliveRequest")
- proto.RegisterType((*LeaseKeepAliveResponse)(nil), "etcdserverpb.LeaseKeepAliveResponse")
- proto.RegisterType((*LeaseTimeToLiveRequest)(nil), "etcdserverpb.LeaseTimeToLiveRequest")
- proto.RegisterType((*LeaseTimeToLiveResponse)(nil), "etcdserverpb.LeaseTimeToLiveResponse")
- proto.RegisterType((*LeaseLeasesRequest)(nil), "etcdserverpb.LeaseLeasesRequest")
- proto.RegisterType((*LeaseStatus)(nil), "etcdserverpb.LeaseStatus")
- proto.RegisterType((*LeaseLeasesResponse)(nil), "etcdserverpb.LeaseLeasesResponse")
- proto.RegisterType((*Member)(nil), "etcdserverpb.Member")
- proto.RegisterType((*MemberAddRequest)(nil), "etcdserverpb.MemberAddRequest")
- proto.RegisterType((*MemberAddResponse)(nil), "etcdserverpb.MemberAddResponse")
- proto.RegisterType((*MemberRemoveRequest)(nil), "etcdserverpb.MemberRemoveRequest")
- proto.RegisterType((*MemberRemoveResponse)(nil), "etcdserverpb.MemberRemoveResponse")
- proto.RegisterType((*MemberUpdateRequest)(nil), "etcdserverpb.MemberUpdateRequest")
- proto.RegisterType((*MemberUpdateResponse)(nil), "etcdserverpb.MemberUpdateResponse")
- proto.RegisterType((*MemberListRequest)(nil), "etcdserverpb.MemberListRequest")
- proto.RegisterType((*MemberListResponse)(nil), "etcdserverpb.MemberListResponse")
- proto.RegisterType((*MemberPromoteRequest)(nil), "etcdserverpb.MemberPromoteRequest")
- proto.RegisterType((*MemberPromoteResponse)(nil), "etcdserverpb.MemberPromoteResponse")
- proto.RegisterType((*DefragmentRequest)(nil), "etcdserverpb.DefragmentRequest")
- proto.RegisterType((*DefragmentResponse)(nil), "etcdserverpb.DefragmentResponse")
- proto.RegisterType((*MoveLeaderRequest)(nil), "etcdserverpb.MoveLeaderRequest")
- proto.RegisterType((*MoveLeaderResponse)(nil), "etcdserverpb.MoveLeaderResponse")
- proto.RegisterType((*AlarmRequest)(nil), "etcdserverpb.AlarmRequest")
- proto.RegisterType((*AlarmMember)(nil), "etcdserverpb.AlarmMember")
- proto.RegisterType((*AlarmResponse)(nil), "etcdserverpb.AlarmResponse")
- proto.RegisterType((*DowngradeRequest)(nil), "etcdserverpb.DowngradeRequest")
- proto.RegisterType((*DowngradeResponse)(nil), "etcdserverpb.DowngradeResponse")
- proto.RegisterType((*StatusRequest)(nil), "etcdserverpb.StatusRequest")
- proto.RegisterType((*StatusResponse)(nil), "etcdserverpb.StatusResponse")
- proto.RegisterType((*AuthEnableRequest)(nil), "etcdserverpb.AuthEnableRequest")
- proto.RegisterType((*AuthDisableRequest)(nil), "etcdserverpb.AuthDisableRequest")
- proto.RegisterType((*AuthStatusRequest)(nil), "etcdserverpb.AuthStatusRequest")
- proto.RegisterType((*AuthenticateRequest)(nil), "etcdserverpb.AuthenticateRequest")
- proto.RegisterType((*AuthUserAddRequest)(nil), "etcdserverpb.AuthUserAddRequest")
- proto.RegisterType((*AuthUserGetRequest)(nil), "etcdserverpb.AuthUserGetRequest")
- proto.RegisterType((*AuthUserDeleteRequest)(nil), "etcdserverpb.AuthUserDeleteRequest")
- proto.RegisterType((*AuthUserChangePasswordRequest)(nil), "etcdserverpb.AuthUserChangePasswordRequest")
- proto.RegisterType((*AuthUserGrantRoleRequest)(nil), "etcdserverpb.AuthUserGrantRoleRequest")
- proto.RegisterType((*AuthUserRevokeRoleRequest)(nil), "etcdserverpb.AuthUserRevokeRoleRequest")
- proto.RegisterType((*AuthRoleAddRequest)(nil), "etcdserverpb.AuthRoleAddRequest")
- proto.RegisterType((*AuthRoleGetRequest)(nil), "etcdserverpb.AuthRoleGetRequest")
- proto.RegisterType((*AuthUserListRequest)(nil), "etcdserverpb.AuthUserListRequest")
- proto.RegisterType((*AuthRoleListRequest)(nil), "etcdserverpb.AuthRoleListRequest")
- proto.RegisterType((*AuthRoleDeleteRequest)(nil), "etcdserverpb.AuthRoleDeleteRequest")
- proto.RegisterType((*AuthRoleGrantPermissionRequest)(nil), "etcdserverpb.AuthRoleGrantPermissionRequest")
- proto.RegisterType((*AuthRoleRevokePermissionRequest)(nil), "etcdserverpb.AuthRoleRevokePermissionRequest")
- proto.RegisterType((*AuthEnableResponse)(nil), "etcdserverpb.AuthEnableResponse")
- proto.RegisterType((*AuthDisableResponse)(nil), "etcdserverpb.AuthDisableResponse")
- proto.RegisterType((*AuthStatusResponse)(nil), "etcdserverpb.AuthStatusResponse")
- proto.RegisterType((*AuthenticateResponse)(nil), "etcdserverpb.AuthenticateResponse")
- proto.RegisterType((*AuthUserAddResponse)(nil), "etcdserverpb.AuthUserAddResponse")
- proto.RegisterType((*AuthUserGetResponse)(nil), "etcdserverpb.AuthUserGetResponse")
- proto.RegisterType((*AuthUserDeleteResponse)(nil), "etcdserverpb.AuthUserDeleteResponse")
- proto.RegisterType((*AuthUserChangePasswordResponse)(nil), "etcdserverpb.AuthUserChangePasswordResponse")
- proto.RegisterType((*AuthUserGrantRoleResponse)(nil), "etcdserverpb.AuthUserGrantRoleResponse")
- proto.RegisterType((*AuthUserRevokeRoleResponse)(nil), "etcdserverpb.AuthUserRevokeRoleResponse")
- proto.RegisterType((*AuthRoleAddResponse)(nil), "etcdserverpb.AuthRoleAddResponse")
- proto.RegisterType((*AuthRoleGetResponse)(nil), "etcdserverpb.AuthRoleGetResponse")
- proto.RegisterType((*AuthRoleListResponse)(nil), "etcdserverpb.AuthRoleListResponse")
- proto.RegisterType((*AuthUserListResponse)(nil), "etcdserverpb.AuthUserListResponse")
- proto.RegisterType((*AuthRoleDeleteResponse)(nil), "etcdserverpb.AuthRoleDeleteResponse")
- proto.RegisterType((*AuthRoleGrantPermissionResponse)(nil), "etcdserverpb.AuthRoleGrantPermissionResponse")
- proto.RegisterType((*AuthRoleRevokePermissionResponse)(nil), "etcdserverpb.AuthRoleRevokePermissionResponse")
-}
-
-func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
-
-var fileDescriptor_77a6da22d6a3feb1 = []byte{
- // 4107 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5b, 0x5b, 0x73, 0x1b, 0xc9,
- 0x75, 0xe6, 0x00, 0xc4, 0xed, 0xe0, 0x42, 0xb0, 0x79, 0x11, 0x84, 0x95, 0x28, 0x6e, 0x6b, 0xa5,
- 0xe5, 0x4a, 0xbb, 0xc4, 0x9a, 0xb6, 0xb3, 0x55, 0x4a, 0xe2, 0x18, 0x22, 0xb1, 0x12, 0x97, 0x14,
- 0xc9, 0x1d, 0x42, 0xda, 0x4b, 0xb9, 0xc2, 0x1a, 0x02, 0x2d, 0x72, 0x42, 0x60, 0x06, 0x9e, 0x19,
- 0x40, 0xe4, 0xe6, 0xe2, 0x94, 0xcb, 0x71, 0x25, 0xaf, 0x76, 0x55, 0x2a, 0x79, 0x48, 0x5e, 0x52,
- 0x29, 0x97, 0x1f, 0xfc, 0x9c, 0xbf, 0x90, 0xa7, 0x5c, 0x2a, 0x7f, 0x20, 0xb5, 0xf1, 0x4b, 0xf2,
- 0x23, 0x52, 0xae, 0xbe, 0xcd, 0xf4, 0xdc, 0x40, 0xd9, 0xd8, 0xdd, 0x17, 0x11, 0x7d, 0xfa, 0xf4,
- 0xf9, 0x4e, 0x9f, 0xee, 0x3e, 0xe7, 0xf4, 0xe9, 0x11, 0x94, 0x9c, 0x51, 0x6f, 0x73, 0xe4, 0xd8,
- 0x9e, 0x8d, 0x2a, 0xc4, 0xeb, 0xf5, 0x5d, 0xe2, 0x4c, 0x88, 0x33, 0x3a, 0x6d, 0x2e, 0x9f, 0xd9,
- 0x67, 0x36, 0xeb, 0x68, 0xd1, 0x5f, 0x9c, 0xa7, 0xd9, 0xa0, 0x3c, 0x2d, 0x63, 0x64, 0xb6, 0x86,
- 0x93, 0x5e, 0x6f, 0x74, 0xda, 0xba, 0x98, 0x88, 0x9e, 0xa6, 0xdf, 0x63, 0x8c, 0xbd, 0xf3, 0xd1,
- 0x29, 0xfb, 0x23, 0xfa, 0x6e, 0x9d, 0xd9, 0xf6, 0xd9, 0x80, 0xf0, 0x5e, 0xcb, 0xb2, 0x3d, 0xc3,
- 0x33, 0x6d, 0xcb, 0xe5, 0xbd, 0xf8, 0xaf, 0x34, 0xa8, 0xe9, 0xc4, 0x1d, 0xd9, 0x96, 0x4b, 0x9e,
- 0x12, 0xa3, 0x4f, 0x1c, 0x74, 0x1b, 0xa0, 0x37, 0x18, 0xbb, 0x1e, 0x71, 0x4e, 0xcc, 0x7e, 0x43,
- 0x5b, 0xd7, 0x36, 0xe6, 0xf5, 0x92, 0xa0, 0xec, 0xf6, 0xd1, 0x1b, 0x50, 0x1a, 0x92, 0xe1, 0x29,
- 0xef, 0xcd, 0xb0, 0xde, 0x22, 0x27, 0xec, 0xf6, 0x51, 0x13, 0x8a, 0x0e, 0x99, 0x98, 0xae, 0x69,
- 0x5b, 0x8d, 0xec, 0xba, 0xb6, 0x91, 0xd5, 0xfd, 0x36, 0x1d, 0xe8, 0x18, 0x2f, 0xbd, 0x13, 0x8f,
- 0x38, 0xc3, 0xc6, 0x3c, 0x1f, 0x48, 0x09, 0x5d, 0xe2, 0x0c, 0xf1, 0x4f, 0x72, 0x50, 0xd1, 0x0d,
- 0xeb, 0x8c, 0xe8, 0xe4, 0x87, 0x63, 0xe2, 0x7a, 0xa8, 0x0e, 0xd9, 0x0b, 0x72, 0xc5, 0xe0, 0x2b,
- 0x3a, 0xfd, 0xc9, 0xc7, 0x5b, 0x67, 0xe4, 0x84, 0x58, 0x1c, 0xb8, 0x42, 0xc7, 0x5b, 0x67, 0xa4,
- 0x63, 0xf5, 0xd1, 0x32, 0xe4, 0x06, 0xe6, 0xd0, 0xf4, 0x04, 0x2a, 0x6f, 0x84, 0xd4, 0x99, 0x8f,
- 0xa8, 0xb3, 0x0d, 0xe0, 0xda, 0x8e, 0x77, 0x62, 0x3b, 0x7d, 0xe2, 0x34, 0x72, 0xeb, 0xda, 0x46,
- 0x6d, 0xeb, 0xad, 0x4d, 0x75, 0x19, 0x36, 0x55, 0x85, 0x36, 0x8f, 0x6d, 0xc7, 0x3b, 0xa4, 0xbc,
- 0x7a, 0xc9, 0x95, 0x3f, 0xd1, 0x87, 0x50, 0x66, 0x42, 0x3c, 0xc3, 0x39, 0x23, 0x5e, 0x23, 0xcf,
- 0xa4, 0xdc, 0xbb, 0x46, 0x4a, 0x97, 0x31, 0xeb, 0x0c, 0x9e, 0xff, 0x46, 0x18, 0x2a, 0x2e, 0x71,
- 0x4c, 0x63, 0x60, 0x7e, 0x61, 0x9c, 0x0e, 0x48, 0xa3, 0xb0, 0xae, 0x6d, 0x14, 0xf5, 0x10, 0x8d,
- 0xce, 0xff, 0x82, 0x5c, 0xb9, 0x27, 0xb6, 0x35, 0xb8, 0x6a, 0x14, 0x19, 0x43, 0x91, 0x12, 0x0e,
- 0xad, 0xc1, 0x15, 0x5b, 0x34, 0x7b, 0x6c, 0x79, 0xbc, 0xb7, 0xc4, 0x7a, 0x4b, 0x8c, 0xc2, 0xba,
- 0x37, 0xa0, 0x3e, 0x34, 0xad, 0x93, 0xa1, 0xdd, 0x3f, 0xf1, 0x0d, 0x02, 0xcc, 0x20, 0xb5, 0xa1,
- 0x69, 0x3d, 0xb3, 0xfb, 0xba, 0x34, 0x0b, 0xe5, 0x34, 0x2e, 0xc3, 0x9c, 0x65, 0xc1, 0x69, 0x5c,
- 0xaa, 0x9c, 0x9b, 0xb0, 0x44, 0x65, 0xf6, 0x1c, 0x62, 0x78, 0x24, 0x60, 0xae, 0x30, 0xe6, 0xc5,
- 0xa1, 0x69, 0x6d, 0xb3, 0x9e, 0x10, 0xbf, 0x71, 0x19, 0xe3, 0xaf, 0x0a, 0x7e, 0xe3, 0x32, 0xcc,
- 0x8f, 0x37, 0xa1, 0xe4, 0xdb, 0x1c, 0x15, 0x61, 0xfe, 0xe0, 0xf0, 0xa0, 0x53, 0x9f, 0x43, 0x00,
- 0xf9, 0xf6, 0xf1, 0x76, 0xe7, 0x60, 0xa7, 0xae, 0xa1, 0x32, 0x14, 0x76, 0x3a, 0xbc, 0x91, 0xc1,
- 0x8f, 0x01, 0x02, 0xeb, 0xa2, 0x02, 0x64, 0xf7, 0x3a, 0x9f, 0xd5, 0xe7, 0x28, 0xcf, 0x8b, 0x8e,
- 0x7e, 0xbc, 0x7b, 0x78, 0x50, 0xd7, 0xe8, 0xe0, 0x6d, 0xbd, 0xd3, 0xee, 0x76, 0xea, 0x19, 0xca,
- 0xf1, 0xec, 0x70, 0xa7, 0x9e, 0x45, 0x25, 0xc8, 0xbd, 0x68, 0xef, 0x3f, 0xef, 0xd4, 0xe7, 0xf1,
- 0xcf, 0x35, 0xa8, 0x8a, 0xf5, 0xe2, 0x67, 0x02, 0x7d, 0x07, 0xf2, 0xe7, 0xec, 0x5c, 0xb0, 0xad,
- 0x58, 0xde, 0xba, 0x15, 0x59, 0xdc, 0xd0, 0xd9, 0xd1, 0x05, 0x2f, 0xc2, 0x90, 0xbd, 0x98, 0xb8,
- 0x8d, 0xcc, 0x7a, 0x76, 0xa3, 0xbc, 0x55, 0xdf, 0xe4, 0xe7, 0x75, 0x73, 0x8f, 0x5c, 0xbd, 0x30,
- 0x06, 0x63, 0xa2, 0xd3, 0x4e, 0x84, 0x60, 0x7e, 0x68, 0x3b, 0x84, 0xed, 0xd8, 0xa2, 0xce, 0x7e,
- 0xd3, 0x6d, 0xcc, 0x16, 0x4d, 0xec, 0x56, 0xde, 0xc0, 0xbf, 0xd4, 0x00, 0x8e, 0xc6, 0x5e, 0xfa,
- 0xd1, 0x58, 0x86, 0xdc, 0x84, 0x0a, 0x16, 0xc7, 0x82, 0x37, 0xd8, 0x99, 0x20, 0x86, 0x4b, 0xfc,
- 0x33, 0x41, 0x1b, 0xe8, 0x06, 0x14, 0x46, 0x0e, 0x99, 0x9c, 0x5c, 0x4c, 0x18, 0x48, 0x51, 0xcf,
- 0xd3, 0xe6, 0xde, 0x04, 0xbd, 0x09, 0x15, 0xf3, 0xcc, 0xb2, 0x1d, 0x72, 0xc2, 0x65, 0xe5, 0x58,
- 0x6f, 0x99, 0xd3, 0x98, 0xde, 0x0a, 0x0b, 0x17, 0x9c, 0x57, 0x59, 0xf6, 0x29, 0x09, 0x5b, 0x50,
- 0x66, 0xaa, 0xce, 0x64, 0xbe, 0x77, 0x02, 0x1d, 0x33, 0x6c, 0x58, 0xdc, 0x84, 0x42, 0x6b, 0xfc,
- 0x03, 0x40, 0x3b, 0x64, 0x40, 0x3c, 0x32, 0x8b, 0xf7, 0x50, 0x6c, 0x92, 0x55, 0x6d, 0x82, 0x7f,
- 0xa6, 0xc1, 0x52, 0x48, 0xfc, 0x4c, 0xd3, 0x6a, 0x40, 0xa1, 0xcf, 0x84, 0x71, 0x0d, 0xb2, 0xba,
- 0x6c, 0xa2, 0x87, 0x50, 0x14, 0x0a, 0xb8, 0x8d, 0x6c, 0xca, 0xa6, 0x29, 0x70, 0x9d, 0x5c, 0xfc,
- 0xcb, 0x0c, 0x94, 0xc4, 0x44, 0x0f, 0x47, 0xa8, 0x0d, 0x55, 0x87, 0x37, 0x4e, 0xd8, 0x7c, 0x84,
- 0x46, 0xcd, 0x74, 0x27, 0xf4, 0x74, 0x4e, 0xaf, 0x88, 0x21, 0x8c, 0x8c, 0x7e, 0x1f, 0xca, 0x52,
- 0xc4, 0x68, 0xec, 0x09, 0x93, 0x37, 0xc2, 0x02, 0x82, 0xfd, 0xf7, 0x74, 0x4e, 0x07, 0xc1, 0x7e,
- 0x34, 0xf6, 0x50, 0x17, 0x96, 0xe5, 0x60, 0x3e, 0x1b, 0xa1, 0x46, 0x96, 0x49, 0x59, 0x0f, 0x4b,
- 0x89, 0x2f, 0xd5, 0xd3, 0x39, 0x1d, 0x89, 0xf1, 0x4a, 0xa7, 0xaa, 0x92, 0x77, 0xc9, 0x9d, 0x77,
- 0x4c, 0xa5, 0xee, 0xa5, 0x15, 0x57, 0xa9, 0x7b, 0x69, 0x3d, 0x2e, 0x41, 0x41, 0xb4, 0xf0, 0xbf,
- 0x64, 0x00, 0xe4, 0x6a, 0x1c, 0x8e, 0xd0, 0x0e, 0xd4, 0x1c, 0xd1, 0x0a, 0x59, 0xeb, 0x8d, 0x44,
- 0x6b, 0x89, 0x45, 0x9c, 0xd3, 0xab, 0x72, 0x10, 0x57, 0xee, 0x7b, 0x50, 0xf1, 0xa5, 0x04, 0x06,
- 0xbb, 0x99, 0x60, 0x30, 0x5f, 0x42, 0x59, 0x0e, 0xa0, 0x26, 0xfb, 0x04, 0x56, 0xfc, 0xf1, 0x09,
- 0x36, 0x7b, 0x73, 0x8a, 0xcd, 0x7c, 0x81, 0x4b, 0x52, 0x82, 0x6a, 0x35, 0x55, 0xb1, 0xc0, 0x6c,
- 0x37, 0x13, 0xcc, 0x16, 0x57, 0x8c, 0x1a, 0x0e, 0x68, 0xbc, 0xe4, 0x4d, 0xfc, 0xbf, 0x59, 0x28,
- 0x6c, 0xdb, 0xc3, 0x91, 0xe1, 0xd0, 0xd5, 0xc8, 0x3b, 0xc4, 0x1d, 0x0f, 0x3c, 0x66, 0xae, 0xda,
- 0xd6, 0xdd, 0xb0, 0x44, 0xc1, 0x26, 0xff, 0xea, 0x8c, 0x55, 0x17, 0x43, 0xe8, 0x60, 0x11, 0x1e,
- 0x33, 0xaf, 0x31, 0x58, 0x04, 0x47, 0x31, 0x44, 0x1e, 0xe4, 0x6c, 0x70, 0x90, 0x9b, 0x50, 0x98,
- 0x10, 0x27, 0x08, 0xe9, 0x4f, 0xe7, 0x74, 0x49, 0x40, 0xef, 0xc0, 0x42, 0x34, 0xbc, 0xe4, 0x04,
- 0x4f, 0xad, 0x17, 0x8e, 0x46, 0x77, 0xa1, 0x12, 0x8a, 0x71, 0x79, 0xc1, 0x57, 0x1e, 0x2a, 0x21,
- 0x6e, 0x55, 0xfa, 0x55, 0x1a, 0x8f, 0x2b, 0x4f, 0xe7, 0xa4, 0x67, 0x5d, 0x95, 0x9e, 0xb5, 0x28,
- 0x46, 0x09, 0xdf, 0x1a, 0x72, 0x32, 0xdf, 0x0f, 0x3b, 0x19, 0xfc, 0x7d, 0xa8, 0x86, 0x0c, 0x44,
- 0xe3, 0x4e, 0xe7, 0xe3, 0xe7, 0xed, 0x7d, 0x1e, 0xa4, 0x9e, 0xb0, 0xb8, 0xa4, 0xd7, 0x35, 0x1a,
- 0xeb, 0xf6, 0x3b, 0xc7, 0xc7, 0xf5, 0x0c, 0xaa, 0x42, 0xe9, 0xe0, 0xb0, 0x7b, 0xc2, 0xb9, 0xb2,
- 0xf8, 0x89, 0x2f, 0x41, 0x04, 0x39, 0x25, 0xb6, 0xcd, 0x29, 0xb1, 0x4d, 0x93, 0xb1, 0x2d, 0x13,
- 0xc4, 0x36, 0x16, 0xe6, 0xf6, 0x3b, 0xed, 0xe3, 0x4e, 0x7d, 0xfe, 0x71, 0x0d, 0x2a, 0xdc, 0xbe,
- 0x27, 0x63, 0x8b, 0x86, 0xda, 0x7f, 0xd2, 0x00, 0x82, 0xd3, 0x84, 0x5a, 0x50, 0xe8, 0x71, 0x9c,
- 0x86, 0xc6, 0x9c, 0xd1, 0x4a, 0xe2, 0x92, 0xe9, 0x92, 0x0b, 0x7d, 0x0b, 0x0a, 0xee, 0xb8, 0xd7,
- 0x23, 0xae, 0x0c, 0x79, 0x37, 0xa2, 0xfe, 0x50, 0x78, 0x2b, 0x5d, 0xf2, 0xd1, 0x21, 0x2f, 0x0d,
- 0x73, 0x30, 0x66, 0x01, 0x70, 0xfa, 0x10, 0xc1, 0x87, 0xff, 0x5e, 0x83, 0xb2, 0xb2, 0x79, 0x7f,
- 0x47, 0x27, 0x7c, 0x0b, 0x4a, 0x4c, 0x07, 0xd2, 0x17, 0x6e, 0xb8, 0xa8, 0x07, 0x04, 0xf4, 0x7b,
- 0x50, 0x92, 0x27, 0x40, 0x7a, 0xe2, 0x46, 0xb2, 0xd8, 0xc3, 0x91, 0x1e, 0xb0, 0xe2, 0x3d, 0x58,
- 0x64, 0x56, 0xe9, 0xd1, 0xe4, 0x5a, 0xda, 0x51, 0x4d, 0x3f, 0xb5, 0x48, 0xfa, 0xd9, 0x84, 0xe2,
- 0xe8, 0xfc, 0xca, 0x35, 0x7b, 0xc6, 0x40, 0x68, 0xe1, 0xb7, 0xf1, 0x47, 0x80, 0x54, 0x61, 0xb3,
- 0x4c, 0x17, 0x57, 0xa1, 0xfc, 0xd4, 0x70, 0xcf, 0x85, 0x4a, 0xf8, 0x21, 0x54, 0x69, 0x73, 0xef,
- 0xc5, 0x6b, 0xe8, 0xc8, 0x2e, 0x07, 0x92, 0x7b, 0x26, 0x9b, 0x23, 0x98, 0x3f, 0x37, 0xdc, 0x73,
- 0x36, 0xd1, 0xaa, 0xce, 0x7e, 0xa3, 0x77, 0xa0, 0xde, 0xe3, 0x93, 0x3c, 0x89, 0x5c, 0x19, 0x16,
- 0x04, 0xdd, 0xcf, 0x04, 0x3f, 0x85, 0x0a, 0x9f, 0xc3, 0x57, 0xad, 0x04, 0x5e, 0x84, 0x85, 0x63,
- 0xcb, 0x18, 0xb9, 0xe7, 0xb6, 0x8c, 0x6e, 0x74, 0xd2, 0xf5, 0x80, 0x36, 0x13, 0xe2, 0xdb, 0xb0,
- 0xe0, 0x90, 0xa1, 0x61, 0x5a, 0xa6, 0x75, 0x76, 0x72, 0x7a, 0xe5, 0x11, 0x57, 0x5c, 0x98, 0x6a,
- 0x3e, 0xf9, 0x31, 0xa5, 0x52, 0xd5, 0x4e, 0x07, 0xf6, 0xa9, 0x70, 0x73, 0xec, 0x37, 0xfe, 0x69,
- 0x06, 0x2a, 0x9f, 0x18, 0x5e, 0x4f, 0x2e, 0x1d, 0xda, 0x85, 0x9a, 0xef, 0xdc, 0x18, 0x45, 0xe8,
- 0x12, 0x09, 0xb1, 0x6c, 0x8c, 0x4c, 0xa5, 0x65, 0x74, 0xac, 0xf6, 0x54, 0x02, 0x13, 0x65, 0x58,
- 0x3d, 0x32, 0xf0, 0x45, 0x65, 0xd2, 0x45, 0x31, 0x46, 0x55, 0x94, 0x4a, 0x40, 0x87, 0x50, 0x1f,
- 0x39, 0xf6, 0x99, 0x43, 0x5c, 0xd7, 0x17, 0xc6, 0xc3, 0x18, 0x4e, 0x10, 0x76, 0x24, 0x58, 0x03,
- 0x71, 0x0b, 0xa3, 0x30, 0xe9, 0xf1, 0x42, 0x90, 0xcf, 0x70, 0xe7, 0xf4, 0x9f, 0x19, 0x40, 0xf1,
- 0x49, 0xfd, 0xb6, 0x29, 0xde, 0x3d, 0xa8, 0xb9, 0x9e, 0xe1, 0xc4, 0x36, 0x5b, 0x95, 0x51, 0x7d,
- 0x8f, 0xff, 0x36, 0xf8, 0x0a, 0x9d, 0x58, 0xb6, 0x67, 0xbe, 0xbc, 0x12, 0x59, 0x72, 0x4d, 0x92,
- 0x0f, 0x18, 0x15, 0x75, 0xa0, 0xf0, 0xd2, 0x1c, 0x78, 0xc4, 0x71, 0x1b, 0xb9, 0xf5, 0xec, 0x46,
- 0x6d, 0xeb, 0xe1, 0x75, 0xcb, 0xb0, 0xf9, 0x21, 0xe3, 0xef, 0x5e, 0x8d, 0x88, 0x2e, 0xc7, 0xaa,
- 0x99, 0x67, 0x3e, 0x94, 0x8d, 0xdf, 0x84, 0xe2, 0x2b, 0x2a, 0x82, 0xde, 0xb2, 0x0b, 0x3c, 0x59,
- 0x64, 0x6d, 0x7e, 0xc9, 0x7e, 0xe9, 0x18, 0x67, 0x43, 0x62, 0x79, 0xf2, 0x1e, 0x28, 0xdb, 0xf8,
- 0x1e, 0x40, 0x00, 0x43, 0x5d, 0xfe, 0xc1, 0xe1, 0xd1, 0xf3, 0x6e, 0x7d, 0x0e, 0x55, 0xa0, 0x78,
- 0x70, 0xb8, 0xd3, 0xd9, 0xef, 0xd0, 0xf8, 0x80, 0x5b, 0xd2, 0xa4, 0xa1, 0xb5, 0x54, 0x31, 0xb5,
- 0x10, 0x26, 0x5e, 0x85, 0xe5, 0xa4, 0x05, 0xa4, 0xb9, 0x68, 0x55, 0xec, 0xd2, 0x99, 0x8e, 0x8a,
- 0x0a, 0x9d, 0x09, 0x4f, 0xb7, 0x01, 0x05, 0xbe, 0x7b, 0xfb, 0x22, 0x39, 0x97, 0x4d, 0x6a, 0x08,
- 0xbe, 0x19, 0x49, 0x5f, 0xac, 0x92, 0xdf, 0x4e, 0x74, 0x2f, 0xb9, 0x44, 0xf7, 0x82, 0xee, 0x42,
- 0xd5, 0x3f, 0x0d, 0x86, 0x2b, 0x72, 0x81, 0x92, 0x5e, 0x91, 0x1b, 0x9d, 0xd2, 0x42, 0x46, 0x2f,
- 0x84, 0x8d, 0x8e, 0xee, 0x41, 0x9e, 0x4c, 0x88, 0xe5, 0xb9, 0x8d, 0x32, 0x8b, 0x18, 0x55, 0x99,
- 0xbb, 0x77, 0x28, 0x55, 0x17, 0x9d, 0xf8, 0xbb, 0xb0, 0xc8, 0xee, 0x48, 0x4f, 0x1c, 0xc3, 0x52,
- 0x2f, 0x73, 0xdd, 0xee, 0xbe, 0x30, 0x37, 0xfd, 0x89, 0x6a, 0x90, 0xd9, 0xdd, 0x11, 0x46, 0xc8,
- 0xec, 0xee, 0xe0, 0x1f, 0x6b, 0x80, 0xd4, 0x71, 0x33, 0xd9, 0x39, 0x22, 0x5c, 0xc2, 0x67, 0x03,
- 0xf8, 0x65, 0xc8, 0x11, 0xc7, 0xb1, 0x1d, 0x66, 0xd1, 0x92, 0xce, 0x1b, 0xf8, 0x2d, 0xa1, 0x83,
- 0x4e, 0x26, 0xf6, 0x85, 0x7f, 0x06, 0xb9, 0x34, 0xcd, 0x57, 0x75, 0x0f, 0x96, 0x42, 0x5c, 0x33,
- 0x45, 0xae, 0x0f, 0x61, 0x81, 0x09, 0xdb, 0x3e, 0x27, 0xbd, 0x8b, 0x91, 0x6d, 0x5a, 0x31, 0x3c,
- 0xba, 0x72, 0x81, 0x83, 0xa5, 0xf3, 0xe0, 0x13, 0xab, 0xf8, 0xc4, 0x6e, 0x77, 0x1f, 0x7f, 0x06,
- 0xab, 0x11, 0x39, 0x52, 0xfd, 0x3f, 0x82, 0x72, 0xcf, 0x27, 0xba, 0x22, 0xd7, 0xb9, 0x1d, 0x56,
- 0x2e, 0x3a, 0x54, 0x1d, 0x81, 0x0f, 0xe1, 0x46, 0x4c, 0xf4, 0x4c, 0x73, 0x7e, 0x1b, 0x56, 0x98,
- 0xc0, 0x3d, 0x42, 0x46, 0xed, 0x81, 0x39, 0x49, 0xb5, 0xf4, 0x48, 0x4c, 0x4a, 0x61, 0xfc, 0x7a,
- 0xf7, 0x05, 0xfe, 0x03, 0x81, 0xd8, 0x35, 0x87, 0xa4, 0x6b, 0xef, 0xa7, 0xeb, 0x46, 0xa3, 0xd9,
- 0x05, 0xb9, 0x72, 0x45, 0x5a, 0xc3, 0x7e, 0xe3, 0x7f, 0xd6, 0x84, 0xa9, 0xd4, 0xe1, 0x5f, 0xf3,
- 0x4e, 0x5e, 0x03, 0x38, 0xa3, 0x47, 0x86, 0xf4, 0x69, 0x07, 0xaf, 0xa8, 0x28, 0x14, 0x5f, 0x4f,
- 0xea, 0xbf, 0x2b, 0x42, 0xcf, 0x65, 0xb1, 0xcf, 0xd9, 0x3f, 0xbe, 0x97, 0xbb, 0x0d, 0x65, 0x46,
- 0x38, 0xf6, 0x0c, 0x6f, 0xec, 0xc6, 0x16, 0xe3, 0x2f, 0xc4, 0xb6, 0x97, 0x83, 0x66, 0x9a, 0xd7,
- 0xb7, 0x20, 0xcf, 0x2e, 0x13, 0x32, 0x95, 0xbe, 0x99, 0xb0, 0x1f, 0xb9, 0x1e, 0xba, 0x60, 0xc4,
- 0x3f, 0xd5, 0x20, 0xff, 0x8c, 0x95, 0x60, 0x15, 0xd5, 0xe6, 0xe5, 0x5a, 0x58, 0xc6, 0x90, 0x17,
- 0x86, 0x4a, 0x3a, 0xfb, 0xcd, 0x52, 0x4f, 0x42, 0x9c, 0xe7, 0xfa, 0x3e, 0x4f, 0x71, 0x4b, 0xba,
- 0xdf, 0xa6, 0x36, 0xeb, 0x0d, 0x4c, 0x62, 0x79, 0xac, 0x77, 0x9e, 0xf5, 0x2a, 0x14, 0x9a, 0x3d,
- 0x9b, 0xee, 0x3e, 0x31, 0x1c, 0x4b, 0x14, 0x4d, 0x8b, 0x7a, 0x40, 0xc0, 0xfb, 0x50, 0xe7, 0x7a,
- 0xb4, 0xfb, 0x7d, 0x25, 0xc1, 0xf4, 0xd1, 0xb4, 0x08, 0x5a, 0x48, 0x5a, 0x26, 0x2a, 0xed, 0x17,
- 0x1a, 0x2c, 0x2a, 0xe2, 0x66, 0xb2, 0xea, 0xbb, 0x90, 0xe7, 0x45, 0x6a, 0x91, 0xe9, 0x2c, 0x87,
- 0x47, 0x71, 0x18, 0x5d, 0xf0, 0xa0, 0x4d, 0x28, 0xf0, 0x5f, 0xf2, 0x0e, 0x90, 0xcc, 0x2e, 0x99,
- 0xf0, 0x3d, 0x58, 0x12, 0x24, 0x32, 0xb4, 0x93, 0x0e, 0x06, 0x5b, 0x0c, 0xfc, 0x67, 0xb0, 0x1c,
- 0x66, 0x9b, 0x69, 0x4a, 0x8a, 0x92, 0x99, 0xd7, 0x51, 0xb2, 0x2d, 0x95, 0x7c, 0x3e, 0xea, 0x2b,
- 0x79, 0x54, 0x74, 0xc7, 0xa8, 0xeb, 0x95, 0x09, 0xaf, 0x57, 0x30, 0x01, 0x29, 0xe2, 0x1b, 0x9d,
- 0xc0, 0x07, 0x72, 0x3b, 0xec, 0x9b, 0xae, 0xef, 0xc3, 0x31, 0x54, 0x06, 0xa6, 0x45, 0x0c, 0x47,
- 0x54, 0xce, 0x35, 0x5e, 0x39, 0x57, 0x69, 0xf8, 0x0b, 0x40, 0xea, 0xc0, 0x6f, 0x54, 0xe9, 0xfb,
- 0xd2, 0x64, 0x47, 0x8e, 0x3d, 0xb4, 0x53, 0xcd, 0x8e, 0xff, 0x1c, 0x56, 0x22, 0x7c, 0xdf, 0xa8,
- 0x9a, 0x4b, 0xb0, 0xb8, 0x43, 0x64, 0x42, 0x23, 0xdd, 0xde, 0x47, 0x80, 0x54, 0xe2, 0x4c, 0x91,
- 0xad, 0x05, 0x8b, 0xcf, 0xec, 0x09, 0x75, 0x91, 0x94, 0x1a, 0xf8, 0x06, 0x5e, 0x87, 0xf0, 0x4d,
- 0xe1, 0xb7, 0x29, 0xb8, 0x3a, 0x60, 0x26, 0xf0, 0x7f, 0xd7, 0xa0, 0xd2, 0x1e, 0x18, 0xce, 0x50,
- 0x02, 0x7f, 0x0f, 0xf2, 0xfc, 0x76, 0x2d, 0x0a, 0x5a, 0xf7, 0xc3, 0x62, 0x54, 0x5e, 0xde, 0x68,
- 0xf3, 0xbb, 0xb8, 0x18, 0x45, 0x15, 0x17, 0x6f, 0x5e, 0x3b, 0x91, 0x37, 0xb0, 0x1d, 0xf4, 0x1e,
- 0xe4, 0x0c, 0x3a, 0x84, 0x85, 0xa2, 0x5a, 0xb4, 0xae, 0xc1, 0xa4, 0xb1, 0x3b, 0x00, 0xe7, 0xc2,
- 0xdf, 0x81, 0xb2, 0x82, 0x80, 0x0a, 0x90, 0x7d, 0xd2, 0x11, 0x09, 0x7b, 0x7b, 0xbb, 0xbb, 0xfb,
- 0x82, 0x17, 0x74, 0x6a, 0x00, 0x3b, 0x1d, 0xbf, 0x9d, 0xc1, 0x9f, 0x8a, 0x51, 0xc2, 0xed, 0xab,
- 0xfa, 0x68, 0x69, 0xfa, 0x64, 0x5e, 0x4b, 0x9f, 0x4b, 0xa8, 0x8a, 0xe9, 0xcf, 0x1a, 0xc6, 0x98,
- 0xbc, 0x94, 0x30, 0xa6, 0x28, 0xaf, 0x0b, 0x46, 0xfc, 0x2b, 0x0d, 0xea, 0x3b, 0xf6, 0x2b, 0xeb,
- 0xcc, 0x31, 0xfa, 0xfe, 0x39, 0xf9, 0x30, 0xb2, 0x52, 0x9b, 0x91, 0xe2, 0x68, 0x84, 0x3f, 0x20,
- 0x44, 0x56, 0xac, 0x11, 0x94, 0x0d, 0x79, 0x2c, 0x94, 0x4d, 0xfc, 0x01, 0x2c, 0x44, 0x06, 0x51,
- 0xdb, 0xbf, 0x68, 0xef, 0xef, 0xee, 0x50, 0x5b, 0xb3, 0xc2, 0x5a, 0xe7, 0xa0, 0xfd, 0x78, 0xbf,
- 0x23, 0x1e, 0x90, 0xda, 0x07, 0xdb, 0x9d, 0xfd, 0x7a, 0x06, 0xf7, 0x60, 0x51, 0x81, 0x9f, 0xf5,
- 0x65, 0x20, 0x45, 0xbb, 0x05, 0xa8, 0x8a, 0x68, 0x2f, 0x0e, 0xe5, 0xbf, 0x65, 0xa0, 0x26, 0x29,
- 0x5f, 0x0f, 0x26, 0x5a, 0x85, 0x7c, 0xff, 0xf4, 0xd8, 0xfc, 0x42, 0xbe, 0x1c, 0x89, 0x16, 0xa5,
- 0x0f, 0x38, 0x0e, 0x7f, 0xbe, 0x15, 0x2d, 0x1a, 0xc6, 0x1d, 0xe3, 0xa5, 0xb7, 0x6b, 0xf5, 0xc9,
- 0x25, 0x4b, 0x0a, 0xe6, 0xf5, 0x80, 0xc0, 0x2a, 0x4c, 0xe2, 0x99, 0x97, 0xdd, 0xac, 0x94, 0x67,
- 0x5f, 0xf4, 0x00, 0xea, 0xf4, 0x77, 0x7b, 0x34, 0x1a, 0x98, 0xa4, 0xcf, 0x05, 0x14, 0x18, 0x4f,
- 0x8c, 0x4e, 0xd1, 0xd9, 0x5d, 0xc4, 0x6d, 0x14, 0x59, 0x58, 0x12, 0x2d, 0xb4, 0x0e, 0x65, 0xae,
- 0xdf, 0xae, 0xf5, 0xdc, 0x25, 0xec, 0xed, 0x33, 0xab, 0xab, 0xa4, 0x70, 0x9a, 0x01, 0xd1, 0x34,
- 0x63, 0x09, 0x16, 0xdb, 0x63, 0xef, 0xbc, 0x63, 0xd1, 0x58, 0x21, 0xad, 0xbc, 0x0c, 0x88, 0x12,
- 0x77, 0x4c, 0x57, 0xa5, 0x0a, 0xd6, 0xf0, 0x82, 0x74, 0x60, 0x89, 0x12, 0x89, 0xe5, 0x99, 0x3d,
- 0x25, 0xae, 0xca, 0xcc, 0x4b, 0x8b, 0x64, 0x5e, 0x86, 0xeb, 0xbe, 0xb2, 0x9d, 0xbe, 0xb0, 0xb9,
- 0xdf, 0xc6, 0xff, 0xa8, 0x71, 0xc8, 0xe7, 0x6e, 0x28, 0x7d, 0xfa, 0x2d, 0xc5, 0xa0, 0xf7, 0xa1,
- 0x60, 0x8f, 0xd8, 0x0b, 0xbf, 0x28, 0xc3, 0xac, 0x6e, 0xf2, 0x6f, 0x02, 0x36, 0x85, 0xe0, 0x43,
- 0xde, 0xab, 0x4b, 0x36, 0x74, 0x1f, 0x6a, 0xe7, 0x86, 0x7b, 0x4e, 0xfa, 0x47, 0x52, 0x26, 0xbf,
- 0xf9, 0x45, 0xa8, 0x78, 0x23, 0xd0, 0xef, 0x09, 0xf1, 0xa6, 0xe8, 0x87, 0x1f, 0xc2, 0x8a, 0xe4,
- 0x14, 0xaf, 0x13, 0x53, 0x98, 0x5f, 0xc1, 0x6d, 0xc9, 0xbc, 0x7d, 0x6e, 0x58, 0x67, 0x44, 0x02,
- 0xfe, 0xae, 0x16, 0x88, 0xcf, 0x27, 0x9b, 0x38, 0x9f, 0xc7, 0xd0, 0xf0, 0xe7, 0xc3, 0x6e, 0xd6,
- 0xf6, 0x40, 0x55, 0x74, 0xec, 0x8a, 0xf3, 0x54, 0xd2, 0xd9, 0x6f, 0x4a, 0x73, 0xec, 0x81, 0x9f,
- 0x4a, 0xd3, 0xdf, 0x78, 0x1b, 0x6e, 0x4a, 0x19, 0xe2, 0xce, 0x1b, 0x16, 0x12, 0x53, 0x3c, 0x49,
- 0x88, 0x30, 0x2c, 0x1d, 0x3a, 0x7d, 0xe1, 0x55, 0xce, 0xf0, 0x12, 0x30, 0x99, 0x9a, 0x22, 0x73,
- 0x85, 0x6f, 0x4a, 0xaa, 0x98, 0x92, 0x2d, 0x49, 0x32, 0x15, 0xa0, 0x92, 0xc5, 0x82, 0x51, 0x72,
- 0x6c, 0xc1, 0x62, 0xa2, 0x7f, 0x00, 0x6b, 0xbe, 0x12, 0xd4, 0x6e, 0x47, 0xc4, 0x19, 0x9a, 0xae,
- 0xab, 0xd4, 0xbd, 0x93, 0x26, 0x7e, 0x1f, 0xe6, 0x47, 0x44, 0x04, 0xa1, 0xf2, 0x16, 0x92, 0x9b,
- 0x52, 0x19, 0xcc, 0xfa, 0x71, 0x1f, 0xee, 0x48, 0xe9, 0xdc, 0xa2, 0x89, 0xe2, 0xa3, 0x4a, 0xc9,
- 0x6a, 0x60, 0x26, 0xa5, 0x1a, 0x98, 0x8d, 0xbc, 0xc5, 0x7c, 0xc4, 0x0d, 0x29, 0xcf, 0xfc, 0x4c,
- 0xc9, 0xc5, 0x1e, 0xb7, 0xa9, 0xef, 0x2a, 0x66, 0x12, 0xf6, 0xd7, 0xc2, 0x0b, 0x7c, 0x55, 0x1e,
- 0x9e, 0xb0, 0x19, 0xca, 0x87, 0x0e, 0xd9, 0xa4, 0x59, 0x33, 0x5d, 0x00, 0x5d, 0xad, 0x85, 0xce,
- 0xeb, 0x21, 0x1a, 0x3e, 0x85, 0xe5, 0xb0, 0x5f, 0x9b, 0x49, 0x97, 0x65, 0xc8, 0x79, 0xf6, 0x05,
- 0x91, 0xb1, 0x86, 0x37, 0xa4, 0xed, 0x7c, 0x9f, 0x37, 0x93, 0xed, 0x8c, 0x40, 0x18, 0x3b, 0x1d,
- 0xb3, 0xea, 0x4b, 0x37, 0x96, 0xbc, 0x03, 0xf1, 0x06, 0x3e, 0x80, 0xd5, 0xa8, 0x67, 0x9b, 0x49,
- 0xe5, 0x17, 0xfc, 0x2c, 0x25, 0x39, 0xbf, 0x99, 0xe4, 0x7e, 0x1c, 0xf8, 0x25, 0xc5, 0xb7, 0xcd,
- 0x24, 0x52, 0x87, 0x66, 0x92, 0xab, 0xfb, 0x2a, 0x8e, 0x8e, 0xef, 0xf9, 0x66, 0x12, 0xe6, 0x06,
- 0xc2, 0x66, 0x5f, 0xfe, 0xc0, 0x5d, 0x65, 0xa7, 0xba, 0x2b, 0x71, 0x48, 0x02, 0x87, 0xfa, 0x35,
- 0x6c, 0x3a, 0x81, 0x11, 0xf8, 0xf2, 0x59, 0x31, 0x68, 0x38, 0xf3, 0x31, 0x58, 0x43, 0x6e, 0x6c,
- 0x35, 0x02, 0xcc, 0xb4, 0x18, 0x9f, 0x04, 0x6e, 0x3c, 0x16, 0x24, 0x66, 0x12, 0xfc, 0x29, 0xac,
- 0xa7, 0xc7, 0x87, 0x59, 0x24, 0x3f, 0x68, 0x41, 0xc9, 0xbf, 0x0c, 0x29, 0xdf, 0x9b, 0x95, 0xa1,
- 0x70, 0x70, 0x78, 0x7c, 0xd4, 0xde, 0xee, 0xf0, 0x0f, 0xce, 0xb6, 0x0f, 0x75, 0xfd, 0xf9, 0x51,
- 0xb7, 0x9e, 0xd9, 0xfa, 0x75, 0x16, 0x32, 0x7b, 0x2f, 0xd0, 0x67, 0x90, 0xe3, 0x5f, 0x5f, 0x4c,
- 0xf9, 0xe4, 0xa6, 0x39, 0xed, 0x03, 0x13, 0x7c, 0xe3, 0xc7, 0xff, 0xf5, 0xeb, 0x9f, 0x67, 0x16,
- 0x71, 0xa5, 0x35, 0xf9, 0x76, 0xeb, 0x62, 0xd2, 0x62, 0x61, 0xea, 0x91, 0xf6, 0x00, 0x7d, 0x0c,
- 0xd9, 0xa3, 0xb1, 0x87, 0x52, 0x3f, 0xc5, 0x69, 0xa6, 0x7f, 0x73, 0x82, 0x57, 0x98, 0xd0, 0x05,
- 0x0c, 0x42, 0xe8, 0x68, 0xec, 0x51, 0x91, 0x3f, 0x84, 0xb2, 0xfa, 0xc5, 0xc8, 0xb5, 0xdf, 0xe7,
- 0x34, 0xaf, 0xff, 0x1a, 0x05, 0xdf, 0x66, 0x50, 0x37, 0x30, 0x12, 0x50, 0xfc, 0x9b, 0x16, 0x75,
- 0x16, 0xdd, 0x4b, 0x0b, 0xa5, 0x7e, 0xbd, 0xd3, 0x4c, 0xff, 0x40, 0x25, 0x36, 0x0b, 0xef, 0xd2,
- 0xa2, 0x22, 0xff, 0x44, 0x7c, 0x9b, 0xd2, 0xf3, 0xd0, 0x9d, 0x84, 0x6f, 0x13, 0xd4, 0x57, 0xf8,
- 0xe6, 0x7a, 0x3a, 0x83, 0x00, 0xb9, 0xc5, 0x40, 0x56, 0xf1, 0xa2, 0x00, 0xe9, 0xf9, 0x2c, 0x8f,
- 0xb4, 0x07, 0x5b, 0x3d, 0xc8, 0xb1, 0x17, 0x2e, 0xf4, 0xb9, 0xfc, 0xd1, 0x4c, 0x78, 0xea, 0x4b,
- 0x59, 0xe8, 0xd0, 0xdb, 0x18, 0x5e, 0x66, 0x40, 0x35, 0x5c, 0xa2, 0x40, 0xec, 0x7d, 0xeb, 0x91,
- 0xf6, 0x60, 0x43, 0x7b, 0x5f, 0xdb, 0xfa, 0x55, 0x0e, 0x72, 0xac, 0xb4, 0x8b, 0x2e, 0x00, 0x82,
- 0xd7, 0x9e, 0xe8, 0xec, 0x62, 0xef, 0x47, 0xd1, 0xd9, 0xc5, 0x1f, 0x8a, 0x70, 0x93, 0x81, 0x2e,
- 0xe3, 0x05, 0x0a, 0xca, 0x2a, 0xc6, 0x2d, 0x56, 0x04, 0xa7, 0x76, 0xfc, 0x1b, 0x4d, 0x54, 0xb6,
- 0xf9, 0x59, 0x42, 0x49, 0xd2, 0x42, 0x4f, 0x3e, 0xd1, 0xed, 0x90, 0xf0, 0xdc, 0x83, 0xbf, 0xcb,
- 0x00, 0x5b, 0xb8, 0x1e, 0x00, 0x3a, 0x8c, 0xe3, 0x91, 0xf6, 0xe0, 0xf3, 0x06, 0x5e, 0x12, 0x56,
- 0x8e, 0xf4, 0xa0, 0x1f, 0x41, 0x2d, 0xfc, 0xa4, 0x81, 0xee, 0x26, 0x60, 0x45, 0x5f, 0x46, 0x9a,
- 0x6f, 0x4d, 0x67, 0x12, 0x3a, 0xad, 0x31, 0x9d, 0x04, 0x38, 0x47, 0xbe, 0x20, 0x64, 0x64, 0x50,
- 0x26, 0xb1, 0x06, 0xe8, 0x1f, 0x34, 0xf1, 0xe2, 0x14, 0xbc, 0x51, 0xa0, 0x24, 0xe9, 0xb1, 0x17,
- 0x90, 0xe6, 0xbd, 0x6b, 0xb8, 0x84, 0x12, 0x7f, 0xc8, 0x94, 0xf8, 0x00, 0x2f, 0x07, 0x4a, 0x78,
- 0xe6, 0x90, 0x78, 0xb6, 0xd0, 0xe2, 0xf3, 0x5b, 0xf8, 0x46, 0xc8, 0x38, 0xa1, 0xde, 0x60, 0xb1,
- 0xf8, 0x3b, 0x43, 0xe2, 0x62, 0x85, 0xde, 0x2d, 0x12, 0x17, 0x2b, 0xfc, 0x48, 0x91, 0xb4, 0x58,
- 0xfc, 0x55, 0x21, 0x69, 0xb1, 0xfc, 0x9e, 0xad, 0xff, 0x9b, 0x87, 0xc2, 0x36, 0xff, 0x26, 0x1c,
- 0xd9, 0x50, 0xf2, 0xcb, 0xf4, 0x68, 0x2d, 0xa9, 0xce, 0x18, 0x5c, 0x6b, 0x9a, 0x77, 0x52, 0xfb,
- 0x85, 0x42, 0x6f, 0x32, 0x85, 0xde, 0xc0, 0xab, 0x14, 0x59, 0x7c, 0x76, 0xde, 0xe2, 0xc5, 0xac,
- 0x96, 0xd1, 0xef, 0x53, 0x43, 0xfc, 0x29, 0x54, 0xd4, 0x3a, 0x3a, 0x7a, 0x33, 0xb1, 0xb6, 0xa9,
- 0x96, 0xe2, 0x9b, 0x78, 0x1a, 0x8b, 0x40, 0x7e, 0x8b, 0x21, 0xaf, 0xe1, 0x9b, 0x09, 0xc8, 0x0e,
- 0x63, 0x0d, 0x81, 0xf3, 0x1a, 0x78, 0x32, 0x78, 0xa8, 0xc4, 0x9e, 0x0c, 0x1e, 0x2e, 0xa1, 0x4f,
- 0x05, 0x1f, 0x33, 0x56, 0x0a, 0xee, 0x02, 0x04, 0x95, 0x6c, 0x94, 0x68, 0x4b, 0xe5, 0x5e, 0x17,
- 0x75, 0x0e, 0xf1, 0x22, 0x38, 0xc6, 0x0c, 0x56, 0xec, 0xbb, 0x08, 0xec, 0xc0, 0x74, 0x3d, 0x7e,
- 0x30, 0xab, 0xa1, 0xd2, 0x34, 0x4a, 0x9c, 0x4f, 0xb8, 0xbe, 0xdd, 0xbc, 0x3b, 0x95, 0x47, 0xa0,
- 0xdf, 0x63, 0xe8, 0x77, 0x70, 0x33, 0x01, 0x7d, 0xc4, 0x79, 0xe9, 0x66, 0xfb, 0xff, 0x3c, 0x94,
- 0x9f, 0x19, 0xa6, 0xe5, 0x11, 0xcb, 0xb0, 0x7a, 0x04, 0x9d, 0x42, 0x8e, 0x45, 0xea, 0xa8, 0x23,
- 0x56, 0xcb, 0xb6, 0x51, 0x47, 0x1c, 0xaa, 0x69, 0xe2, 0x75, 0x06, 0xdc, 0xc4, 0x2b, 0x14, 0x78,
- 0x18, 0x88, 0x6e, 0xb1, 0x52, 0x24, 0x9d, 0xf4, 0x4b, 0xc8, 0x8b, 0xd7, 0xbe, 0x88, 0xa0, 0x50,
- 0xf1, 0xa7, 0x79, 0x2b, 0xb9, 0x33, 0x69, 0x2f, 0xab, 0x30, 0x2e, 0xe3, 0xa3, 0x38, 0x13, 0x80,
- 0xa0, 0xc6, 0x1e, 0x5d, 0xd1, 0x58, 0x49, 0xbe, 0xb9, 0x9e, 0xce, 0x90, 0x64, 0x53, 0x15, 0xb3,
- 0xef, 0xf3, 0x52, 0xdc, 0x3f, 0x86, 0xf9, 0xa7, 0x86, 0x7b, 0x8e, 0x22, 0xb1, 0x57, 0xf9, 0x56,
- 0xac, 0xd9, 0x4c, 0xea, 0x12, 0x28, 0x77, 0x18, 0xca, 0x4d, 0xee, 0xca, 0x54, 0x94, 0x73, 0xc3,
- 0xa5, 0x41, 0x0d, 0xf5, 0x21, 0xcf, 0x3f, 0x1d, 0x8b, 0xda, 0x2f, 0xf4, 0xf9, 0x59, 0xd4, 0x7e,
- 0xe1, 0xaf, 0xcd, 0xae, 0x47, 0x19, 0x41, 0x51, 0x7e, 0xab, 0x85, 0x22, 0x0f, 0xf7, 0x91, 0xef,
- 0xba, 0x9a, 0x6b, 0x69, 0xdd, 0x02, 0xeb, 0x2e, 0xc3, 0xba, 0x8d, 0x1b, 0xb1, 0xb5, 0x12, 0x9c,
- 0x8f, 0xb4, 0x07, 0xef, 0x6b, 0xe8, 0x47, 0x00, 0xc1, 0xb3, 0x44, 0xec, 0x04, 0x46, 0x5f, 0x38,
- 0x62, 0x27, 0x30, 0xf6, 0xa2, 0x81, 0x37, 0x19, 0xee, 0x06, 0xbe, 0x1b, 0xc5, 0xf5, 0x1c, 0xc3,
- 0x72, 0x5f, 0x12, 0xe7, 0x3d, 0x5e, 0x65, 0x75, 0xcf, 0xcd, 0x11, 0x9d, 0xb2, 0x03, 0x25, 0xbf,
- 0xea, 0x1c, 0xf5, 0xb6, 0xd1, 0x6a, 0x78, 0xd4, 0xdb, 0xc6, 0xca, 0xd5, 0x61, 0xb7, 0x13, 0xda,
- 0x2d, 0x92, 0x95, 0x1e, 0xc0, 0x5f, 0xd4, 0x61, 0x9e, 0x66, 0xdd, 0x34, 0x39, 0x09, 0xea, 0x26,
- 0xd1, 0xd9, 0xc7, 0xaa, 0xa8, 0xd1, 0xd9, 0xc7, 0x4b, 0x2e, 0xe1, 0xe4, 0x84, 0x5e, 0xb2, 0x5a,
- 0xbc, 0x44, 0x41, 0x67, 0x6a, 0x43, 0x59, 0x29, 0xac, 0xa0, 0x04, 0x61, 0xe1, 0xf2, 0x6c, 0x34,
- 0xdc, 0x25, 0x54, 0x65, 0xf0, 0x1b, 0x0c, 0x6f, 0x85, 0x87, 0x3b, 0x86, 0xd7, 0xe7, 0x1c, 0x14,
- 0x50, 0xcc, 0x4e, 0x9c, 0xfb, 0x84, 0xd9, 0x85, 0xcf, 0xfe, 0x7a, 0x3a, 0x43, 0xea, 0xec, 0x82,
- 0x83, 0xff, 0x0a, 0x2a, 0x6a, 0x79, 0x05, 0x25, 0x28, 0x1f, 0x29, 0x29, 0x47, 0xe3, 0x48, 0x52,
- 0x75, 0x26, 0xec, 0xd9, 0x18, 0xa4, 0xa1, 0xb0, 0x51, 0xe0, 0x01, 0x14, 0x44, 0xbd, 0x25, 0xc9,
- 0xa4, 0xe1, 0xf2, 0x73, 0x92, 0x49, 0x23, 0xc5, 0x9a, 0x70, 0xf6, 0xcc, 0x10, 0xe9, 0x95, 0x52,
- 0xc6, 0x6a, 0x81, 0xf6, 0x84, 0x78, 0x69, 0x68, 0x41, 0x25, 0x33, 0x0d, 0x4d, 0xb9, 0xce, 0xa7,
- 0xa1, 0x9d, 0x11, 0x4f, 0xf8, 0x03, 0x79, 0x4d, 0x46, 0x29, 0xc2, 0xd4, 0xf8, 0x88, 0xa7, 0xb1,
- 0x24, 0x5d, 0x6e, 0x02, 0x40, 0x19, 0x1c, 0x2f, 0x01, 0x82, 0x6a, 0x50, 0x34, 0x63, 0x4d, 0xac,
- 0x82, 0x47, 0x33, 0xd6, 0xe4, 0x82, 0x52, 0xd8, 0xf7, 0x05, 0xb8, 0xfc, 0x6e, 0x45, 0x91, 0x7f,
- 0xa6, 0x01, 0x8a, 0x17, 0x8e, 0xd0, 0xc3, 0x64, 0xe9, 0x89, 0xb5, 0xf5, 0xe6, 0xbb, 0xaf, 0xc7,
- 0x9c, 0x14, 0xce, 0x02, 0x95, 0x7a, 0x8c, 0x7b, 0xf4, 0x8a, 0x2a, 0xf5, 0x97, 0x1a, 0x54, 0x43,
- 0x55, 0x27, 0x74, 0x3f, 0x65, 0x4d, 0x23, 0x25, 0xf7, 0xe6, 0xdb, 0xd7, 0xf2, 0x25, 0xa5, 0xf2,
- 0xca, 0x0e, 0x90, 0x77, 0x9a, 0x9f, 0x68, 0x50, 0x0b, 0x57, 0xa9, 0x50, 0x8a, 0xec, 0x58, 0xc9,
- 0xbe, 0xb9, 0x71, 0x3d, 0xe3, 0xf4, 0xe5, 0x09, 0xae, 0x33, 0x03, 0x28, 0x88, 0xba, 0x56, 0xd2,
- 0xc6, 0x0f, 0x17, 0xfb, 0x93, 0x36, 0x7e, 0xa4, 0x28, 0x96, 0xb0, 0xf1, 0x1d, 0x7b, 0x40, 0x94,
- 0x63, 0x26, 0x0a, 0x5f, 0x69, 0x68, 0xd3, 0x8f, 0x59, 0xa4, 0x6a, 0x96, 0x86, 0x16, 0x1c, 0x33,
- 0x59, 0xf1, 0x42, 0x29, 0xc2, 0xae, 0x39, 0x66, 0xd1, 0x82, 0x59, 0xc2, 0x31, 0x63, 0x80, 0xca,
- 0x31, 0x0b, 0x6a, 0x53, 0x49, 0xc7, 0x2c, 0xf6, 0x76, 0x91, 0x74, 0xcc, 0xe2, 0xe5, 0xad, 0x84,
- 0x75, 0x64, 0xb8, 0xa1, 0x63, 0xb6, 0x94, 0x50, 0xc6, 0x42, 0xef, 0xa6, 0x18, 0x31, 0xf1, 0x49,
- 0xa4, 0xf9, 0xde, 0x6b, 0x72, 0xa7, 0xee, 0x71, 0x6e, 0x7e, 0xb9, 0xc7, 0xff, 0x56, 0x83, 0xe5,
- 0xa4, 0x12, 0x18, 0x4a, 0xc1, 0x49, 0x79, 0x4a, 0x69, 0x6e, 0xbe, 0x2e, 0xfb, 0x74, 0x6b, 0xf9,
- 0xbb, 0xfe, 0x71, 0xfd, 0x5f, 0xbf, 0x5c, 0xd3, 0xfe, 0xe3, 0xcb, 0x35, 0xed, 0xbf, 0xbf, 0x5c,
- 0xd3, 0xfe, 0xee, 0x7f, 0xd6, 0xe6, 0x4e, 0xf3, 0xec, 0x3f, 0x1a, 0x7f, 0xfb, 0x37, 0x01, 0x00,
- 0x00, 0xff, 0xff, 0xee, 0x4f, 0x63, 0x90, 0xed, 0x3c, 0x00, 0x00,
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
-
-// KVClient is the client API for KV service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type KVClient interface {
- // Range gets the keys in the range from the key-value store.
- Range(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (*RangeResponse, error)
- // Put puts the given key into the key-value store.
- // A put request increments the revision of the key-value store
- // and generates one event in the event history.
- Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error)
- // DeleteRange deletes the given range from the key-value store.
- // A delete request increments the revision of the key-value store
- // and generates a delete event in the event history for every deleted key.
- DeleteRange(ctx context.Context, in *DeleteRangeRequest, opts ...grpc.CallOption) (*DeleteRangeResponse, error)
- // Txn processes multiple requests in a single transaction.
- // A txn request increments the revision of the key-value store
- // and generates events with the same revision for every completed request.
- // It is not allowed to modify the same key several times within one txn.
- Txn(ctx context.Context, in *TxnRequest, opts ...grpc.CallOption) (*TxnResponse, error)
- // Compact compacts the event history in the etcd key-value store. The key-value
- // store should be periodically compacted or the event history will continue to grow
- // indefinitely.
- Compact(ctx context.Context, in *CompactionRequest, opts ...grpc.CallOption) (*CompactionResponse, error)
-}
-
-type kVClient struct {
- cc *grpc.ClientConn
-}
-
-func NewKVClient(cc *grpc.ClientConn) KVClient {
- return &kVClient{cc}
-}
-
-func (c *kVClient) Range(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (*RangeResponse, error) {
- out := new(RangeResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.KV/Range", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *kVClient) Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error) {
- out := new(PutResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.KV/Put", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *kVClient) DeleteRange(ctx context.Context, in *DeleteRangeRequest, opts ...grpc.CallOption) (*DeleteRangeResponse, error) {
- out := new(DeleteRangeResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.KV/DeleteRange", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *kVClient) Txn(ctx context.Context, in *TxnRequest, opts ...grpc.CallOption) (*TxnResponse, error) {
- out := new(TxnResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.KV/Txn", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *kVClient) Compact(ctx context.Context, in *CompactionRequest, opts ...grpc.CallOption) (*CompactionResponse, error) {
- out := new(CompactionResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.KV/Compact", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// KVServer is the server API for KV service.
-type KVServer interface {
- // Range gets the keys in the range from the key-value store.
- Range(context.Context, *RangeRequest) (*RangeResponse, error)
- // Put puts the given key into the key-value store.
- // A put request increments the revision of the key-value store
- // and generates one event in the event history.
- Put(context.Context, *PutRequest) (*PutResponse, error)
- // DeleteRange deletes the given range from the key-value store.
- // A delete request increments the revision of the key-value store
- // and generates a delete event in the event history for every deleted key.
- DeleteRange(context.Context, *DeleteRangeRequest) (*DeleteRangeResponse, error)
- // Txn processes multiple requests in a single transaction.
- // A txn request increments the revision of the key-value store
- // and generates events with the same revision for every completed request.
- // It is not allowed to modify the same key several times within one txn.
- Txn(context.Context, *TxnRequest) (*TxnResponse, error)
- // Compact compacts the event history in the etcd key-value store. The key-value
- // store should be periodically compacted or the event history will continue to grow
- // indefinitely.
- Compact(context.Context, *CompactionRequest) (*CompactionResponse, error)
-}
-
-// UnimplementedKVServer can be embedded to have forward compatible implementations.
-type UnimplementedKVServer struct {
-}
-
-func (*UnimplementedKVServer) Range(ctx context.Context, req *RangeRequest) (*RangeResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Range not implemented")
-}
-func (*UnimplementedKVServer) Put(ctx context.Context, req *PutRequest) (*PutResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Put not implemented")
-}
-func (*UnimplementedKVServer) DeleteRange(ctx context.Context, req *DeleteRangeRequest) (*DeleteRangeResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method DeleteRange not implemented")
-}
-func (*UnimplementedKVServer) Txn(ctx context.Context, req *TxnRequest) (*TxnResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Txn not implemented")
-}
-func (*UnimplementedKVServer) Compact(ctx context.Context, req *CompactionRequest) (*CompactionResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Compact not implemented")
-}
-
-func RegisterKVServer(s *grpc.Server, srv KVServer) {
- s.RegisterService(&_KV_serviceDesc, srv)
-}
-
-func _KV_Range_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(RangeRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(KVServer).Range(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.KV/Range",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(KVServer).Range(ctx, req.(*RangeRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _KV_Put_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(PutRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(KVServer).Put(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.KV/Put",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(KVServer).Put(ctx, req.(*PutRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _KV_DeleteRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(DeleteRangeRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(KVServer).DeleteRange(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.KV/DeleteRange",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(KVServer).DeleteRange(ctx, req.(*DeleteRangeRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _KV_Txn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(TxnRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(KVServer).Txn(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.KV/Txn",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(KVServer).Txn(ctx, req.(*TxnRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _KV_Compact_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(CompactionRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(KVServer).Compact(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.KV/Compact",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(KVServer).Compact(ctx, req.(*CompactionRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _KV_serviceDesc = grpc.ServiceDesc{
- ServiceName: "etcdserverpb.KV",
- HandlerType: (*KVServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "Range",
- Handler: _KV_Range_Handler,
- },
- {
- MethodName: "Put",
- Handler: _KV_Put_Handler,
- },
- {
- MethodName: "DeleteRange",
- Handler: _KV_DeleteRange_Handler,
- },
- {
- MethodName: "Txn",
- Handler: _KV_Txn_Handler,
- },
- {
- MethodName: "Compact",
- Handler: _KV_Compact_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "rpc.proto",
-}
-
-// WatchClient is the client API for Watch service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type WatchClient interface {
- // Watch watches for events happening or that have happened. Both input and output
- // are streams; the input stream is for creating and canceling watchers and the output
- // stream sends events. One watch RPC can watch on multiple key ranges, streaming events
- // for several watches at once. The entire event history can be watched starting from the
- // last compaction revision.
- Watch(ctx context.Context, opts ...grpc.CallOption) (Watch_WatchClient, error)
-}
-
-type watchClient struct {
- cc *grpc.ClientConn
-}
-
-func NewWatchClient(cc *grpc.ClientConn) WatchClient {
- return &watchClient{cc}
-}
-
-func (c *watchClient) Watch(ctx context.Context, opts ...grpc.CallOption) (Watch_WatchClient, error) {
- stream, err := c.cc.NewStream(ctx, &_Watch_serviceDesc.Streams[0], "/etcdserverpb.Watch/Watch", opts...)
- if err != nil {
- return nil, err
- }
- x := &watchWatchClient{stream}
- return x, nil
-}
-
-type Watch_WatchClient interface {
- Send(*WatchRequest) error
- Recv() (*WatchResponse, error)
- grpc.ClientStream
-}
-
-type watchWatchClient struct {
- grpc.ClientStream
-}
-
-func (x *watchWatchClient) Send(m *WatchRequest) error {
- return x.ClientStream.SendMsg(m)
-}
-
-func (x *watchWatchClient) Recv() (*WatchResponse, error) {
- m := new(WatchResponse)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-// WatchServer is the server API for Watch service.
-type WatchServer interface {
- // Watch watches for events happening or that have happened. Both input and output
- // are streams; the input stream is for creating and canceling watchers and the output
- // stream sends events. One watch RPC can watch on multiple key ranges, streaming events
- // for several watches at once. The entire event history can be watched starting from the
- // last compaction revision.
- Watch(Watch_WatchServer) error
-}
-
-// UnimplementedWatchServer can be embedded to have forward compatible implementations.
-type UnimplementedWatchServer struct {
-}
-
-func (*UnimplementedWatchServer) Watch(srv Watch_WatchServer) error {
- return status.Errorf(codes.Unimplemented, "method Watch not implemented")
-}
-
-func RegisterWatchServer(s *grpc.Server, srv WatchServer) {
- s.RegisterService(&_Watch_serviceDesc, srv)
-}
-
-func _Watch_Watch_Handler(srv interface{}, stream grpc.ServerStream) error {
- return srv.(WatchServer).Watch(&watchWatchServer{stream})
-}
-
-type Watch_WatchServer interface {
- Send(*WatchResponse) error
- Recv() (*WatchRequest, error)
- grpc.ServerStream
-}
-
-type watchWatchServer struct {
- grpc.ServerStream
-}
-
-func (x *watchWatchServer) Send(m *WatchResponse) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func (x *watchWatchServer) Recv() (*WatchRequest, error) {
- m := new(WatchRequest)
- if err := x.ServerStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-var _Watch_serviceDesc = grpc.ServiceDesc{
- ServiceName: "etcdserverpb.Watch",
- HandlerType: (*WatchServer)(nil),
- Methods: []grpc.MethodDesc{},
- Streams: []grpc.StreamDesc{
- {
- StreamName: "Watch",
- Handler: _Watch_Watch_Handler,
- ServerStreams: true,
- ClientStreams: true,
- },
- },
- Metadata: "rpc.proto",
-}
-
-// LeaseClient is the client API for Lease service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type LeaseClient interface {
- // LeaseGrant creates a lease which expires if the server does not receive a keepAlive
- // within a given time to live period. All keys attached to the lease will be expired and
- // deleted if the lease expires. Each expired key generates a delete event in the event history.
- LeaseGrant(ctx context.Context, in *LeaseGrantRequest, opts ...grpc.CallOption) (*LeaseGrantResponse, error)
- // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.
- LeaseRevoke(ctx context.Context, in *LeaseRevokeRequest, opts ...grpc.CallOption) (*LeaseRevokeResponse, error)
- // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client
- // to the server and streaming keep alive responses from the server to the client.
- LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (Lease_LeaseKeepAliveClient, error)
- // LeaseTimeToLive retrieves lease information.
- LeaseTimeToLive(ctx context.Context, in *LeaseTimeToLiveRequest, opts ...grpc.CallOption) (*LeaseTimeToLiveResponse, error)
- // LeaseLeases lists all existing leases.
- LeaseLeases(ctx context.Context, in *LeaseLeasesRequest, opts ...grpc.CallOption) (*LeaseLeasesResponse, error)
-}
-
-type leaseClient struct {
- cc *grpc.ClientConn
-}
-
-func NewLeaseClient(cc *grpc.ClientConn) LeaseClient {
- return &leaseClient{cc}
-}
-
-func (c *leaseClient) LeaseGrant(ctx context.Context, in *LeaseGrantRequest, opts ...grpc.CallOption) (*LeaseGrantResponse, error) {
- out := new(LeaseGrantResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Lease/LeaseGrant", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *leaseClient) LeaseRevoke(ctx context.Context, in *LeaseRevokeRequest, opts ...grpc.CallOption) (*LeaseRevokeResponse, error) {
- out := new(LeaseRevokeResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Lease/LeaseRevoke", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *leaseClient) LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (Lease_LeaseKeepAliveClient, error) {
- stream, err := c.cc.NewStream(ctx, &_Lease_serviceDesc.Streams[0], "/etcdserverpb.Lease/LeaseKeepAlive", opts...)
- if err != nil {
- return nil, err
- }
- x := &leaseLeaseKeepAliveClient{stream}
- return x, nil
-}
-
-type Lease_LeaseKeepAliveClient interface {
- Send(*LeaseKeepAliveRequest) error
- Recv() (*LeaseKeepAliveResponse, error)
- grpc.ClientStream
-}
-
-type leaseLeaseKeepAliveClient struct {
- grpc.ClientStream
-}
-
-func (x *leaseLeaseKeepAliveClient) Send(m *LeaseKeepAliveRequest) error {
- return x.ClientStream.SendMsg(m)
-}
-
-func (x *leaseLeaseKeepAliveClient) Recv() (*LeaseKeepAliveResponse, error) {
- m := new(LeaseKeepAliveResponse)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func (c *leaseClient) LeaseTimeToLive(ctx context.Context, in *LeaseTimeToLiveRequest, opts ...grpc.CallOption) (*LeaseTimeToLiveResponse, error) {
- out := new(LeaseTimeToLiveResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Lease/LeaseTimeToLive", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *leaseClient) LeaseLeases(ctx context.Context, in *LeaseLeasesRequest, opts ...grpc.CallOption) (*LeaseLeasesResponse, error) {
- out := new(LeaseLeasesResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Lease/LeaseLeases", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// LeaseServer is the server API for Lease service.
-type LeaseServer interface {
- // LeaseGrant creates a lease which expires if the server does not receive a keepAlive
- // within a given time to live period. All keys attached to the lease will be expired and
- // deleted if the lease expires. Each expired key generates a delete event in the event history.
- LeaseGrant(context.Context, *LeaseGrantRequest) (*LeaseGrantResponse, error)
- // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.
- LeaseRevoke(context.Context, *LeaseRevokeRequest) (*LeaseRevokeResponse, error)
- // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client
- // to the server and streaming keep alive responses from the server to the client.
- LeaseKeepAlive(Lease_LeaseKeepAliveServer) error
- // LeaseTimeToLive retrieves lease information.
- LeaseTimeToLive(context.Context, *LeaseTimeToLiveRequest) (*LeaseTimeToLiveResponse, error)
- // LeaseLeases lists all existing leases.
- LeaseLeases(context.Context, *LeaseLeasesRequest) (*LeaseLeasesResponse, error)
-}
-
-// UnimplementedLeaseServer can be embedded to have forward compatible implementations.
-type UnimplementedLeaseServer struct {
-}
-
-func (*UnimplementedLeaseServer) LeaseGrant(ctx context.Context, req *LeaseGrantRequest) (*LeaseGrantResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method LeaseGrant not implemented")
-}
-func (*UnimplementedLeaseServer) LeaseRevoke(ctx context.Context, req *LeaseRevokeRequest) (*LeaseRevokeResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method LeaseRevoke not implemented")
-}
-func (*UnimplementedLeaseServer) LeaseKeepAlive(srv Lease_LeaseKeepAliveServer) error {
- return status.Errorf(codes.Unimplemented, "method LeaseKeepAlive not implemented")
-}
-func (*UnimplementedLeaseServer) LeaseTimeToLive(ctx context.Context, req *LeaseTimeToLiveRequest) (*LeaseTimeToLiveResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method LeaseTimeToLive not implemented")
-}
-func (*UnimplementedLeaseServer) LeaseLeases(ctx context.Context, req *LeaseLeasesRequest) (*LeaseLeasesResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method LeaseLeases not implemented")
-}
-
-func RegisterLeaseServer(s *grpc.Server, srv LeaseServer) {
- s.RegisterService(&_Lease_serviceDesc, srv)
-}
-
-func _Lease_LeaseGrant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(LeaseGrantRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(LeaseServer).LeaseGrant(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Lease/LeaseGrant",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(LeaseServer).LeaseGrant(ctx, req.(*LeaseGrantRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Lease_LeaseRevoke_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(LeaseRevokeRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(LeaseServer).LeaseRevoke(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Lease/LeaseRevoke",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(LeaseServer).LeaseRevoke(ctx, req.(*LeaseRevokeRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Lease_LeaseKeepAlive_Handler(srv interface{}, stream grpc.ServerStream) error {
- return srv.(LeaseServer).LeaseKeepAlive(&leaseLeaseKeepAliveServer{stream})
-}
-
-type Lease_LeaseKeepAliveServer interface {
- Send(*LeaseKeepAliveResponse) error
- Recv() (*LeaseKeepAliveRequest, error)
- grpc.ServerStream
-}
-
-type leaseLeaseKeepAliveServer struct {
- grpc.ServerStream
-}
-
-func (x *leaseLeaseKeepAliveServer) Send(m *LeaseKeepAliveResponse) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func (x *leaseLeaseKeepAliveServer) Recv() (*LeaseKeepAliveRequest, error) {
- m := new(LeaseKeepAliveRequest)
- if err := x.ServerStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func _Lease_LeaseTimeToLive_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(LeaseTimeToLiveRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(LeaseServer).LeaseTimeToLive(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Lease/LeaseTimeToLive",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(LeaseServer).LeaseTimeToLive(ctx, req.(*LeaseTimeToLiveRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Lease_LeaseLeases_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(LeaseLeasesRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(LeaseServer).LeaseLeases(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Lease/LeaseLeases",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(LeaseServer).LeaseLeases(ctx, req.(*LeaseLeasesRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _Lease_serviceDesc = grpc.ServiceDesc{
- ServiceName: "etcdserverpb.Lease",
- HandlerType: (*LeaseServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "LeaseGrant",
- Handler: _Lease_LeaseGrant_Handler,
- },
- {
- MethodName: "LeaseRevoke",
- Handler: _Lease_LeaseRevoke_Handler,
- },
- {
- MethodName: "LeaseTimeToLive",
- Handler: _Lease_LeaseTimeToLive_Handler,
- },
- {
- MethodName: "LeaseLeases",
- Handler: _Lease_LeaseLeases_Handler,
- },
- },
- Streams: []grpc.StreamDesc{
- {
- StreamName: "LeaseKeepAlive",
- Handler: _Lease_LeaseKeepAlive_Handler,
- ServerStreams: true,
- ClientStreams: true,
- },
- },
- Metadata: "rpc.proto",
-}
-
-// ClusterClient is the client API for Cluster service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type ClusterClient interface {
- // MemberAdd adds a member into the cluster.
- MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error)
- // MemberRemove removes an existing member from the cluster.
- MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error)
- // MemberUpdate updates the member configuration.
- MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error)
- // MemberList lists all the members in the cluster.
- MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error)
- // MemberPromote promotes a member from raft learner (non-voting) to raft voting member.
- MemberPromote(ctx context.Context, in *MemberPromoteRequest, opts ...grpc.CallOption) (*MemberPromoteResponse, error)
-}
-
-type clusterClient struct {
- cc *grpc.ClientConn
-}
-
-func NewClusterClient(cc *grpc.ClientConn) ClusterClient {
- return &clusterClient{cc}
-}
-
-func (c *clusterClient) MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error) {
- out := new(MemberAddResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Cluster/MemberAdd", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *clusterClient) MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error) {
- out := new(MemberRemoveResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Cluster/MemberRemove", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *clusterClient) MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error) {
- out := new(MemberUpdateResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Cluster/MemberUpdate", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *clusterClient) MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error) {
- out := new(MemberListResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Cluster/MemberList", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *clusterClient) MemberPromote(ctx context.Context, in *MemberPromoteRequest, opts ...grpc.CallOption) (*MemberPromoteResponse, error) {
- out := new(MemberPromoteResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Cluster/MemberPromote", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// ClusterServer is the server API for Cluster service.
-type ClusterServer interface {
- // MemberAdd adds a member into the cluster.
- MemberAdd(context.Context, *MemberAddRequest) (*MemberAddResponse, error)
- // MemberRemove removes an existing member from the cluster.
- MemberRemove(context.Context, *MemberRemoveRequest) (*MemberRemoveResponse, error)
- // MemberUpdate updates the member configuration.
- MemberUpdate(context.Context, *MemberUpdateRequest) (*MemberUpdateResponse, error)
- // MemberList lists all the members in the cluster.
- MemberList(context.Context, *MemberListRequest) (*MemberListResponse, error)
- // MemberPromote promotes a member from raft learner (non-voting) to raft voting member.
- MemberPromote(context.Context, *MemberPromoteRequest) (*MemberPromoteResponse, error)
-}
-
-// UnimplementedClusterServer can be embedded to have forward compatible implementations.
-type UnimplementedClusterServer struct {
-}
-
-func (*UnimplementedClusterServer) MemberAdd(ctx context.Context, req *MemberAddRequest) (*MemberAddResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method MemberAdd not implemented")
-}
-func (*UnimplementedClusterServer) MemberRemove(ctx context.Context, req *MemberRemoveRequest) (*MemberRemoveResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method MemberRemove not implemented")
-}
-func (*UnimplementedClusterServer) MemberUpdate(ctx context.Context, req *MemberUpdateRequest) (*MemberUpdateResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method MemberUpdate not implemented")
-}
-func (*UnimplementedClusterServer) MemberList(ctx context.Context, req *MemberListRequest) (*MemberListResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method MemberList not implemented")
-}
-func (*UnimplementedClusterServer) MemberPromote(ctx context.Context, req *MemberPromoteRequest) (*MemberPromoteResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method MemberPromote not implemented")
-}
-
-func RegisterClusterServer(s *grpc.Server, srv ClusterServer) {
- s.RegisterService(&_Cluster_serviceDesc, srv)
-}
-
-func _Cluster_MemberAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MemberAddRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(ClusterServer).MemberAdd(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Cluster/MemberAdd",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ClusterServer).MemberAdd(ctx, req.(*MemberAddRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Cluster_MemberRemove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MemberRemoveRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(ClusterServer).MemberRemove(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Cluster/MemberRemove",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ClusterServer).MemberRemove(ctx, req.(*MemberRemoveRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Cluster_MemberUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MemberUpdateRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(ClusterServer).MemberUpdate(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Cluster/MemberUpdate",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ClusterServer).MemberUpdate(ctx, req.(*MemberUpdateRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Cluster_MemberList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MemberListRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(ClusterServer).MemberList(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Cluster/MemberList",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ClusterServer).MemberList(ctx, req.(*MemberListRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Cluster_MemberPromote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MemberPromoteRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(ClusterServer).MemberPromote(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Cluster/MemberPromote",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(ClusterServer).MemberPromote(ctx, req.(*MemberPromoteRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _Cluster_serviceDesc = grpc.ServiceDesc{
- ServiceName: "etcdserverpb.Cluster",
- HandlerType: (*ClusterServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "MemberAdd",
- Handler: _Cluster_MemberAdd_Handler,
- },
- {
- MethodName: "MemberRemove",
- Handler: _Cluster_MemberRemove_Handler,
- },
- {
- MethodName: "MemberUpdate",
- Handler: _Cluster_MemberUpdate_Handler,
- },
- {
- MethodName: "MemberList",
- Handler: _Cluster_MemberList_Handler,
- },
- {
- MethodName: "MemberPromote",
- Handler: _Cluster_MemberPromote_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "rpc.proto",
-}
-
-// MaintenanceClient is the client API for Maintenance service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type MaintenanceClient interface {
- // Alarm activates, deactivates, and queries alarms regarding cluster health.
- Alarm(ctx context.Context, in *AlarmRequest, opts ...grpc.CallOption) (*AlarmResponse, error)
- // Status gets the status of the member.
- Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error)
- // Defragment defragments a member's backend database to recover storage space.
- Defragment(ctx context.Context, in *DefragmentRequest, opts ...grpc.CallOption) (*DefragmentResponse, error)
- // Hash computes the hash of whole backend keyspace,
- // including key, lease, and other buckets in storage.
- // This is designed for testing ONLY!
- // Do not rely on this in production with ongoing transactions,
- // since Hash operation does not hold MVCC locks.
- // Use "HashKV" API instead for "key" bucket consistency checks.
- Hash(ctx context.Context, in *HashRequest, opts ...grpc.CallOption) (*HashResponse, error)
- // HashKV computes the hash of all MVCC keys up to a given revision.
- // It only iterates "key" bucket in backend storage.
- HashKV(ctx context.Context, in *HashKVRequest, opts ...grpc.CallOption) (*HashKVResponse, error)
- // Snapshot sends a snapshot of the entire backend from a member over a stream to a client.
- Snapshot(ctx context.Context, in *SnapshotRequest, opts ...grpc.CallOption) (Maintenance_SnapshotClient, error)
- // MoveLeader requests current leader node to transfer its leadership to transferee.
- MoveLeader(ctx context.Context, in *MoveLeaderRequest, opts ...grpc.CallOption) (*MoveLeaderResponse, error)
- // Downgrade requests downgrade, cancel downgrade on the cluster version.
- Downgrade(ctx context.Context, in *DowngradeRequest, opts ...grpc.CallOption) (*DowngradeResponse, error)
-}
-
-type maintenanceClient struct {
- cc *grpc.ClientConn
-}
-
-func NewMaintenanceClient(cc *grpc.ClientConn) MaintenanceClient {
- return &maintenanceClient{cc}
-}
-
-func (c *maintenanceClient) Alarm(ctx context.Context, in *AlarmRequest, opts ...grpc.CallOption) (*AlarmResponse, error) {
- out := new(AlarmResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Maintenance/Alarm", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *maintenanceClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) {
- out := new(StatusResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Maintenance/Status", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *maintenanceClient) Defragment(ctx context.Context, in *DefragmentRequest, opts ...grpc.CallOption) (*DefragmentResponse, error) {
- out := new(DefragmentResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Maintenance/Defragment", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *maintenanceClient) Hash(ctx context.Context, in *HashRequest, opts ...grpc.CallOption) (*HashResponse, error) {
- out := new(HashResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Maintenance/Hash", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *maintenanceClient) HashKV(ctx context.Context, in *HashKVRequest, opts ...grpc.CallOption) (*HashKVResponse, error) {
- out := new(HashKVResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Maintenance/HashKV", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *maintenanceClient) Snapshot(ctx context.Context, in *SnapshotRequest, opts ...grpc.CallOption) (Maintenance_SnapshotClient, error) {
- stream, err := c.cc.NewStream(ctx, &_Maintenance_serviceDesc.Streams[0], "/etcdserverpb.Maintenance/Snapshot", opts...)
- if err != nil {
- return nil, err
- }
- x := &maintenanceSnapshotClient{stream}
- if err := x.ClientStream.SendMsg(in); err != nil {
- return nil, err
- }
- if err := x.ClientStream.CloseSend(); err != nil {
- return nil, err
- }
- return x, nil
-}
-
-type Maintenance_SnapshotClient interface {
- Recv() (*SnapshotResponse, error)
- grpc.ClientStream
-}
-
-type maintenanceSnapshotClient struct {
- grpc.ClientStream
-}
-
-func (x *maintenanceSnapshotClient) Recv() (*SnapshotResponse, error) {
- m := new(SnapshotResponse)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func (c *maintenanceClient) MoveLeader(ctx context.Context, in *MoveLeaderRequest, opts ...grpc.CallOption) (*MoveLeaderResponse, error) {
- out := new(MoveLeaderResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Maintenance/MoveLeader", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *maintenanceClient) Downgrade(ctx context.Context, in *DowngradeRequest, opts ...grpc.CallOption) (*DowngradeResponse, error) {
- out := new(DowngradeResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Maintenance/Downgrade", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// MaintenanceServer is the server API for Maintenance service.
-type MaintenanceServer interface {
- // Alarm activates, deactivates, and queries alarms regarding cluster health.
- Alarm(context.Context, *AlarmRequest) (*AlarmResponse, error)
- // Status gets the status of the member.
- Status(context.Context, *StatusRequest) (*StatusResponse, error)
- // Defragment defragments a member's backend database to recover storage space.
- Defragment(context.Context, *DefragmentRequest) (*DefragmentResponse, error)
- // Hash computes the hash of whole backend keyspace,
- // including key, lease, and other buckets in storage.
- // This is designed for testing ONLY!
- // Do not rely on this in production with ongoing transactions,
- // since Hash operation does not hold MVCC locks.
- // Use "HashKV" API instead for "key" bucket consistency checks.
- Hash(context.Context, *HashRequest) (*HashResponse, error)
- // HashKV computes the hash of all MVCC keys up to a given revision.
- // It only iterates "key" bucket in backend storage.
- HashKV(context.Context, *HashKVRequest) (*HashKVResponse, error)
- // Snapshot sends a snapshot of the entire backend from a member over a stream to a client.
- Snapshot(*SnapshotRequest, Maintenance_SnapshotServer) error
- // MoveLeader requests current leader node to transfer its leadership to transferee.
- MoveLeader(context.Context, *MoveLeaderRequest) (*MoveLeaderResponse, error)
- // Downgrade requests downgrade, cancel downgrade on the cluster version.
- Downgrade(context.Context, *DowngradeRequest) (*DowngradeResponse, error)
-}
-
-// UnimplementedMaintenanceServer can be embedded to have forward compatible implementations.
-type UnimplementedMaintenanceServer struct {
-}
-
-func (*UnimplementedMaintenanceServer) Alarm(ctx context.Context, req *AlarmRequest) (*AlarmResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Alarm not implemented")
-}
-func (*UnimplementedMaintenanceServer) Status(ctx context.Context, req *StatusRequest) (*StatusResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Status not implemented")
-}
-func (*UnimplementedMaintenanceServer) Defragment(ctx context.Context, req *DefragmentRequest) (*DefragmentResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Defragment not implemented")
-}
-func (*UnimplementedMaintenanceServer) Hash(ctx context.Context, req *HashRequest) (*HashResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Hash not implemented")
-}
-func (*UnimplementedMaintenanceServer) HashKV(ctx context.Context, req *HashKVRequest) (*HashKVResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method HashKV not implemented")
-}
-func (*UnimplementedMaintenanceServer) Snapshot(req *SnapshotRequest, srv Maintenance_SnapshotServer) error {
- return status.Errorf(codes.Unimplemented, "method Snapshot not implemented")
-}
-func (*UnimplementedMaintenanceServer) MoveLeader(ctx context.Context, req *MoveLeaderRequest) (*MoveLeaderResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method MoveLeader not implemented")
-}
-func (*UnimplementedMaintenanceServer) Downgrade(ctx context.Context, req *DowngradeRequest) (*DowngradeResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Downgrade not implemented")
-}
-
-func RegisterMaintenanceServer(s *grpc.Server, srv MaintenanceServer) {
- s.RegisterService(&_Maintenance_serviceDesc, srv)
-}
-
-func _Maintenance_Alarm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AlarmRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MaintenanceServer).Alarm(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Maintenance/Alarm",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MaintenanceServer).Alarm(ctx, req.(*AlarmRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Maintenance_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(StatusRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MaintenanceServer).Status(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Maintenance/Status",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MaintenanceServer).Status(ctx, req.(*StatusRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Maintenance_Defragment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(DefragmentRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MaintenanceServer).Defragment(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Maintenance/Defragment",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MaintenanceServer).Defragment(ctx, req.(*DefragmentRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Maintenance_Hash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(HashRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MaintenanceServer).Hash(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Maintenance/Hash",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MaintenanceServer).Hash(ctx, req.(*HashRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Maintenance_HashKV_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(HashKVRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MaintenanceServer).HashKV(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Maintenance/HashKV",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MaintenanceServer).HashKV(ctx, req.(*HashKVRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Maintenance_Snapshot_Handler(srv interface{}, stream grpc.ServerStream) error {
- m := new(SnapshotRequest)
- if err := stream.RecvMsg(m); err != nil {
- return err
- }
- return srv.(MaintenanceServer).Snapshot(m, &maintenanceSnapshotServer{stream})
-}
-
-type Maintenance_SnapshotServer interface {
- Send(*SnapshotResponse) error
- grpc.ServerStream
-}
-
-type maintenanceSnapshotServer struct {
- grpc.ServerStream
-}
-
-func (x *maintenanceSnapshotServer) Send(m *SnapshotResponse) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func _Maintenance_MoveLeader_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MoveLeaderRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MaintenanceServer).MoveLeader(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Maintenance/MoveLeader",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MaintenanceServer).MoveLeader(ctx, req.(*MoveLeaderRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Maintenance_Downgrade_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(DowngradeRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MaintenanceServer).Downgrade(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Maintenance/Downgrade",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MaintenanceServer).Downgrade(ctx, req.(*DowngradeRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _Maintenance_serviceDesc = grpc.ServiceDesc{
- ServiceName: "etcdserverpb.Maintenance",
- HandlerType: (*MaintenanceServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "Alarm",
- Handler: _Maintenance_Alarm_Handler,
- },
- {
- MethodName: "Status",
- Handler: _Maintenance_Status_Handler,
- },
- {
- MethodName: "Defragment",
- Handler: _Maintenance_Defragment_Handler,
- },
- {
- MethodName: "Hash",
- Handler: _Maintenance_Hash_Handler,
- },
- {
- MethodName: "HashKV",
- Handler: _Maintenance_HashKV_Handler,
- },
- {
- MethodName: "MoveLeader",
- Handler: _Maintenance_MoveLeader_Handler,
- },
- {
- MethodName: "Downgrade",
- Handler: _Maintenance_Downgrade_Handler,
- },
- },
- Streams: []grpc.StreamDesc{
- {
- StreamName: "Snapshot",
- Handler: _Maintenance_Snapshot_Handler,
- ServerStreams: true,
- },
- },
- Metadata: "rpc.proto",
-}
-
-// AuthClient is the client API for Auth service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type AuthClient interface {
- // AuthEnable enables authentication.
- AuthEnable(ctx context.Context, in *AuthEnableRequest, opts ...grpc.CallOption) (*AuthEnableResponse, error)
- // AuthDisable disables authentication.
- AuthDisable(ctx context.Context, in *AuthDisableRequest, opts ...grpc.CallOption) (*AuthDisableResponse, error)
- // AuthStatus displays authentication status.
- AuthStatus(ctx context.Context, in *AuthStatusRequest, opts ...grpc.CallOption) (*AuthStatusResponse, error)
- // Authenticate processes an authenticate request.
- Authenticate(ctx context.Context, in *AuthenticateRequest, opts ...grpc.CallOption) (*AuthenticateResponse, error)
- // UserAdd adds a new user. User name cannot be empty.
- UserAdd(ctx context.Context, in *AuthUserAddRequest, opts ...grpc.CallOption) (*AuthUserAddResponse, error)
- // UserGet gets detailed user information.
- UserGet(ctx context.Context, in *AuthUserGetRequest, opts ...grpc.CallOption) (*AuthUserGetResponse, error)
- // UserList gets a list of all users.
- UserList(ctx context.Context, in *AuthUserListRequest, opts ...grpc.CallOption) (*AuthUserListResponse, error)
- // UserDelete deletes a specified user.
- UserDelete(ctx context.Context, in *AuthUserDeleteRequest, opts ...grpc.CallOption) (*AuthUserDeleteResponse, error)
- // UserChangePassword changes the password of a specified user.
- UserChangePassword(ctx context.Context, in *AuthUserChangePasswordRequest, opts ...grpc.CallOption) (*AuthUserChangePasswordResponse, error)
- // UserGrant grants a role to a specified user.
- UserGrantRole(ctx context.Context, in *AuthUserGrantRoleRequest, opts ...grpc.CallOption) (*AuthUserGrantRoleResponse, error)
- // UserRevokeRole revokes a role of specified user.
- UserRevokeRole(ctx context.Context, in *AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (*AuthUserRevokeRoleResponse, error)
- // RoleAdd adds a new role. Role name cannot be empty.
- RoleAdd(ctx context.Context, in *AuthRoleAddRequest, opts ...grpc.CallOption) (*AuthRoleAddResponse, error)
- // RoleGet gets detailed role information.
- RoleGet(ctx context.Context, in *AuthRoleGetRequest, opts ...grpc.CallOption) (*AuthRoleGetResponse, error)
- // RoleList gets lists of all roles.
- RoleList(ctx context.Context, in *AuthRoleListRequest, opts ...grpc.CallOption) (*AuthRoleListResponse, error)
- // RoleDelete deletes a specified role.
- RoleDelete(ctx context.Context, in *AuthRoleDeleteRequest, opts ...grpc.CallOption) (*AuthRoleDeleteResponse, error)
- // RoleGrantPermission grants a permission of a specified key or range to a specified role.
- RoleGrantPermission(ctx context.Context, in *AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (*AuthRoleGrantPermissionResponse, error)
- // RoleRevokePermission revokes a key or range permission of a specified role.
- RoleRevokePermission(ctx context.Context, in *AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (*AuthRoleRevokePermissionResponse, error)
-}
-
-type authClient struct {
- cc *grpc.ClientConn
-}
-
-func NewAuthClient(cc *grpc.ClientConn) AuthClient {
- return &authClient{cc}
-}
-
-func (c *authClient) AuthEnable(ctx context.Context, in *AuthEnableRequest, opts ...grpc.CallOption) (*AuthEnableResponse, error) {
- out := new(AuthEnableResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/AuthEnable", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) AuthDisable(ctx context.Context, in *AuthDisableRequest, opts ...grpc.CallOption) (*AuthDisableResponse, error) {
- out := new(AuthDisableResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/AuthDisable", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) AuthStatus(ctx context.Context, in *AuthStatusRequest, opts ...grpc.CallOption) (*AuthStatusResponse, error) {
- out := new(AuthStatusResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/AuthStatus", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) Authenticate(ctx context.Context, in *AuthenticateRequest, opts ...grpc.CallOption) (*AuthenticateResponse, error) {
- out := new(AuthenticateResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/Authenticate", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) UserAdd(ctx context.Context, in *AuthUserAddRequest, opts ...grpc.CallOption) (*AuthUserAddResponse, error) {
- out := new(AuthUserAddResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/UserAdd", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) UserGet(ctx context.Context, in *AuthUserGetRequest, opts ...grpc.CallOption) (*AuthUserGetResponse, error) {
- out := new(AuthUserGetResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/UserGet", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) UserList(ctx context.Context, in *AuthUserListRequest, opts ...grpc.CallOption) (*AuthUserListResponse, error) {
- out := new(AuthUserListResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/UserList", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) UserDelete(ctx context.Context, in *AuthUserDeleteRequest, opts ...grpc.CallOption) (*AuthUserDeleteResponse, error) {
- out := new(AuthUserDeleteResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/UserDelete", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) UserChangePassword(ctx context.Context, in *AuthUserChangePasswordRequest, opts ...grpc.CallOption) (*AuthUserChangePasswordResponse, error) {
- out := new(AuthUserChangePasswordResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/UserChangePassword", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) UserGrantRole(ctx context.Context, in *AuthUserGrantRoleRequest, opts ...grpc.CallOption) (*AuthUserGrantRoleResponse, error) {
- out := new(AuthUserGrantRoleResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/UserGrantRole", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) UserRevokeRole(ctx context.Context, in *AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (*AuthUserRevokeRoleResponse, error) {
- out := new(AuthUserRevokeRoleResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/UserRevokeRole", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) RoleAdd(ctx context.Context, in *AuthRoleAddRequest, opts ...grpc.CallOption) (*AuthRoleAddResponse, error) {
- out := new(AuthRoleAddResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/RoleAdd", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) RoleGet(ctx context.Context, in *AuthRoleGetRequest, opts ...grpc.CallOption) (*AuthRoleGetResponse, error) {
- out := new(AuthRoleGetResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/RoleGet", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) RoleList(ctx context.Context, in *AuthRoleListRequest, opts ...grpc.CallOption) (*AuthRoleListResponse, error) {
- out := new(AuthRoleListResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/RoleList", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) RoleDelete(ctx context.Context, in *AuthRoleDeleteRequest, opts ...grpc.CallOption) (*AuthRoleDeleteResponse, error) {
- out := new(AuthRoleDeleteResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/RoleDelete", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) RoleGrantPermission(ctx context.Context, in *AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (*AuthRoleGrantPermissionResponse, error) {
- out := new(AuthRoleGrantPermissionResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/RoleGrantPermission", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *authClient) RoleRevokePermission(ctx context.Context, in *AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (*AuthRoleRevokePermissionResponse, error) {
- out := new(AuthRoleRevokePermissionResponse)
- err := c.cc.Invoke(ctx, "/etcdserverpb.Auth/RoleRevokePermission", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// AuthServer is the server API for Auth service.
-type AuthServer interface {
- // AuthEnable enables authentication.
- AuthEnable(context.Context, *AuthEnableRequest) (*AuthEnableResponse, error)
- // AuthDisable disables authentication.
- AuthDisable(context.Context, *AuthDisableRequest) (*AuthDisableResponse, error)
- // AuthStatus displays authentication status.
- AuthStatus(context.Context, *AuthStatusRequest) (*AuthStatusResponse, error)
- // Authenticate processes an authenticate request.
- Authenticate(context.Context, *AuthenticateRequest) (*AuthenticateResponse, error)
- // UserAdd adds a new user. User name cannot be empty.
- UserAdd(context.Context, *AuthUserAddRequest) (*AuthUserAddResponse, error)
- // UserGet gets detailed user information.
- UserGet(context.Context, *AuthUserGetRequest) (*AuthUserGetResponse, error)
- // UserList gets a list of all users.
- UserList(context.Context, *AuthUserListRequest) (*AuthUserListResponse, error)
- // UserDelete deletes a specified user.
- UserDelete(context.Context, *AuthUserDeleteRequest) (*AuthUserDeleteResponse, error)
- // UserChangePassword changes the password of a specified user.
- UserChangePassword(context.Context, *AuthUserChangePasswordRequest) (*AuthUserChangePasswordResponse, error)
- // UserGrant grants a role to a specified user.
- UserGrantRole(context.Context, *AuthUserGrantRoleRequest) (*AuthUserGrantRoleResponse, error)
- // UserRevokeRole revokes a role of specified user.
- UserRevokeRole(context.Context, *AuthUserRevokeRoleRequest) (*AuthUserRevokeRoleResponse, error)
- // RoleAdd adds a new role. Role name cannot be empty.
- RoleAdd(context.Context, *AuthRoleAddRequest) (*AuthRoleAddResponse, error)
- // RoleGet gets detailed role information.
- RoleGet(context.Context, *AuthRoleGetRequest) (*AuthRoleGetResponse, error)
- // RoleList gets lists of all roles.
- RoleList(context.Context, *AuthRoleListRequest) (*AuthRoleListResponse, error)
- // RoleDelete deletes a specified role.
- RoleDelete(context.Context, *AuthRoleDeleteRequest) (*AuthRoleDeleteResponse, error)
- // RoleGrantPermission grants a permission of a specified key or range to a specified role.
- RoleGrantPermission(context.Context, *AuthRoleGrantPermissionRequest) (*AuthRoleGrantPermissionResponse, error)
- // RoleRevokePermission revokes a key or range permission of a specified role.
- RoleRevokePermission(context.Context, *AuthRoleRevokePermissionRequest) (*AuthRoleRevokePermissionResponse, error)
-}
-
-// UnimplementedAuthServer can be embedded to have forward compatible implementations.
-type UnimplementedAuthServer struct {
-}
-
-func (*UnimplementedAuthServer) AuthEnable(ctx context.Context, req *AuthEnableRequest) (*AuthEnableResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method AuthEnable not implemented")
-}
-func (*UnimplementedAuthServer) AuthDisable(ctx context.Context, req *AuthDisableRequest) (*AuthDisableResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method AuthDisable not implemented")
-}
-func (*UnimplementedAuthServer) AuthStatus(ctx context.Context, req *AuthStatusRequest) (*AuthStatusResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method AuthStatus not implemented")
-}
-func (*UnimplementedAuthServer) Authenticate(ctx context.Context, req *AuthenticateRequest) (*AuthenticateResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Authenticate not implemented")
-}
-func (*UnimplementedAuthServer) UserAdd(ctx context.Context, req *AuthUserAddRequest) (*AuthUserAddResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UserAdd not implemented")
-}
-func (*UnimplementedAuthServer) UserGet(ctx context.Context, req *AuthUserGetRequest) (*AuthUserGetResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UserGet not implemented")
-}
-func (*UnimplementedAuthServer) UserList(ctx context.Context, req *AuthUserListRequest) (*AuthUserListResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UserList not implemented")
-}
-func (*UnimplementedAuthServer) UserDelete(ctx context.Context, req *AuthUserDeleteRequest) (*AuthUserDeleteResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UserDelete not implemented")
-}
-func (*UnimplementedAuthServer) UserChangePassword(ctx context.Context, req *AuthUserChangePasswordRequest) (*AuthUserChangePasswordResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UserChangePassword not implemented")
-}
-func (*UnimplementedAuthServer) UserGrantRole(ctx context.Context, req *AuthUserGrantRoleRequest) (*AuthUserGrantRoleResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UserGrantRole not implemented")
-}
-func (*UnimplementedAuthServer) UserRevokeRole(ctx context.Context, req *AuthUserRevokeRoleRequest) (*AuthUserRevokeRoleResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UserRevokeRole not implemented")
-}
-func (*UnimplementedAuthServer) RoleAdd(ctx context.Context, req *AuthRoleAddRequest) (*AuthRoleAddResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method RoleAdd not implemented")
-}
-func (*UnimplementedAuthServer) RoleGet(ctx context.Context, req *AuthRoleGetRequest) (*AuthRoleGetResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method RoleGet not implemented")
-}
-func (*UnimplementedAuthServer) RoleList(ctx context.Context, req *AuthRoleListRequest) (*AuthRoleListResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method RoleList not implemented")
-}
-func (*UnimplementedAuthServer) RoleDelete(ctx context.Context, req *AuthRoleDeleteRequest) (*AuthRoleDeleteResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method RoleDelete not implemented")
-}
-func (*UnimplementedAuthServer) RoleGrantPermission(ctx context.Context, req *AuthRoleGrantPermissionRequest) (*AuthRoleGrantPermissionResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method RoleGrantPermission not implemented")
-}
-func (*UnimplementedAuthServer) RoleRevokePermission(ctx context.Context, req *AuthRoleRevokePermissionRequest) (*AuthRoleRevokePermissionResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method RoleRevokePermission not implemented")
-}
-
-func RegisterAuthServer(s *grpc.Server, srv AuthServer) {
- s.RegisterService(&_Auth_serviceDesc, srv)
-}
-
-func _Auth_AuthEnable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthEnableRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).AuthEnable(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/AuthEnable",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).AuthEnable(ctx, req.(*AuthEnableRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_AuthDisable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthDisableRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).AuthDisable(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/AuthDisable",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).AuthDisable(ctx, req.(*AuthDisableRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_AuthStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthStatusRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).AuthStatus(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/AuthStatus",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).AuthStatus(ctx, req.(*AuthStatusRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_Authenticate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthenticateRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).Authenticate(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/Authenticate",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).Authenticate(ctx, req.(*AuthenticateRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_UserAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthUserAddRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).UserAdd(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/UserAdd",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).UserAdd(ctx, req.(*AuthUserAddRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_UserGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthUserGetRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).UserGet(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/UserGet",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).UserGet(ctx, req.(*AuthUserGetRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_UserList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthUserListRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).UserList(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/UserList",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).UserList(ctx, req.(*AuthUserListRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_UserDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthUserDeleteRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).UserDelete(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/UserDelete",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).UserDelete(ctx, req.(*AuthUserDeleteRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_UserChangePassword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthUserChangePasswordRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).UserChangePassword(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/UserChangePassword",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).UserChangePassword(ctx, req.(*AuthUserChangePasswordRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_UserGrantRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthUserGrantRoleRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).UserGrantRole(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/UserGrantRole",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).UserGrantRole(ctx, req.(*AuthUserGrantRoleRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_UserRevokeRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthUserRevokeRoleRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).UserRevokeRole(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/UserRevokeRole",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).UserRevokeRole(ctx, req.(*AuthUserRevokeRoleRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_RoleAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthRoleAddRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).RoleAdd(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/RoleAdd",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).RoleAdd(ctx, req.(*AuthRoleAddRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_RoleGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthRoleGetRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).RoleGet(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/RoleGet",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).RoleGet(ctx, req.(*AuthRoleGetRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_RoleList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthRoleListRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).RoleList(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/RoleList",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).RoleList(ctx, req.(*AuthRoleListRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_RoleDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthRoleDeleteRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).RoleDelete(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/RoleDelete",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).RoleDelete(ctx, req.(*AuthRoleDeleteRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_RoleGrantPermission_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthRoleGrantPermissionRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).RoleGrantPermission(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/RoleGrantPermission",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).RoleGrantPermission(ctx, req.(*AuthRoleGrantPermissionRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Auth_RoleRevokePermission_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(AuthRoleRevokePermissionRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(AuthServer).RoleRevokePermission(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/etcdserverpb.Auth/RoleRevokePermission",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AuthServer).RoleRevokePermission(ctx, req.(*AuthRoleRevokePermissionRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _Auth_serviceDesc = grpc.ServiceDesc{
- ServiceName: "etcdserverpb.Auth",
- HandlerType: (*AuthServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "AuthEnable",
- Handler: _Auth_AuthEnable_Handler,
- },
- {
- MethodName: "AuthDisable",
- Handler: _Auth_AuthDisable_Handler,
- },
- {
- MethodName: "AuthStatus",
- Handler: _Auth_AuthStatus_Handler,
- },
- {
- MethodName: "Authenticate",
- Handler: _Auth_Authenticate_Handler,
- },
- {
- MethodName: "UserAdd",
- Handler: _Auth_UserAdd_Handler,
- },
- {
- MethodName: "UserGet",
- Handler: _Auth_UserGet_Handler,
- },
- {
- MethodName: "UserList",
- Handler: _Auth_UserList_Handler,
- },
- {
- MethodName: "UserDelete",
- Handler: _Auth_UserDelete_Handler,
- },
- {
- MethodName: "UserChangePassword",
- Handler: _Auth_UserChangePassword_Handler,
- },
- {
- MethodName: "UserGrantRole",
- Handler: _Auth_UserGrantRole_Handler,
- },
- {
- MethodName: "UserRevokeRole",
- Handler: _Auth_UserRevokeRole_Handler,
- },
- {
- MethodName: "RoleAdd",
- Handler: _Auth_RoleAdd_Handler,
- },
- {
- MethodName: "RoleGet",
- Handler: _Auth_RoleGet_Handler,
- },
- {
- MethodName: "RoleList",
- Handler: _Auth_RoleList_Handler,
- },
- {
- MethodName: "RoleDelete",
- Handler: _Auth_RoleDelete_Handler,
- },
- {
- MethodName: "RoleGrantPermission",
- Handler: _Auth_RoleGrantPermission_Handler,
- },
- {
- MethodName: "RoleRevokePermission",
- Handler: _Auth_RoleRevokePermission_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "rpc.proto",
-}
-
-func (m *ResponseHeader) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *ResponseHeader) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ResponseHeader) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.RaftTerm != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.RaftTerm))
- i--
- dAtA[i] = 0x20
- }
- if m.Revision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Revision))
- i--
- dAtA[i] = 0x18
- }
- if m.MemberId != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.MemberId))
- i--
- dAtA[i] = 0x10
- }
- if m.ClusterId != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ClusterId))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *RangeRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *RangeRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RangeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.MaxCreateRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.MaxCreateRevision))
- i--
- dAtA[i] = 0x68
- }
- if m.MinCreateRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.MinCreateRevision))
- i--
- dAtA[i] = 0x60
- }
- if m.MaxModRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.MaxModRevision))
- i--
- dAtA[i] = 0x58
- }
- if m.MinModRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.MinModRevision))
- i--
- dAtA[i] = 0x50
- }
- if m.CountOnly {
- i--
- if m.CountOnly {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x48
- }
- if m.KeysOnly {
- i--
- if m.KeysOnly {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x40
- }
- if m.Serializable {
- i--
- if m.Serializable {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x38
- }
- if m.SortTarget != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.SortTarget))
- i--
- dAtA[i] = 0x30
- }
- if m.SortOrder != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.SortOrder))
- i--
- dAtA[i] = 0x28
- }
- if m.Revision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Revision))
- i--
- dAtA[i] = 0x20
- }
- if m.Limit != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Limit))
- i--
- dAtA[i] = 0x18
- }
- if len(m.RangeEnd) > 0 {
- i -= len(m.RangeEnd)
- copy(dAtA[i:], m.RangeEnd)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *RangeResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *RangeResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RangeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Count != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Count))
- i--
- dAtA[i] = 0x20
- }
- if m.More {
- i--
- if m.More {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x18
- }
- if len(m.Kvs) > 0 {
- for iNdEx := len(m.Kvs) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Kvs[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *PutRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *PutRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *PutRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.IgnoreLease {
- i--
- if m.IgnoreLease {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x30
- }
- if m.IgnoreValue {
- i--
- if m.IgnoreValue {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x28
- }
- if m.PrevKv {
- i--
- if m.PrevKv {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x20
- }
- if m.Lease != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Lease))
- i--
- dAtA[i] = 0x18
- }
- if len(m.Value) > 0 {
- i -= len(m.Value)
- copy(dAtA[i:], m.Value)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Value)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *PutResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *PutResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *PutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.PrevKv != nil {
- {
- size, err := m.PrevKv.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *DeleteRangeRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *DeleteRangeRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *DeleteRangeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.PrevKv {
- i--
- if m.PrevKv {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x18
- }
- if len(m.RangeEnd) > 0 {
- i -= len(m.RangeEnd)
- copy(dAtA[i:], m.RangeEnd)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *DeleteRangeResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *DeleteRangeResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *DeleteRangeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.PrevKvs) > 0 {
- for iNdEx := len(m.PrevKvs) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.PrevKvs[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- }
- if m.Deleted != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Deleted))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *RequestOp) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *RequestOp) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RequestOp) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Request != nil {
- {
- size := m.Request.Size()
- i -= size
- if _, err := m.Request.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- }
- }
- return len(dAtA) - i, nil
-}
-
-func (m *RequestOp_RequestRange) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RequestOp_RequestRange) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.RequestRange != nil {
- {
- size, err := m.RequestRange.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-func (m *RequestOp_RequestPut) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RequestOp_RequestPut) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.RequestPut != nil {
- {
- size, err := m.RequestPut.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- return len(dAtA) - i, nil
-}
-func (m *RequestOp_RequestDeleteRange) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RequestOp_RequestDeleteRange) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.RequestDeleteRange != nil {
- {
- size, err := m.RequestDeleteRange.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- return len(dAtA) - i, nil
-}
-func (m *RequestOp_RequestTxn) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RequestOp_RequestTxn) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.RequestTxn != nil {
- {
- size, err := m.RequestTxn.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
- return len(dAtA) - i, nil
-}
-func (m *ResponseOp) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *ResponseOp) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ResponseOp) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Response != nil {
- {
- size := m.Response.Size()
- i -= size
- if _, err := m.Response.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- }
- }
- return len(dAtA) - i, nil
-}
-
-func (m *ResponseOp_ResponseRange) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ResponseOp_ResponseRange) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.ResponseRange != nil {
- {
- size, err := m.ResponseRange.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-func (m *ResponseOp_ResponsePut) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ResponseOp_ResponsePut) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.ResponsePut != nil {
- {
- size, err := m.ResponsePut.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- return len(dAtA) - i, nil
-}
-func (m *ResponseOp_ResponseDeleteRange) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ResponseOp_ResponseDeleteRange) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.ResponseDeleteRange != nil {
- {
- size, err := m.ResponseDeleteRange.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- return len(dAtA) - i, nil
-}
-func (m *ResponseOp_ResponseTxn) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ResponseOp_ResponseTxn) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.ResponseTxn != nil {
- {
- size, err := m.ResponseTxn.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
- return len(dAtA) - i, nil
-}
-func (m *Compare) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Compare) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Compare) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.RangeEnd) > 0 {
- i -= len(m.RangeEnd)
- copy(dAtA[i:], m.RangeEnd)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd)))
- i--
- dAtA[i] = 0x4
- i--
- dAtA[i] = 0x82
- }
- if m.TargetUnion != nil {
- {
- size := m.TargetUnion.Size()
- i -= size
- if _, err := m.TargetUnion.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- }
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0x1a
- }
- if m.Target != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Target))
- i--
- dAtA[i] = 0x10
- }
- if m.Result != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Result))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *Compare_Version) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Compare_Version) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- i = encodeVarintRpc(dAtA, i, uint64(m.Version))
- i--
- dAtA[i] = 0x20
- return len(dAtA) - i, nil
-}
-func (m *Compare_CreateRevision) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Compare_CreateRevision) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- i = encodeVarintRpc(dAtA, i, uint64(m.CreateRevision))
- i--
- dAtA[i] = 0x28
- return len(dAtA) - i, nil
-}
-func (m *Compare_ModRevision) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Compare_ModRevision) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- i = encodeVarintRpc(dAtA, i, uint64(m.ModRevision))
- i--
- dAtA[i] = 0x30
- return len(dAtA) - i, nil
-}
-func (m *Compare_Value) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Compare_Value) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.Value != nil {
- i -= len(m.Value)
- copy(dAtA[i:], m.Value)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Value)))
- i--
- dAtA[i] = 0x3a
- }
- return len(dAtA) - i, nil
-}
-func (m *Compare_Lease) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Compare_Lease) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- i = encodeVarintRpc(dAtA, i, uint64(m.Lease))
- i--
- dAtA[i] = 0x40
- return len(dAtA) - i, nil
-}
-func (m *TxnRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *TxnRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *TxnRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Failure) > 0 {
- for iNdEx := len(m.Failure) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Failure[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- }
- if len(m.Success) > 0 {
- for iNdEx := len(m.Success) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Success[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if len(m.Compare) > 0 {
- for iNdEx := len(m.Compare) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Compare[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- }
- return len(dAtA) - i, nil
-}
-
-func (m *TxnResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *TxnResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *TxnResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Responses) > 0 {
- for iNdEx := len(m.Responses) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Responses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- }
- if m.Succeeded {
- i--
- if m.Succeeded {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *CompactionRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *CompactionRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *CompactionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Physical {
- i--
- if m.Physical {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x10
- }
- if m.Revision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Revision))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *CompactionResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *CompactionResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *CompactionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *HashRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *HashRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *HashRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *HashKVRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *HashKVRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *HashKVRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Revision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Revision))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *HashKVResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *HashKVResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *HashKVResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.CompactRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.CompactRevision))
- i--
- dAtA[i] = 0x18
- }
- if m.Hash != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Hash))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *HashResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *HashResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *HashResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Hash != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Hash))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *SnapshotRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *SnapshotRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *SnapshotRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *SnapshotResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *SnapshotResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *SnapshotResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Blob) > 0 {
- i -= len(m.Blob)
- copy(dAtA[i:], m.Blob)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Blob)))
- i--
- dAtA[i] = 0x1a
- }
- if m.RemainingBytes != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.RemainingBytes))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *WatchRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *WatchRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.RequestUnion != nil {
- {
- size := m.RequestUnion.Size()
- i -= size
- if _, err := m.RequestUnion.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- }
- }
- return len(dAtA) - i, nil
-}
-
-func (m *WatchRequest_CreateRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchRequest_CreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.CreateRequest != nil {
- {
- size, err := m.CreateRequest.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-func (m *WatchRequest_CancelRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchRequest_CancelRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.CancelRequest != nil {
- {
- size, err := m.CancelRequest.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- return len(dAtA) - i, nil
-}
-func (m *WatchRequest_ProgressRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchRequest_ProgressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.ProgressRequest != nil {
- {
- size, err := m.ProgressRequest.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- return len(dAtA) - i, nil
-}
-func (m *WatchCreateRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *WatchCreateRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchCreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Fragment {
- i--
- if m.Fragment {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x40
- }
- if m.WatchId != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.WatchId))
- i--
- dAtA[i] = 0x38
- }
- if m.PrevKv {
- i--
- if m.PrevKv {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x30
- }
- if len(m.Filters) > 0 {
- dAtA22 := make([]byte, len(m.Filters)*10)
- var j21 int
- for _, num := range m.Filters {
- for num >= 1<<7 {
- dAtA22[j21] = uint8(uint64(num)&0x7f | 0x80)
- num >>= 7
- j21++
- }
- dAtA22[j21] = uint8(num)
- j21++
- }
- i -= j21
- copy(dAtA[i:], dAtA22[:j21])
- i = encodeVarintRpc(dAtA, i, uint64(j21))
- i--
- dAtA[i] = 0x2a
- }
- if m.ProgressNotify {
- i--
- if m.ProgressNotify {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x20
- }
- if m.StartRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.StartRevision))
- i--
- dAtA[i] = 0x18
- }
- if len(m.RangeEnd) > 0 {
- i -= len(m.RangeEnd)
- copy(dAtA[i:], m.RangeEnd)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *WatchCancelRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *WatchCancelRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchCancelRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.WatchId != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.WatchId))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *WatchProgressRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *WatchProgressRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchProgressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *WatchResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *WatchResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *WatchResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Events) > 0 {
- for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Events[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x5a
- }
- }
- if m.Fragment {
- i--
- if m.Fragment {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x38
- }
- if len(m.CancelReason) > 0 {
- i -= len(m.CancelReason)
- copy(dAtA[i:], m.CancelReason)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.CancelReason)))
- i--
- dAtA[i] = 0x32
- }
- if m.CompactRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.CompactRevision))
- i--
- dAtA[i] = 0x28
- }
- if m.Canceled {
- i--
- if m.Canceled {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x20
- }
- if m.Created {
- i--
- if m.Created {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x18
- }
- if m.WatchId != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.WatchId))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseGrantRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseGrantRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseGrantRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x10
- }
- if m.TTL != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.TTL))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseGrantResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseGrantResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseGrantResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Error) > 0 {
- i -= len(m.Error)
- copy(dAtA[i:], m.Error)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Error)))
- i--
- dAtA[i] = 0x22
- }
- if m.TTL != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.TTL))
- i--
- dAtA[i] = 0x18
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseRevokeRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseRevokeRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseRevokeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseRevokeResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseRevokeResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseRevokeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseCheckpoint) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseCheckpoint) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseCheckpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Remaining_TTL != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Remaining_TTL))
- i--
- dAtA[i] = 0x10
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseCheckpointRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseCheckpointRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseCheckpointRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Checkpoints) > 0 {
- for iNdEx := len(m.Checkpoints) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Checkpoints[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseCheckpointResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseCheckpointResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseCheckpointResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseKeepAliveRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseKeepAliveRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseKeepAliveRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseKeepAliveResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseKeepAliveResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseKeepAliveResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.TTL != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.TTL))
- i--
- dAtA[i] = 0x18
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseTimeToLiveRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseTimeToLiveRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseTimeToLiveRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Keys {
- i--
- if m.Keys {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x10
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseTimeToLiveResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseTimeToLiveResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseTimeToLiveResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Keys) > 0 {
- for iNdEx := len(m.Keys) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.Keys[iNdEx])
- copy(dAtA[i:], m.Keys[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Keys[iNdEx])))
- i--
- dAtA[i] = 0x2a
- }
- }
- if m.GrantedTTL != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.GrantedTTL))
- i--
- dAtA[i] = 0x20
- }
- if m.TTL != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.TTL))
- i--
- dAtA[i] = 0x18
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseLeasesRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseLeasesRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseLeasesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseStatus) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseStatus) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *LeaseLeasesResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *LeaseLeasesResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *LeaseLeasesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Leases) > 0 {
- for iNdEx := len(m.Leases) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Leases[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *Member) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Member) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Member) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.IsLearner {
- i--
- if m.IsLearner {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x28
- }
- if len(m.ClientURLs) > 0 {
- for iNdEx := len(m.ClientURLs) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.ClientURLs[iNdEx])
- copy(dAtA[i:], m.ClientURLs[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientURLs[iNdEx])))
- i--
- dAtA[i] = 0x22
- }
- }
- if len(m.PeerURLs) > 0 {
- for iNdEx := len(m.PeerURLs) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.PeerURLs[iNdEx])
- copy(dAtA[i:], m.PeerURLs[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerURLs[iNdEx])))
- i--
- dAtA[i] = 0x1a
- }
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0x12
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberAddRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberAddRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberAddRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.IsLearner {
- i--
- if m.IsLearner {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x10
- }
- if len(m.PeerURLs) > 0 {
- for iNdEx := len(m.PeerURLs) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.PeerURLs[iNdEx])
- copy(dAtA[i:], m.PeerURLs[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerURLs[iNdEx])))
- i--
- dAtA[i] = 0xa
- }
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberAddResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberAddResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberAddResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Members) > 0 {
- for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- }
- if m.Member != nil {
- {
- size, err := m.Member.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberRemoveRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberRemoveRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberRemoveRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberRemoveResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberRemoveResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberRemoveResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Members) > 0 {
- for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberUpdateRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberUpdateRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberUpdateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.PeerURLs) > 0 {
- for iNdEx := len(m.PeerURLs) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.PeerURLs[iNdEx])
- copy(dAtA[i:], m.PeerURLs[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerURLs[iNdEx])))
- i--
- dAtA[i] = 0x12
- }
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberUpdateResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberUpdateResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberUpdateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Members) > 0 {
- for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberListRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberListRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberListRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Linearizable {
- i--
- if m.Linearizable {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberListResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberListResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberListResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Members) > 0 {
- for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberPromoteRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberPromoteRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberPromoteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.ID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MemberPromoteResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MemberPromoteResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MemberPromoteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Members) > 0 {
- for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *DefragmentRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *DefragmentRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *DefragmentRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *DefragmentResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *DefragmentResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *DefragmentResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MoveLeaderRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MoveLeaderRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MoveLeaderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.TargetID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.TargetID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *MoveLeaderResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *MoveLeaderResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *MoveLeaderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AlarmRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AlarmRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AlarmRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Alarm != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Alarm))
- i--
- dAtA[i] = 0x18
- }
- if m.MemberID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.MemberID))
- i--
- dAtA[i] = 0x10
- }
- if m.Action != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Action))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AlarmMember) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AlarmMember) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AlarmMember) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Alarm != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Alarm))
- i--
- dAtA[i] = 0x10
- }
- if m.MemberID != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.MemberID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AlarmResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AlarmResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AlarmResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Alarms) > 0 {
- for iNdEx := len(m.Alarms) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Alarms[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *DowngradeRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *DowngradeRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *DowngradeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Version) > 0 {
- i -= len(m.Version)
- copy(dAtA[i:], m.Version)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Version)))
- i--
- dAtA[i] = 0x12
- }
- if m.Action != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Action))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *DowngradeResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *DowngradeResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *DowngradeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Version) > 0 {
- i -= len(m.Version)
- copy(dAtA[i:], m.Version)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Version)))
- i--
- dAtA[i] = 0x12
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *StatusRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *StatusRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *StatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *StatusResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *StatusResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *StatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.IsLearner {
- i--
- if m.IsLearner {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x50
- }
- if m.DbSizeInUse != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.DbSizeInUse))
- i--
- dAtA[i] = 0x48
- }
- if len(m.Errors) > 0 {
- for iNdEx := len(m.Errors) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.Errors[iNdEx])
- copy(dAtA[i:], m.Errors[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Errors[iNdEx])))
- i--
- dAtA[i] = 0x42
- }
- }
- if m.RaftAppliedIndex != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.RaftAppliedIndex))
- i--
- dAtA[i] = 0x38
- }
- if m.RaftTerm != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.RaftTerm))
- i--
- dAtA[i] = 0x30
- }
- if m.RaftIndex != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.RaftIndex))
- i--
- dAtA[i] = 0x28
- }
- if m.Leader != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.Leader))
- i--
- dAtA[i] = 0x20
- }
- if m.DbSize != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.DbSize))
- i--
- dAtA[i] = 0x18
- }
- if len(m.Version) > 0 {
- i -= len(m.Version)
- copy(dAtA[i:], m.Version)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Version)))
- i--
- dAtA[i] = 0x12
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthEnableRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthEnableRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthEnableRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthDisableRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthDisableRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthDisableRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthStatusRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthStatusRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthenticateRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthenticateRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthenticateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Password) > 0 {
- i -= len(m.Password)
- copy(dAtA[i:], m.Password)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Password)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserAddRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserAddRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserAddRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.HashedPassword) > 0 {
- i -= len(m.HashedPassword)
- copy(dAtA[i:], m.HashedPassword)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.HashedPassword)))
- i--
- dAtA[i] = 0x22
- }
- if m.Options != nil {
- {
- size, err := m.Options.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- if len(m.Password) > 0 {
- i -= len(m.Password)
- copy(dAtA[i:], m.Password)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Password)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserGetRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserGetRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserGetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserDeleteRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserDeleteRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserDeleteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserChangePasswordRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserChangePasswordRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserChangePasswordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.HashedPassword) > 0 {
- i -= len(m.HashedPassword)
- copy(dAtA[i:], m.HashedPassword)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.HashedPassword)))
- i--
- dAtA[i] = 0x1a
- }
- if len(m.Password) > 0 {
- i -= len(m.Password)
- copy(dAtA[i:], m.Password)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Password)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserGrantRoleRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserGrantRoleRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserGrantRoleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Role) > 0 {
- i -= len(m.Role)
- copy(dAtA[i:], m.Role)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Role)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.User) > 0 {
- i -= len(m.User)
- copy(dAtA[i:], m.User)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.User)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserRevokeRoleRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserRevokeRoleRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserRevokeRoleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Role) > 0 {
- i -= len(m.Role)
- copy(dAtA[i:], m.Role)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Role)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleAddRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleAddRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleAddRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleGetRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleGetRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleGetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Role) > 0 {
- i -= len(m.Role)
- copy(dAtA[i:], m.Role)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Role)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserListRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserListRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserListRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleListRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleListRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleListRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleDeleteRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleDeleteRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleDeleteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Role) > 0 {
- i -= len(m.Role)
- copy(dAtA[i:], m.Role)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Role)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleGrantPermissionRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleGrantPermissionRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleGrantPermissionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Perm != nil {
- {
- size, err := m.Perm.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleRevokePermissionRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleRevokePermissionRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleRevokePermissionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.RangeEnd) > 0 {
- i -= len(m.RangeEnd)
- copy(dAtA[i:], m.RangeEnd)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd)))
- i--
- dAtA[i] = 0x1a
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.Role) > 0 {
- i -= len(m.Role)
- copy(dAtA[i:], m.Role)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Role)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthEnableResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthEnableResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthEnableResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthDisableResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthDisableResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthDisableResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthStatusResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthStatusResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.AuthRevision != 0 {
- i = encodeVarintRpc(dAtA, i, uint64(m.AuthRevision))
- i--
- dAtA[i] = 0x18
- }
- if m.Enabled {
- i--
- if m.Enabled {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x10
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthenticateResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthenticateResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthenticateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Token) > 0 {
- i -= len(m.Token)
- copy(dAtA[i:], m.Token)
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Token)))
- i--
- dAtA[i] = 0x12
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserAddResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserAddResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserAddResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserGetResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserGetResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserGetResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Roles) > 0 {
- for iNdEx := len(m.Roles) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.Roles[iNdEx])
- copy(dAtA[i:], m.Roles[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Roles[iNdEx])))
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserDeleteResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserDeleteResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserDeleteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserChangePasswordResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserChangePasswordResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserChangePasswordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserGrantRoleResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserGrantRoleResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserGrantRoleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserRevokeRoleResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserRevokeRoleResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserRevokeRoleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleAddResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleAddResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleAddResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleGetResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleGetResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleGetResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Perm) > 0 {
- for iNdEx := len(m.Perm) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Perm[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleListResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleListResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleListResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Roles) > 0 {
- for iNdEx := len(m.Roles) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.Roles[iNdEx])
- copy(dAtA[i:], m.Roles[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Roles[iNdEx])))
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthUserListResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthUserListResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthUserListResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Users) > 0 {
- for iNdEx := len(m.Users) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.Users[iNdEx])
- copy(dAtA[i:], m.Users[iNdEx])
- i = encodeVarintRpc(dAtA, i, uint64(len(m.Users[iNdEx])))
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleDeleteResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleDeleteResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleDeleteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleGrantPermissionResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleGrantPermissionResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleGrantPermissionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *AuthRoleRevokePermissionResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *AuthRoleRevokePermissionResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *AuthRoleRevokePermissionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Header != nil {
- {
- size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintRpc(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func encodeVarintRpc(dAtA []byte, offset int, v uint64) int {
- offset -= sovRpc(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
- }
- dAtA[offset] = uint8(v)
- return base
-}
-func (m *ResponseHeader) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ClusterId != 0 {
- n += 1 + sovRpc(uint64(m.ClusterId))
- }
- if m.MemberId != 0 {
- n += 1 + sovRpc(uint64(m.MemberId))
- }
- if m.Revision != 0 {
- n += 1 + sovRpc(uint64(m.Revision))
- }
- if m.RaftTerm != 0 {
- n += 1 + sovRpc(uint64(m.RaftTerm))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *RangeRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.RangeEnd)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Limit != 0 {
- n += 1 + sovRpc(uint64(m.Limit))
- }
- if m.Revision != 0 {
- n += 1 + sovRpc(uint64(m.Revision))
- }
- if m.SortOrder != 0 {
- n += 1 + sovRpc(uint64(m.SortOrder))
- }
- if m.SortTarget != 0 {
- n += 1 + sovRpc(uint64(m.SortTarget))
- }
- if m.Serializable {
- n += 2
- }
- if m.KeysOnly {
- n += 2
- }
- if m.CountOnly {
- n += 2
- }
- if m.MinModRevision != 0 {
- n += 1 + sovRpc(uint64(m.MinModRevision))
- }
- if m.MaxModRevision != 0 {
- n += 1 + sovRpc(uint64(m.MaxModRevision))
- }
- if m.MinCreateRevision != 0 {
- n += 1 + sovRpc(uint64(m.MinCreateRevision))
- }
- if m.MaxCreateRevision != 0 {
- n += 1 + sovRpc(uint64(m.MaxCreateRevision))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *RangeResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Kvs) > 0 {
- for _, e := range m.Kvs {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.More {
- n += 2
- }
- if m.Count != 0 {
- n += 1 + sovRpc(uint64(m.Count))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *PutRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Value)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Lease != 0 {
- n += 1 + sovRpc(uint64(m.Lease))
- }
- if m.PrevKv {
- n += 2
- }
- if m.IgnoreValue {
- n += 2
- }
- if m.IgnoreLease {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *PutResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.PrevKv != nil {
- l = m.PrevKv.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *DeleteRangeRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.RangeEnd)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.PrevKv {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *DeleteRangeResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Deleted != 0 {
- n += 1 + sovRpc(uint64(m.Deleted))
- }
- if len(m.PrevKvs) > 0 {
- for _, e := range m.PrevKvs {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *RequestOp) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Request != nil {
- n += m.Request.Size()
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *RequestOp_RequestRange) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.RequestRange != nil {
- l = m.RequestRange.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *RequestOp_RequestPut) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.RequestPut != nil {
- l = m.RequestPut.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *RequestOp_RequestDeleteRange) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.RequestDeleteRange != nil {
- l = m.RequestDeleteRange.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *RequestOp_RequestTxn) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.RequestTxn != nil {
- l = m.RequestTxn.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *ResponseOp) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Response != nil {
- n += m.Response.Size()
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *ResponseOp_ResponseRange) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ResponseRange != nil {
- l = m.ResponseRange.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *ResponseOp_ResponsePut) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ResponsePut != nil {
- l = m.ResponsePut.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *ResponseOp_ResponseDeleteRange) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ResponseDeleteRange != nil {
- l = m.ResponseDeleteRange.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *ResponseOp_ResponseTxn) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ResponseTxn != nil {
- l = m.ResponseTxn.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *Compare) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Result != 0 {
- n += 1 + sovRpc(uint64(m.Result))
- }
- if m.Target != 0 {
- n += 1 + sovRpc(uint64(m.Target))
- }
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.TargetUnion != nil {
- n += m.TargetUnion.Size()
- }
- l = len(m.RangeEnd)
- if l > 0 {
- n += 2 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Compare_Version) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- n += 1 + sovRpc(uint64(m.Version))
- return n
-}
-func (m *Compare_CreateRevision) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- n += 1 + sovRpc(uint64(m.CreateRevision))
- return n
-}
-func (m *Compare_ModRevision) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- n += 1 + sovRpc(uint64(m.ModRevision))
- return n
-}
-func (m *Compare_Value) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Value != nil {
- l = len(m.Value)
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *Compare_Lease) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- n += 1 + sovRpc(uint64(m.Lease))
- return n
-}
-func (m *TxnRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if len(m.Compare) > 0 {
- for _, e := range m.Compare {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if len(m.Success) > 0 {
- for _, e := range m.Success {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if len(m.Failure) > 0 {
- for _, e := range m.Failure {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *TxnResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Succeeded {
- n += 2
- }
- if len(m.Responses) > 0 {
- for _, e := range m.Responses {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *CompactionRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Revision != 0 {
- n += 1 + sovRpc(uint64(m.Revision))
- }
- if m.Physical {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *CompactionResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *HashRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *HashKVRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Revision != 0 {
- n += 1 + sovRpc(uint64(m.Revision))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *HashKVResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Hash != 0 {
- n += 1 + sovRpc(uint64(m.Hash))
- }
- if m.CompactRevision != 0 {
- n += 1 + sovRpc(uint64(m.CompactRevision))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *HashResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Hash != 0 {
- n += 1 + sovRpc(uint64(m.Hash))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *SnapshotRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *SnapshotResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.RemainingBytes != 0 {
- n += 1 + sovRpc(uint64(m.RemainingBytes))
- }
- l = len(m.Blob)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *WatchRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.RequestUnion != nil {
- n += m.RequestUnion.Size()
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *WatchRequest_CreateRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.CreateRequest != nil {
- l = m.CreateRequest.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *WatchRequest_CancelRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.CancelRequest != nil {
- l = m.CancelRequest.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *WatchRequest_ProgressRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ProgressRequest != nil {
- l = m.ProgressRequest.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- return n
-}
-func (m *WatchCreateRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.RangeEnd)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.StartRevision != 0 {
- n += 1 + sovRpc(uint64(m.StartRevision))
- }
- if m.ProgressNotify {
- n += 2
- }
- if len(m.Filters) > 0 {
- l = 0
- for _, e := range m.Filters {
- l += sovRpc(uint64(e))
- }
- n += 1 + sovRpc(uint64(l)) + l
- }
- if m.PrevKv {
- n += 2
- }
- if m.WatchId != 0 {
- n += 1 + sovRpc(uint64(m.WatchId))
- }
- if m.Fragment {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *WatchCancelRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.WatchId != 0 {
- n += 1 + sovRpc(uint64(m.WatchId))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *WatchProgressRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *WatchResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.WatchId != 0 {
- n += 1 + sovRpc(uint64(m.WatchId))
- }
- if m.Created {
- n += 2
- }
- if m.Canceled {
- n += 2
- }
- if m.CompactRevision != 0 {
- n += 1 + sovRpc(uint64(m.CompactRevision))
- }
- l = len(m.CancelReason)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Fragment {
- n += 2
- }
- if len(m.Events) > 0 {
- for _, e := range m.Events {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseGrantRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.TTL != 0 {
- n += 1 + sovRpc(uint64(m.TTL))
- }
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseGrantResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.TTL != 0 {
- n += 1 + sovRpc(uint64(m.TTL))
- }
- l = len(m.Error)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseRevokeRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseRevokeResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseCheckpoint) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.Remaining_TTL != 0 {
- n += 1 + sovRpc(uint64(m.Remaining_TTL))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseCheckpointRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if len(m.Checkpoints) > 0 {
- for _, e := range m.Checkpoints {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseCheckpointResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseKeepAliveRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseKeepAliveResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.TTL != 0 {
- n += 1 + sovRpc(uint64(m.TTL))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseTimeToLiveRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.Keys {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseTimeToLiveResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.TTL != 0 {
- n += 1 + sovRpc(uint64(m.TTL))
- }
- if m.GrantedTTL != 0 {
- n += 1 + sovRpc(uint64(m.GrantedTTL))
- }
- if len(m.Keys) > 0 {
- for _, b := range m.Keys {
- l = len(b)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseLeasesRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseStatus) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *LeaseLeasesResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Leases) > 0 {
- for _, e := range m.Leases {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Member) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.PeerURLs) > 0 {
- for _, s := range m.PeerURLs {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if len(m.ClientURLs) > 0 {
- for _, s := range m.ClientURLs {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.IsLearner {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberAddRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if len(m.PeerURLs) > 0 {
- for _, s := range m.PeerURLs {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.IsLearner {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberAddResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Member != nil {
- l = m.Member.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Members) > 0 {
- for _, e := range m.Members {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberRemoveRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberRemoveResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Members) > 0 {
- for _, e := range m.Members {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberUpdateRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if len(m.PeerURLs) > 0 {
- for _, s := range m.PeerURLs {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberUpdateResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Members) > 0 {
- for _, e := range m.Members {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberListRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Linearizable {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberListResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Members) > 0 {
- for _, e := range m.Members {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberPromoteRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovRpc(uint64(m.ID))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MemberPromoteResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Members) > 0 {
- for _, e := range m.Members {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *DefragmentRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *DefragmentResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MoveLeaderRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.TargetID != 0 {
- n += 1 + sovRpc(uint64(m.TargetID))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *MoveLeaderResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AlarmRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Action != 0 {
- n += 1 + sovRpc(uint64(m.Action))
- }
- if m.MemberID != 0 {
- n += 1 + sovRpc(uint64(m.MemberID))
- }
- if m.Alarm != 0 {
- n += 1 + sovRpc(uint64(m.Alarm))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AlarmMember) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.MemberID != 0 {
- n += 1 + sovRpc(uint64(m.MemberID))
- }
- if m.Alarm != 0 {
- n += 1 + sovRpc(uint64(m.Alarm))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AlarmResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Alarms) > 0 {
- for _, e := range m.Alarms {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *DowngradeRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Action != 0 {
- n += 1 + sovRpc(uint64(m.Action))
- }
- l = len(m.Version)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *DowngradeResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Version)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *StatusRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *StatusResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Version)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.DbSize != 0 {
- n += 1 + sovRpc(uint64(m.DbSize))
- }
- if m.Leader != 0 {
- n += 1 + sovRpc(uint64(m.Leader))
- }
- if m.RaftIndex != 0 {
- n += 1 + sovRpc(uint64(m.RaftIndex))
- }
- if m.RaftTerm != 0 {
- n += 1 + sovRpc(uint64(m.RaftTerm))
- }
- if m.RaftAppliedIndex != 0 {
- n += 1 + sovRpc(uint64(m.RaftAppliedIndex))
- }
- if len(m.Errors) > 0 {
- for _, s := range m.Errors {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.DbSizeInUse != 0 {
- n += 1 + sovRpc(uint64(m.DbSizeInUse))
- }
- if m.IsLearner {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthEnableRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthDisableRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthStatusRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthenticateRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Password)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserAddRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Password)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Options != nil {
- l = m.Options.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.HashedPassword)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserGetRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserDeleteRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserChangePasswordRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Password)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.HashedPassword)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserGrantRoleRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.User)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Role)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserRevokeRoleRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Role)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleAddRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleGetRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Role)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserListRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleListRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleDeleteRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Role)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleGrantPermissionRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Perm != nil {
- l = m.Perm.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleRevokePermissionRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Role)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.RangeEnd)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthEnableResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthDisableResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthStatusResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.Enabled {
- n += 2
- }
- if m.AuthRevision != 0 {
- n += 1 + sovRpc(uint64(m.AuthRevision))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthenticateResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- l = len(m.Token)
- if l > 0 {
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserAddResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserGetResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Roles) > 0 {
- for _, s := range m.Roles {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserDeleteResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserChangePasswordResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserGrantRoleResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserRevokeRoleResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleAddResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleGetResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Perm) > 0 {
- for _, e := range m.Perm {
- l = e.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleListResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Roles) > 0 {
- for _, s := range m.Roles {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthUserListResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if len(m.Users) > 0 {
- for _, s := range m.Users {
- l = len(s)
- n += 1 + l + sovRpc(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleDeleteResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleGrantPermissionResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *AuthRoleRevokePermissionResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Header != nil {
- l = m.Header.Size()
- n += 1 + l + sovRpc(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func sovRpc(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozRpc(x uint64) (n int) {
- return sovRpc(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (m *ResponseHeader) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: ResponseHeader: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: ResponseHeader: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
- }
- m.ClusterId = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ClusterId |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field MemberId", wireType)
- }
- m.MemberId = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.MemberId |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType)
- }
- m.Revision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Revision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field RaftTerm", wireType)
- }
- m.RaftTerm = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.RaftTerm |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *RangeRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: RangeRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: RangeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...)
- if m.RangeEnd == nil {
- m.RangeEnd = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType)
- }
- m.Limit = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Limit |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType)
- }
- m.Revision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Revision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field SortOrder", wireType)
- }
- m.SortOrder = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.SortOrder |= RangeRequest_SortOrder(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 6:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field SortTarget", wireType)
- }
- m.SortTarget = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.SortTarget |= RangeRequest_SortTarget(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 7:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Serializable", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Serializable = bool(v != 0)
- case 8:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field KeysOnly", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.KeysOnly = bool(v != 0)
- case 9:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field CountOnly", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.CountOnly = bool(v != 0)
- case 10:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field MinModRevision", wireType)
- }
- m.MinModRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.MinModRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 11:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field MaxModRevision", wireType)
- }
- m.MaxModRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.MaxModRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 12:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field MinCreateRevision", wireType)
- }
- m.MinCreateRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.MinCreateRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 13:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field MaxCreateRevision", wireType)
- }
- m.MaxCreateRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.MaxCreateRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *RangeResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: RangeResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: RangeResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Kvs", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Kvs = append(m.Kvs, &mvccpb.KeyValue{})
- if err := m.Kvs[len(m.Kvs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field More", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.More = bool(v != 0)
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType)
- }
- m.Count = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Count |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *PutRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: PutRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: PutRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...)
- if m.Value == nil {
- m.Value = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Lease", wireType)
- }
- m.Lease = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Lease |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.PrevKv = bool(v != 0)
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IgnoreValue", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IgnoreValue = bool(v != 0)
- case 6:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IgnoreLease", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IgnoreLease = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *PutResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: PutResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: PutResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.PrevKv == nil {
- m.PrevKv = &mvccpb.KeyValue{}
- }
- if err := m.PrevKv.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *DeleteRangeRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: DeleteRangeRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteRangeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...)
- if m.RangeEnd == nil {
- m.RangeEnd = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.PrevKv = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *DeleteRangeResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: DeleteRangeResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteRangeResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Deleted", wireType)
- }
- m.Deleted = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Deleted |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevKvs", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.PrevKvs = append(m.PrevKvs, &mvccpb.KeyValue{})
- if err := m.PrevKvs[len(m.PrevKvs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *RequestOp) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: RequestOp: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: RequestOp: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RequestRange", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &RangeRequest{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Request = &RequestOp_RequestRange{v}
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RequestPut", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &PutRequest{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Request = &RequestOp_RequestPut{v}
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RequestDeleteRange", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &DeleteRangeRequest{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Request = &RequestOp_RequestDeleteRange{v}
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RequestTxn", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &TxnRequest{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Request = &RequestOp_RequestTxn{v}
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *ResponseOp) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: ResponseOp: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: ResponseOp: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ResponseRange", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &RangeResponse{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Response = &ResponseOp_ResponseRange{v}
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ResponsePut", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &PutResponse{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Response = &ResponseOp_ResponsePut{v}
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ResponseDeleteRange", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &DeleteRangeResponse{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Response = &ResponseOp_ResponseDeleteRange{v}
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ResponseTxn", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &TxnResponse{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Response = &ResponseOp_ResponseTxn{v}
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Compare) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Compare: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Compare: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType)
- }
- m.Result = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Result |= Compare_CompareResult(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType)
- }
- m.Target = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Target |= Compare_CompareTarget(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
- }
- var v int64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.TargetUnion = &Compare_Version{v}
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field CreateRevision", wireType)
- }
- var v int64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.TargetUnion = &Compare_CreateRevision{v}
- case 6:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ModRevision", wireType)
- }
- var v int64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.TargetUnion = &Compare_ModRevision{v}
- case 7:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := make([]byte, postIndex-iNdEx)
- copy(v, dAtA[iNdEx:postIndex])
- m.TargetUnion = &Compare_Value{v}
- iNdEx = postIndex
- case 8:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Lease", wireType)
- }
- var v int64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.TargetUnion = &Compare_Lease{v}
- case 64:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...)
- if m.RangeEnd == nil {
- m.RangeEnd = []byte{}
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *TxnRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: TxnRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: TxnRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Compare", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Compare = append(m.Compare, &Compare{})
- if err := m.Compare[len(m.Compare)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Success = append(m.Success, &RequestOp{})
- if err := m.Success[len(m.Success)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Failure", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Failure = append(m.Failure, &RequestOp{})
- if err := m.Failure[len(m.Failure)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *TxnResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: TxnResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: TxnResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Succeeded", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Succeeded = bool(v != 0)
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Responses", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Responses = append(m.Responses, &ResponseOp{})
- if err := m.Responses[len(m.Responses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *CompactionRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: CompactionRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: CompactionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType)
- }
- m.Revision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Revision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Physical", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Physical = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *CompactionResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: CompactionResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: CompactionResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *HashRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: HashRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: HashRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *HashKVRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: HashKVRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: HashKVRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType)
- }
- m.Revision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Revision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *HashKVResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: HashKVResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: HashKVResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType)
- }
- m.Hash = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Hash |= uint32(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field CompactRevision", wireType)
- }
- m.CompactRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.CompactRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *HashResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: HashResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: HashResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType)
- }
- m.Hash = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Hash |= uint32(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *SnapshotRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: SnapshotRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: SnapshotRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *SnapshotResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: SnapshotResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: SnapshotResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field RemainingBytes", wireType)
- }
- m.RemainingBytes = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.RemainingBytes |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Blob", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Blob = append(m.Blob[:0], dAtA[iNdEx:postIndex]...)
- if m.Blob == nil {
- m.Blob = []byte{}
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *WatchRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: WatchRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: WatchRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field CreateRequest", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &WatchCreateRequest{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.RequestUnion = &WatchRequest_CreateRequest{v}
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field CancelRequest", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &WatchCancelRequest{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.RequestUnion = &WatchRequest_CancelRequest{v}
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ProgressRequest", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &WatchProgressRequest{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.RequestUnion = &WatchRequest_ProgressRequest{v}
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *WatchCreateRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: WatchCreateRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: WatchCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...)
- if m.RangeEnd == nil {
- m.RangeEnd = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field StartRevision", wireType)
- }
- m.StartRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.StartRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ProgressNotify", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.ProgressNotify = bool(v != 0)
- case 5:
- if wireType == 0 {
- var v WatchCreateRequest_FilterType
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= WatchCreateRequest_FilterType(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Filters = append(m.Filters, v)
- } else if wireType == 2 {
- var packedLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- packedLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if packedLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + packedLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- var elementCount int
- if elementCount != 0 && len(m.Filters) == 0 {
- m.Filters = make([]WatchCreateRequest_FilterType, 0, elementCount)
- }
- for iNdEx < postIndex {
- var v WatchCreateRequest_FilterType
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= WatchCreateRequest_FilterType(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Filters = append(m.Filters, v)
- }
- } else {
- return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType)
- }
- case 6:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.PrevKv = bool(v != 0)
- case 7:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field WatchId", wireType)
- }
- m.WatchId = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.WatchId |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 8:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Fragment", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Fragment = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *WatchCancelRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: WatchCancelRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: WatchCancelRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field WatchId", wireType)
- }
- m.WatchId = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.WatchId |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *WatchProgressRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: WatchProgressRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: WatchProgressRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *WatchResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: WatchResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: WatchResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field WatchId", wireType)
- }
- m.WatchId = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.WatchId |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Created = bool(v != 0)
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Canceled", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Canceled = bool(v != 0)
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field CompactRevision", wireType)
- }
- m.CompactRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.CompactRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 6:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field CancelReason", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.CancelReason = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 7:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Fragment", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Fragment = bool(v != 0)
- case 11:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Events = append(m.Events, &mvccpb.Event{})
- if err := m.Events[len(m.Events)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseGrantRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseGrantRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseGrantRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType)
- }
- m.TTL = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.TTL |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseGrantResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseGrantResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseGrantResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType)
- }
- m.TTL = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.TTL |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Error = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseRevokeRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseRevokeRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseRevokeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseRevokeResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseRevokeResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseRevokeResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseCheckpoint) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseCheckpoint: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseCheckpoint: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Remaining_TTL", wireType)
- }
- m.Remaining_TTL = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Remaining_TTL |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseCheckpointRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseCheckpointRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseCheckpointRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Checkpoints", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Checkpoints = append(m.Checkpoints, &LeaseCheckpoint{})
- if err := m.Checkpoints[len(m.Checkpoints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseCheckpointResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseCheckpointResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseCheckpointResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseKeepAliveRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseKeepAliveRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseKeepAliveRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseKeepAliveResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseKeepAliveResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseKeepAliveResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType)
- }
- m.TTL = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.TTL |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseTimeToLiveRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseTimeToLiveRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseTimeToLiveRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Keys = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseTimeToLiveResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseTimeToLiveResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseTimeToLiveResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType)
- }
- m.TTL = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.TTL |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field GrantedTTL", wireType)
- }
- m.GrantedTTL = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.GrantedTTL |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx))
- copy(m.Keys[len(m.Keys)-1], dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseLeasesRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseLeasesRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseLeasesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseStatus) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseStatus: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseStatus: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *LeaseLeasesResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: LeaseLeasesResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: LeaseLeasesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Leases", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Leases = append(m.Leases, &LeaseStatus{})
- if err := m.Leases[len(m.Leases)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Member) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Member: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Member: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.PeerURLs = append(m.PeerURLs, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClientURLs", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ClientURLs = append(m.ClientURLs, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IsLearner", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IsLearner = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberAddRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberAddRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberAddRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.PeerURLs = append(m.PeerURLs, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IsLearner", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IsLearner = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberAddResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberAddResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberAddResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Member", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Member == nil {
- m.Member = &Member{}
- }
- if err := m.Member.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Members = append(m.Members, &Member{})
- if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberRemoveRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberRemoveRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberRemoveRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberRemoveResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberRemoveResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberRemoveResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Members = append(m.Members, &Member{})
- if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberUpdateRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberUpdateRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberUpdateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.PeerURLs = append(m.PeerURLs, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberUpdateResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberUpdateResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberUpdateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Members = append(m.Members, &Member{})
- if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberListRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberListRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberListRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Linearizable", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Linearizable = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberListResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberListResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberListResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Members = append(m.Members, &Member{})
- if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberPromoteRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberPromoteRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberPromoteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MemberPromoteResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MemberPromoteResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MemberPromoteResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Members = append(m.Members, &Member{})
- if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *DefragmentRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: DefragmentRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: DefragmentRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *DefragmentResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: DefragmentResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: DefragmentResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MoveLeaderRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MoveLeaderRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MoveLeaderRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field TargetID", wireType)
- }
- m.TargetID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.TargetID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *MoveLeaderResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: MoveLeaderResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: MoveLeaderResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AlarmRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AlarmRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AlarmRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType)
- }
- m.Action = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Action |= AlarmRequest_AlarmAction(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field MemberID", wireType)
- }
- m.MemberID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.MemberID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType)
- }
- m.Alarm = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Alarm |= AlarmType(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AlarmMember) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AlarmMember: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AlarmMember: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field MemberID", wireType)
- }
- m.MemberID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.MemberID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType)
- }
- m.Alarm = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Alarm |= AlarmType(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AlarmResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AlarmResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AlarmResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alarms", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Alarms = append(m.Alarms, &AlarmMember{})
- if err := m.Alarms[len(m.Alarms)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *DowngradeRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: DowngradeRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: DowngradeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType)
- }
- m.Action = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Action |= DowngradeRequest_DowngradeAction(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Version = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *DowngradeResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: DowngradeResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: DowngradeResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Version = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *StatusRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: StatusRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: StatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *StatusResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: StatusResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: StatusResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Version = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field DbSize", wireType)
- }
- m.DbSize = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.DbSize |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType)
- }
- m.Leader = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Leader |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field RaftIndex", wireType)
- }
- m.RaftIndex = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.RaftIndex |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 6:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field RaftTerm", wireType)
- }
- m.RaftTerm = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.RaftTerm |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 7:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field RaftAppliedIndex", wireType)
- }
- m.RaftAppliedIndex = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.RaftAppliedIndex |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 8:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Errors", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Errors = append(m.Errors, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 9:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field DbSizeInUse", wireType)
- }
- m.DbSizeInUse = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.DbSizeInUse |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 10:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IsLearner", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IsLearner = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthEnableRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthEnableRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthEnableRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthDisableRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthDisableRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthDisableRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthStatusRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthStatusRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthenticateRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthenticateRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthenticateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Password = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserAddRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserAddRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserAddRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Password = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Options == nil {
- m.Options = &authpb.UserAddOptions{}
- }
- if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field HashedPassword", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.HashedPassword = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserGetRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserGetRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserGetRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserDeleteRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserDeleteRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserChangePasswordRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserChangePasswordRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserChangePasswordRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Password = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field HashedPassword", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.HashedPassword = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserGrantRoleRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserGrantRoleRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserGrantRoleRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field User", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.User = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Role = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserRevokeRoleRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserRevokeRoleRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserRevokeRoleRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Role = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleAddRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleAddRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleAddRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleGetRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleGetRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleGetRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Role = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserListRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserListRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserListRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleListRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleListRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleListRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleDeleteRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleDeleteRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Role = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleGrantPermissionRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleGrantPermissionRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleGrantPermissionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Perm", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Perm == nil {
- m.Perm = &authpb.Permission{}
- }
- if err := m.Perm.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleRevokePermissionRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleRevokePermissionRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleRevokePermissionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Role = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...)
- if m.RangeEnd == nil {
- m.RangeEnd = []byte{}
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthEnableResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthEnableResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthEnableResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthDisableResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthDisableResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthDisableResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthStatusResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthStatusResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Enabled = bool(v != 0)
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field AuthRevision", wireType)
- }
- m.AuthRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.AuthRevision |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthenticateResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthenticateResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthenticateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Token = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserAddResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserAddResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserAddResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserGetResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserGetResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserGetResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserDeleteResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserDeleteResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserChangePasswordResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserChangePasswordResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserChangePasswordResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserGrantRoleResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserGrantRoleResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserGrantRoleResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserRevokeRoleResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserRevokeRoleResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserRevokeRoleResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleAddResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleAddResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleAddResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleGetResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleGetResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleGetResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Perm", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Perm = append(m.Perm, &authpb.Permission{})
- if err := m.Perm[len(m.Perm)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleListResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleListResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleListResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthUserListResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthUserListResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthUserListResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Users", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Users = append(m.Users, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleDeleteResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleDeleteResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleGrantPermissionResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleGrantPermissionResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleGrantPermissionResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *AuthRoleRevokePermissionResponse) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AuthRoleRevokePermissionResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AuthRoleRevokePermissionResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthRpc
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthRpc
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Header == nil {
- m.Header = &ResponseHeader{}
- }
- if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipRpc(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthRpc
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func skipRpc(dAtA []byte) (n int, err error) {
- l := len(dAtA)
- iNdEx := 0
- depth := 0
- for iNdEx < l {
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- wireType := int(wire & 0x7)
- switch wireType {
- case 0:
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- iNdEx++
- if dAtA[iNdEx-1] < 0x80 {
- break
- }
- }
- case 1:
- iNdEx += 8
- case 2:
- var length int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowRpc
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- length |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if length < 0 {
- return 0, ErrInvalidLengthRpc
- }
- iNdEx += length
- case 3:
- depth++
- case 4:
- if depth == 0 {
- return 0, ErrUnexpectedEndOfGroupRpc
- }
- depth--
- case 5:
- iNdEx += 4
- default:
- return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
- }
- if iNdEx < 0 {
- return 0, ErrInvalidLengthRpc
- }
- if depth == 0 {
- return iNdEx, nil
- }
- }
- return 0, io.ErrUnexpectedEOF
-}
-
-var (
- ErrInvalidLengthRpc = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowRpc = fmt.Errorf("proto: integer overflow")
- ErrUnexpectedEndOfGroupRpc = fmt.Errorf("proto: unexpected end of group")
-)
diff --git a/etcd-fix/api/etcdserverpb/rpc.proto b/etcd-fix/api/etcdserverpb/rpc.proto
deleted file mode 100644
index e63d405..0000000
--- a/etcd-fix/api/etcdserverpb/rpc.proto
+++ /dev/null
@@ -1,1197 +0,0 @@
-syntax = "proto3";
-package etcdserverpb;
-
-import "gogoproto/gogo.proto";
-import "etcd/api/mvccpb/kv.proto";
-import "etcd/api/authpb/auth.proto";
-
-// for grpc-gateway
-import "google/api/annotations.proto";
-
-option (gogoproto.marshaler_all) = true;
-option (gogoproto.unmarshaler_all) = true;
-
-service KV {
- // Range gets the keys in the range from the key-value store.
- rpc Range(RangeRequest) returns (RangeResponse) {
- option (google.api.http) = {
- post: "/v3/kv/range"
- body: "*"
- };
- }
-
- // Put puts the given key into the key-value store.
- // A put request increments the revision of the key-value store
- // and generates one event in the event history.
- rpc Put(PutRequest) returns (PutResponse) {
- option (google.api.http) = {
- post: "/v3/kv/put"
- body: "*"
- };
- }
-
- // DeleteRange deletes the given range from the key-value store.
- // A delete request increments the revision of the key-value store
- // and generates a delete event in the event history for every deleted key.
- rpc DeleteRange(DeleteRangeRequest) returns (DeleteRangeResponse) {
- option (google.api.http) = {
- post: "/v3/kv/deleterange"
- body: "*"
- };
- }
-
- // Txn processes multiple requests in a single transaction.
- // A txn request increments the revision of the key-value store
- // and generates events with the same revision for every completed request.
- // It is not allowed to modify the same key several times within one txn.
- rpc Txn(TxnRequest) returns (TxnResponse) {
- option (google.api.http) = {
- post: "/v3/kv/txn"
- body: "*"
- };
- }
-
- // Compact compacts the event history in the etcd key-value store. The key-value
- // store should be periodically compacted or the event history will continue to grow
- // indefinitely.
- rpc Compact(CompactionRequest) returns (CompactionResponse) {
- option (google.api.http) = {
- post: "/v3/kv/compaction"
- body: "*"
- };
- }
-}
-
-service Watch {
- // Watch watches for events happening or that have happened. Both input and output
- // are streams; the input stream is for creating and canceling watchers and the output
- // stream sends events. One watch RPC can watch on multiple key ranges, streaming events
- // for several watches at once. The entire event history can be watched starting from the
- // last compaction revision.
- rpc Watch(stream WatchRequest) returns (stream WatchResponse) {
- option (google.api.http) = {
- post: "/v3/watch"
- body: "*"
- };
- }
-}
-
-service Lease {
- // LeaseGrant creates a lease which expires if the server does not receive a keepAlive
- // within a given time to live period. All keys attached to the lease will be expired and
- // deleted if the lease expires. Each expired key generates a delete event in the event history.
- rpc LeaseGrant(LeaseGrantRequest) returns (LeaseGrantResponse) {
- option (google.api.http) = {
- post: "/v3/lease/grant"
- body: "*"
- };
- }
-
- // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.
- rpc LeaseRevoke(LeaseRevokeRequest) returns (LeaseRevokeResponse) {
- option (google.api.http) = {
- post: "/v3/lease/revoke"
- body: "*"
- additional_bindings {
- post: "/v3/kv/lease/revoke"
- body: "*"
- }
- };
- }
-
- // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client
- // to the server and streaming keep alive responses from the server to the client.
- rpc LeaseKeepAlive(stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse) {
- option (google.api.http) = {
- post: "/v3/lease/keepalive"
- body: "*"
- };
- }
-
- // LeaseTimeToLive retrieves lease information.
- rpc LeaseTimeToLive(LeaseTimeToLiveRequest) returns (LeaseTimeToLiveResponse) {
- option (google.api.http) = {
- post: "/v3/lease/timetolive"
- body: "*"
- additional_bindings {
- post: "/v3/kv/lease/timetolive"
- body: "*"
- }
- };
- }
-
- // LeaseLeases lists all existing leases.
- rpc LeaseLeases(LeaseLeasesRequest) returns (LeaseLeasesResponse) {
- option (google.api.http) = {
- post: "/v3/lease/leases"
- body: "*"
- additional_bindings {
- post: "/v3/kv/lease/leases"
- body: "*"
- }
- };
- }
-}
-
-service Cluster {
- // MemberAdd adds a member into the cluster.
- rpc MemberAdd(MemberAddRequest) returns (MemberAddResponse) {
- option (google.api.http) = {
- post: "/v3/cluster/member/add"
- body: "*"
- };
- }
-
- // MemberRemove removes an existing member from the cluster.
- rpc MemberRemove(MemberRemoveRequest) returns (MemberRemoveResponse) {
- option (google.api.http) = {
- post: "/v3/cluster/member/remove"
- body: "*"
- };
- }
-
- // MemberUpdate updates the member configuration.
- rpc MemberUpdate(MemberUpdateRequest) returns (MemberUpdateResponse) {
- option (google.api.http) = {
- post: "/v3/cluster/member/update"
- body: "*"
- };
- }
-
- // MemberList lists all the members in the cluster.
- rpc MemberList(MemberListRequest) returns (MemberListResponse) {
- option (google.api.http) = {
- post: "/v3/cluster/member/list"
- body: "*"
- };
- }
-
- // MemberPromote promotes a member from raft learner (non-voting) to raft voting member.
- rpc MemberPromote(MemberPromoteRequest) returns (MemberPromoteResponse) {
- option (google.api.http) = {
- post: "/v3/cluster/member/promote"
- body: "*"
- };
- }
-}
-
-service Maintenance {
- // Alarm activates, deactivates, and queries alarms regarding cluster health.
- rpc Alarm(AlarmRequest) returns (AlarmResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/alarm"
- body: "*"
- };
- }
-
- // Status gets the status of the member.
- rpc Status(StatusRequest) returns (StatusResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/status"
- body: "*"
- };
- }
-
- // Defragment defragments a member's backend database to recover storage space.
- rpc Defragment(DefragmentRequest) returns (DefragmentResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/defragment"
- body: "*"
- };
- }
-
- // Hash computes the hash of whole backend keyspace,
- // including key, lease, and other buckets in storage.
- // This is designed for testing ONLY!
- // Do not rely on this in production with ongoing transactions,
- // since Hash operation does not hold MVCC locks.
- // Use "HashKV" API instead for "key" bucket consistency checks.
- rpc Hash(HashRequest) returns (HashResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/hash"
- body: "*"
- };
- }
-
- // HashKV computes the hash of all MVCC keys up to a given revision.
- // It only iterates "key" bucket in backend storage.
- rpc HashKV(HashKVRequest) returns (HashKVResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/hash"
- body: "*"
- };
- }
-
- // Snapshot sends a snapshot of the entire backend from a member over a stream to a client.
- rpc Snapshot(SnapshotRequest) returns (stream SnapshotResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/snapshot"
- body: "*"
- };
- }
-
- // MoveLeader requests current leader node to transfer its leadership to transferee.
- rpc MoveLeader(MoveLeaderRequest) returns (MoveLeaderResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/transfer-leadership"
- body: "*"
- };
- }
-
- // Downgrade requests downgrade, cancel downgrade on the cluster version.
- rpc Downgrade(DowngradeRequest) returns (DowngradeResponse) {
- option (google.api.http) = {
- post: "/v3/maintenance/downgrade"
- body: "*"
- };
- }
-}
-
-service Auth {
- // AuthEnable enables authentication.
- rpc AuthEnable(AuthEnableRequest) returns (AuthEnableResponse) {
- option (google.api.http) = {
- post: "/v3/auth/enable"
- body: "*"
- };
- }
-
- // AuthDisable disables authentication.
- rpc AuthDisable(AuthDisableRequest) returns (AuthDisableResponse) {
- option (google.api.http) = {
- post: "/v3/auth/disable"
- body: "*"
- };
- }
-
- // AuthStatus displays authentication status.
- rpc AuthStatus(AuthStatusRequest) returns (AuthStatusResponse) {
- option (google.api.http) = {
- post: "/v3/auth/status"
- body: "*"
- };
- }
-
- // Authenticate processes an authenticate request.
- rpc Authenticate(AuthenticateRequest) returns (AuthenticateResponse) {
- option (google.api.http) = {
- post: "/v3/auth/authenticate"
- body: "*"
- };
- }
-
- // UserAdd adds a new user. User name cannot be empty.
- rpc UserAdd(AuthUserAddRequest) returns (AuthUserAddResponse) {
- option (google.api.http) = {
- post: "/v3/auth/user/add"
- body: "*"
- };
- }
-
- // UserGet gets detailed user information.
- rpc UserGet(AuthUserGetRequest) returns (AuthUserGetResponse) {
- option (google.api.http) = {
- post: "/v3/auth/user/get"
- body: "*"
- };
- }
-
- // UserList gets a list of all users.
- rpc UserList(AuthUserListRequest) returns (AuthUserListResponse) {
- option (google.api.http) = {
- post: "/v3/auth/user/list"
- body: "*"
- };
- }
-
- // UserDelete deletes a specified user.
- rpc UserDelete(AuthUserDeleteRequest) returns (AuthUserDeleteResponse) {
- option (google.api.http) = {
- post: "/v3/auth/user/delete"
- body: "*"
- };
- }
-
- // UserChangePassword changes the password of a specified user.
- rpc UserChangePassword(AuthUserChangePasswordRequest) returns (AuthUserChangePasswordResponse) {
- option (google.api.http) = {
- post: "/v3/auth/user/changepw"
- body: "*"
- };
- }
-
- // UserGrant grants a role to a specified user.
- rpc UserGrantRole(AuthUserGrantRoleRequest) returns (AuthUserGrantRoleResponse) {
- option (google.api.http) = {
- post: "/v3/auth/user/grant"
- body: "*"
- };
- }
-
- // UserRevokeRole revokes a role of specified user.
- rpc UserRevokeRole(AuthUserRevokeRoleRequest) returns (AuthUserRevokeRoleResponse) {
- option (google.api.http) = {
- post: "/v3/auth/user/revoke"
- body: "*"
- };
- }
-
- // RoleAdd adds a new role. Role name cannot be empty.
- rpc RoleAdd(AuthRoleAddRequest) returns (AuthRoleAddResponse) {
- option (google.api.http) = {
- post: "/v3/auth/role/add"
- body: "*"
- };
- }
-
- // RoleGet gets detailed role information.
- rpc RoleGet(AuthRoleGetRequest) returns (AuthRoleGetResponse) {
- option (google.api.http) = {
- post: "/v3/auth/role/get"
- body: "*"
- };
- }
-
- // RoleList gets lists of all roles.
- rpc RoleList(AuthRoleListRequest) returns (AuthRoleListResponse) {
- option (google.api.http) = {
- post: "/v3/auth/role/list"
- body: "*"
- };
- }
-
- // RoleDelete deletes a specified role.
- rpc RoleDelete(AuthRoleDeleteRequest) returns (AuthRoleDeleteResponse) {
- option (google.api.http) = {
- post: "/v3/auth/role/delete"
- body: "*"
- };
- }
-
- // RoleGrantPermission grants a permission of a specified key or range to a specified role.
- rpc RoleGrantPermission(AuthRoleGrantPermissionRequest) returns (AuthRoleGrantPermissionResponse) {
- option (google.api.http) = {
- post: "/v3/auth/role/grant"
- body: "*"
- };
- }
-
- // RoleRevokePermission revokes a key or range permission of a specified role.
- rpc RoleRevokePermission(AuthRoleRevokePermissionRequest) returns (AuthRoleRevokePermissionResponse) {
- option (google.api.http) = {
- post: "/v3/auth/role/revoke"
- body: "*"
- };
- }
-}
-
-message ResponseHeader {
- // cluster_id is the ID of the cluster which sent the response.
- uint64 cluster_id = 1;
- // member_id is the ID of the member which sent the response.
- uint64 member_id = 2;
- // revision is the key-value store revision when the request was applied.
- // For watch progress responses, the header.revision indicates progress. All future events
- // recieved in this stream are guaranteed to have a higher revision number than the
- // header.revision number.
- int64 revision = 3;
- // raft_term is the raft term when the request was applied.
- uint64 raft_term = 4;
-}
-
-message RangeRequest {
- enum SortOrder {
- NONE = 0; // default, no sorting
- ASCEND = 1; // lowest target value first
- DESCEND = 2; // highest target value first
- }
- enum SortTarget {
- KEY = 0;
- VERSION = 1;
- CREATE = 2;
- MOD = 3;
- VALUE = 4;
- }
-
- // key is the first key for the range. If range_end is not given, the request only looks up key.
- bytes key = 1;
- // range_end is the upper bound on the requested range [key, range_end).
- // If range_end is '\0', the range is all keys >= key.
- // If range_end is key plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"),
- // then the range request gets all keys prefixed with key.
- // If both key and range_end are '\0', then the range request returns all keys.
- bytes range_end = 2;
- // limit is a limit on the number of keys returned for the request. When limit is set to 0,
- // it is treated as no limit.
- int64 limit = 3;
- // revision is the point-in-time of the key-value store to use for the range.
- // If revision is less or equal to zero, the range is over the newest key-value store.
- // If the revision has been compacted, ErrCompacted is returned as a response.
- int64 revision = 4;
-
- // sort_order is the order for returned sorted results.
- SortOrder sort_order = 5;
-
- // sort_target is the key-value field to use for sorting.
- SortTarget sort_target = 6;
-
- // serializable sets the range request to use serializable member-local reads.
- // Range requests are linearizable by default; linearizable requests have higher
- // latency and lower throughput than serializable requests but reflect the current
- // consensus of the cluster. For better performance, in exchange for possible stale reads,
- // a serializable range request is served locally without needing to reach consensus
- // with other nodes in the cluster.
- bool serializable = 7;
-
- // keys_only when set returns only the keys and not the values.
- bool keys_only = 8;
-
- // count_only when set returns only the count of the keys in the range.
- bool count_only = 9;
-
- // min_mod_revision is the lower bound for returned key mod revisions; all keys with
- // lesser mod revisions will be filtered away.
- int64 min_mod_revision = 10;
-
- // max_mod_revision is the upper bound for returned key mod revisions; all keys with
- // greater mod revisions will be filtered away.
- int64 max_mod_revision = 11;
-
- // min_create_revision is the lower bound for returned key create revisions; all keys with
- // lesser create revisions will be filtered away.
- int64 min_create_revision = 12;
-
- // max_create_revision is the upper bound for returned key create revisions; all keys with
- // greater create revisions will be filtered away.
- int64 max_create_revision = 13;
-}
-
-message RangeResponse {
- ResponseHeader header = 1;
- // kvs is the list of key-value pairs matched by the range request.
- // kvs is empty when count is requested.
- repeated mvccpb.KeyValue kvs = 2;
- // more indicates if there are more keys to return in the requested range.
- bool more = 3;
- // count is set to the number of keys within the range when requested.
- int64 count = 4;
-}
-
-message PutRequest {
- // key is the key, in bytes, to put into the key-value store.
- bytes key = 1;
- // value is the value, in bytes, to associate with the key in the key-value store.
- bytes value = 2;
- // lease is the lease ID to associate with the key in the key-value store. A lease
- // value of 0 indicates no lease.
- int64 lease = 3;
-
- // If prev_kv is set, etcd gets the previous key-value pair before changing it.
- // The previous key-value pair will be returned in the put response.
- bool prev_kv = 4;
-
- // If ignore_value is set, etcd updates the key using its current value.
- // Returns an error if the key does not exist.
- bool ignore_value = 5;
-
- // If ignore_lease is set, etcd updates the key using its current lease.
- // Returns an error if the key does not exist.
- bool ignore_lease = 6;
-}
-
-message PutResponse {
- ResponseHeader header = 1;
- // if prev_kv is set in the request, the previous key-value pair will be returned.
- mvccpb.KeyValue prev_kv = 2;
-}
-
-message DeleteRangeRequest {
- // key is the first key to delete in the range.
- bytes key = 1;
- // range_end is the key following the last key to delete for the range [key, range_end).
- // If range_end is not given, the range is defined to contain only the key argument.
- // If range_end is one bit larger than the given key, then the range is all the keys
- // with the prefix (the given key).
- // If range_end is '\0', the range is all keys greater than or equal to the key argument.
- bytes range_end = 2;
-
- // If prev_kv is set, etcd gets the previous key-value pairs before deleting it.
- // The previous key-value pairs will be returned in the delete response.
- bool prev_kv = 3;
-}
-
-message DeleteRangeResponse {
- ResponseHeader header = 1;
- // deleted is the number of keys deleted by the delete range request.
- int64 deleted = 2;
- // if prev_kv is set in the request, the previous key-value pairs will be returned.
- repeated mvccpb.KeyValue prev_kvs = 3;
-}
-
-message RequestOp {
- // request is a union of request types accepted by a transaction.
- oneof request {
- RangeRequest request_range = 1;
- PutRequest request_put = 2;
- DeleteRangeRequest request_delete_range = 3;
- TxnRequest request_txn = 4;
- }
-}
-
-message ResponseOp {
- // response is a union of response types returned by a transaction.
- oneof response {
- RangeResponse response_range = 1;
- PutResponse response_put = 2;
- DeleteRangeResponse response_delete_range = 3;
- TxnResponse response_txn = 4;
- }
-}
-
-message Compare {
- enum CompareResult {
- EQUAL = 0;
- GREATER = 1;
- LESS = 2;
- NOT_EQUAL = 3;
- }
- enum CompareTarget {
- VERSION = 0;
- CREATE = 1;
- MOD = 2;
- VALUE = 3;
- LEASE = 4;
- }
- // result is logical comparison operation for this comparison.
- CompareResult result = 1;
- // target is the key-value field to inspect for the comparison.
- CompareTarget target = 2;
- // key is the subject key for the comparison operation.
- bytes key = 3;
- oneof target_union {
- // version is the version of the given key
- int64 version = 4;
- // create_revision is the creation revision of the given key
- int64 create_revision = 5;
- // mod_revision is the last modified revision of the given key.
- int64 mod_revision = 6;
- // value is the value of the given key, in bytes.
- bytes value = 7;
- // lease is the lease id of the given key.
- int64 lease = 8;
- // leave room for more target_union field tags, jump to 64
- }
-
- // range_end compares the given target to all keys in the range [key, range_end).
- // See RangeRequest for more details on key ranges.
- bytes range_end = 64;
- // TODO: fill out with most of the rest of RangeRequest fields when needed.
-}
-
-// From google paxosdb paper:
-// Our implementation hinges around a powerful primitive which we call MultiOp. All other database
-// operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically
-// and consists of three components:
-// 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check
-// for the absence or presence of a value, or compare with a given value. Two different tests in the guard
-// may apply to the same or different entries in the database. All tests in the guard are applied and
-// MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise
-// it executes f op (see item 3 below).
-// 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or
-// lookup operation, and applies to a single database entry. Two different operations in the list may apply
-// to the same or different entries in the database. These operations are executed
-// if guard evaluates to
-// true.
-// 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false.
-message TxnRequest {
- // compare is a list of predicates representing a conjunction of terms.
- // If the comparisons succeed, then the success requests will be processed in order,
- // and the response will contain their respective responses in order.
- // If the comparisons fail, then the failure requests will be processed in order,
- // and the response will contain their respective responses in order.
- repeated Compare compare = 1;
- // success is a list of requests which will be applied when compare evaluates to true.
- repeated RequestOp success = 2;
- // failure is a list of requests which will be applied when compare evaluates to false.
- repeated RequestOp failure = 3;
-}
-
-message TxnResponse {
- ResponseHeader header = 1;
- // succeeded is set to true if the compare evaluated to true or false otherwise.
- bool succeeded = 2;
- // responses is a list of responses corresponding to the results from applying
- // success if succeeded is true or failure if succeeded is false.
- repeated ResponseOp responses = 3;
-}
-
-// CompactionRequest compacts the key-value store up to a given revision. All superseded keys
-// with a revision less than the compaction revision will be removed.
-message CompactionRequest {
- // revision is the key-value store revision for the compaction operation.
- int64 revision = 1;
- // physical is set so the RPC will wait until the compaction is physically
- // applied to the local database such that compacted entries are totally
- // removed from the backend database.
- bool physical = 2;
-}
-
-message CompactionResponse {
- ResponseHeader header = 1;
-}
-
-message HashRequest {
-}
-
-message HashKVRequest {
- // revision is the key-value store revision for the hash operation.
- int64 revision = 1;
-}
-
-message HashKVResponse {
- ResponseHeader header = 1;
- // hash is the hash value computed from the responding member's MVCC keys up to a given revision.
- uint32 hash = 2;
- // compact_revision is the compacted revision of key-value store when hash begins.
- int64 compact_revision = 3;
-}
-
-message HashResponse {
- ResponseHeader header = 1;
- // hash is the hash value computed from the responding member's KV's backend.
- uint32 hash = 2;
-}
-
-message SnapshotRequest {
-}
-
-message SnapshotResponse {
- // header has the current key-value store information. The first header in the snapshot
- // stream indicates the point in time of the snapshot.
- ResponseHeader header = 1;
-
- // remaining_bytes is the number of blob bytes to be sent after this message
- uint64 remaining_bytes = 2;
-
- // blob contains the next chunk of the snapshot in the snapshot stream.
- bytes blob = 3;
-}
-
-message WatchRequest {
- // request_union is a request to either create a new watcher or cancel an existing watcher.
- oneof request_union {
- WatchCreateRequest create_request = 1;
- WatchCancelRequest cancel_request = 2;
- WatchProgressRequest progress_request = 3;
- }
-}
-
-message WatchCreateRequest {
- // key is the key to register for watching.
- bytes key = 1;
-
- // range_end is the end of the range [key, range_end) to watch. If range_end is not given,
- // only the key argument is watched. If range_end is equal to '\0', all keys greater than
- // or equal to the key argument are watched.
- // If the range_end is one bit larger than the given key,
- // then all keys with the prefix (the given key) will be watched.
- bytes range_end = 2;
-
- // start_revision is an optional revision to watch from (inclusive). No start_revision is "now".
- int64 start_revision = 3;
-
- // progress_notify is set so that the etcd server will periodically send a WatchResponse with
- // no events to the new watcher if there are no recent events. It is useful when clients
- // wish to recover a disconnected watcher starting from a recent known revision.
- // The etcd server may decide how often it will send notifications based on current load.
- bool progress_notify = 4;
-
- enum FilterType {
- // filter out put event.
- NOPUT = 0;
- // filter out delete event.
- NODELETE = 1;
- }
-
- // filters filter the events at server side before it sends back to the watcher.
- repeated FilterType filters = 5;
-
- // If prev_kv is set, created watcher gets the previous KV before the event happens.
- // If the previous KV is already compacted, nothing will be returned.
- bool prev_kv = 6;
-
- // If watch_id is provided and non-zero, it will be assigned to this watcher.
- // Since creating a watcher in etcd is not a synchronous operation,
- // this can be used ensure that ordering is correct when creating multiple
- // watchers on the same stream. Creating a watcher with an ID already in
- // use on the stream will cause an error to be returned.
- int64 watch_id = 7;
-
- // fragment enables splitting large revisions into multiple watch responses.
- bool fragment = 8;
-}
-
-message WatchCancelRequest {
- // watch_id is the watcher id to cancel so that no more events are transmitted.
- int64 watch_id = 1;
-}
-
-// Requests the a watch stream progress status be sent in the watch response stream as soon as
-// possible.
-message WatchProgressRequest {
-}
-
-message WatchResponse {
- ResponseHeader header = 1;
- // watch_id is the ID of the watcher that corresponds to the response.
- int64 watch_id = 2;
-
- // created is set to true if the response is for a create watch request.
- // The client should record the watch_id and expect to receive events for
- // the created watcher from the same stream.
- // All events sent to the created watcher will attach with the same watch_id.
- bool created = 3;
-
- // canceled is set to true if the response is for a cancel watch request.
- // No further events will be sent to the canceled watcher.
- bool canceled = 4;
-
- // compact_revision is set to the minimum index if a watcher tries to watch
- // at a compacted index.
- //
- // This happens when creating a watcher at a compacted revision or the watcher cannot
- // catch up with the progress of the key-value store.
- //
- // The client should treat the watcher as canceled and should not try to create any
- // watcher with the same start_revision again.
- int64 compact_revision = 5;
-
- // cancel_reason indicates the reason for canceling the watcher.
- string cancel_reason = 6;
-
- // framgment is true if large watch response was split over multiple responses.
- bool fragment = 7;
-
- repeated mvccpb.Event events = 11;
-}
-
-message LeaseGrantRequest {
- // TTL is the advisory time-to-live in seconds. Expired lease will return -1.
- int64 TTL = 1;
- // ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID.
- int64 ID = 2;
-}
-
-message LeaseGrantResponse {
- ResponseHeader header = 1;
- // ID is the lease ID for the granted lease.
- int64 ID = 2;
- // TTL is the server chosen lease time-to-live in seconds.
- int64 TTL = 3;
- string error = 4;
-}
-
-message LeaseRevokeRequest {
- // ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted.
- int64 ID = 1;
-}
-
-message LeaseRevokeResponse {
- ResponseHeader header = 1;
-}
-
-message LeaseCheckpoint {
- // ID is the lease ID to checkpoint.
- int64 ID = 1;
-
- // Remaining_TTL is the remaining time until expiry of the lease.
- int64 remaining_TTL = 2;
-}
-
-message LeaseCheckpointRequest {
- repeated LeaseCheckpoint checkpoints = 1;
-}
-
-message LeaseCheckpointResponse {
- ResponseHeader header = 1;
-}
-
-message LeaseKeepAliveRequest {
- // ID is the lease ID for the lease to keep alive.
- int64 ID = 1;
-}
-
-message LeaseKeepAliveResponse {
- ResponseHeader header = 1;
- // ID is the lease ID from the keep alive request.
- int64 ID = 2;
- // TTL is the new time-to-live for the lease.
- int64 TTL = 3;
-}
-
-message LeaseTimeToLiveRequest {
- // ID is the lease ID for the lease.
- int64 ID = 1;
- // keys is true to query all the keys attached to this lease.
- bool keys = 2;
-}
-
-message LeaseTimeToLiveResponse {
- ResponseHeader header = 1;
- // ID is the lease ID from the keep alive request.
- int64 ID = 2;
- // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds.
- int64 TTL = 3;
- // GrantedTTL is the initial granted time in seconds upon lease creation/renewal.
- int64 grantedTTL = 4;
- // Keys is the list of keys attached to this lease.
- repeated bytes keys = 5;
-}
-
-message LeaseLeasesRequest {
-}
-
-message LeaseStatus {
- int64 ID = 1;
- // TODO: int64 TTL = 2;
-}
-
-message LeaseLeasesResponse {
- ResponseHeader header = 1;
- repeated LeaseStatus leases = 2;
-}
-
-message Member {
- // ID is the member ID for this member.
- uint64 ID = 1;
- // name is the human-readable name of the member. If the member is not started, the name will be an empty string.
- string name = 2;
- // peerURLs is the list of URLs the member exposes to the cluster for communication.
- repeated string peerURLs = 3;
- // clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty.
- repeated string clientURLs = 4;
- // isLearner indicates if the member is raft learner.
- bool isLearner = 5;
-}
-
-message MemberAddRequest {
- // peerURLs is the list of URLs the added member will use to communicate with the cluster.
- repeated string peerURLs = 1;
- // isLearner indicates if the added member is raft learner.
- bool isLearner = 2;
-}
-
-message MemberAddResponse {
- ResponseHeader header = 1;
- // member is the member information for the added member.
- Member member = 2;
- // members is a list of all members after adding the new member.
- repeated Member members = 3;
-}
-
-message MemberRemoveRequest {
- // ID is the member ID of the member to remove.
- uint64 ID = 1;
-}
-
-message MemberRemoveResponse {
- ResponseHeader header = 1;
- // members is a list of all members after removing the member.
- repeated Member members = 2;
-}
-
-message MemberUpdateRequest {
- // ID is the member ID of the member to update.
- uint64 ID = 1;
- // peerURLs is the new list of URLs the member will use to communicate with the cluster.
- repeated string peerURLs = 2;
-}
-
-message MemberUpdateResponse{
- ResponseHeader header = 1;
- // members is a list of all members after updating the member.
- repeated Member members = 2;
-}
-
-message MemberListRequest {
- bool linearizable = 1;
-}
-
-message MemberListResponse {
- ResponseHeader header = 1;
- // members is a list of all members associated with the cluster.
- repeated Member members = 2;
-}
-
-message MemberPromoteRequest {
- // ID is the member ID of the member to promote.
- uint64 ID = 1;
-}
-
-message MemberPromoteResponse {
- ResponseHeader header = 1;
- // members is a list of all members after promoting the member.
- repeated Member members = 2;
-}
-
-message DefragmentRequest {
-}
-
-message DefragmentResponse {
- ResponseHeader header = 1;
-}
-
-message MoveLeaderRequest {
- // targetID is the node ID for the new leader.
- uint64 targetID = 1;
-}
-
-message MoveLeaderResponse {
- ResponseHeader header = 1;
-}
-
-enum AlarmType {
- NONE = 0; // default, used to query if any alarm is active
- NOSPACE = 1; // space quota is exhausted
- CORRUPT = 2; // kv store corruption detected
-}
-
-message AlarmRequest {
- enum AlarmAction {
- GET = 0;
- ACTIVATE = 1;
- DEACTIVATE = 2;
- }
- // action is the kind of alarm request to issue. The action
- // may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a
- // raised alarm.
- AlarmAction action = 1;
- // memberID is the ID of the member associated with the alarm. If memberID is 0, the
- // alarm request covers all members.
- uint64 memberID = 2;
- // alarm is the type of alarm to consider for this request.
- AlarmType alarm = 3;
-}
-
-message AlarmMember {
- // memberID is the ID of the member associated with the raised alarm.
- uint64 memberID = 1;
- // alarm is the type of alarm which has been raised.
- AlarmType alarm = 2;
-}
-
-message AlarmResponse {
- ResponseHeader header = 1;
- // alarms is a list of alarms associated with the alarm request.
- repeated AlarmMember alarms = 2;
-}
-
-message DowngradeRequest {
- enum DowngradeAction {
- VALIDATE = 0;
- ENABLE = 1;
- CANCEL = 2;
- }
-
- // action is the kind of downgrade request to issue. The action may
- // VALIDATE the target version, DOWNGRADE the cluster version,
- // or CANCEL the current downgrading job.
- DowngradeAction action = 1;
- // version is the target version to downgrade.
- string version = 2;
-}
-
-message DowngradeResponse {
- ResponseHeader header = 1;
- // version is the current cluster version.
- string version = 2;
-}
-
-message StatusRequest {
-}
-
-message StatusResponse {
- ResponseHeader header = 1;
- // version is the cluster protocol version used by the responding member.
- string version = 2;
- // dbSize is the size of the backend database physically allocated, in bytes, of the responding member.
- int64 dbSize = 3;
- // leader is the member ID which the responding member believes is the current leader.
- uint64 leader = 4;
- // raftIndex is the current raft committed index of the responding member.
- uint64 raftIndex = 5;
- // raftTerm is the current raft term of the responding member.
- uint64 raftTerm = 6;
- // raftAppliedIndex is the current raft applied index of the responding member.
- uint64 raftAppliedIndex = 7;
- // errors contains alarm/health information and status.
- repeated string errors = 8;
- // dbSizeInUse is the size of the backend database logically in use, in bytes, of the responding member.
- int64 dbSizeInUse = 9;
- // isLearner indicates if the member is raft learner.
- bool isLearner = 10;
-}
-
-message AuthEnableRequest {
-}
-
-message AuthDisableRequest {
-}
-
-message AuthStatusRequest {
-}
-
-message AuthenticateRequest {
- string name = 1;
- string password = 2;
-}
-
-message AuthUserAddRequest {
- string name = 1;
- string password = 2;
- authpb.UserAddOptions options = 3;
- string hashedPassword = 4;
-}
-
-message AuthUserGetRequest {
- string name = 1;
-}
-
-message AuthUserDeleteRequest {
- // name is the name of the user to delete.
- string name = 1;
-}
-
-message AuthUserChangePasswordRequest {
- // name is the name of the user whose password is being changed.
- string name = 1;
- // password is the new password for the user. Note that this field will be removed in the API layer.
- string password = 2;
- // hashedPassword is the new password for the user. Note that this field will be initialized in the API layer.
- string hashedPassword = 3;
-}
-
-message AuthUserGrantRoleRequest {
- // user is the name of the user which should be granted a given role.
- string user = 1;
- // role is the name of the role to grant to the user.
- string role = 2;
-}
-
-message AuthUserRevokeRoleRequest {
- string name = 1;
- string role = 2;
-}
-
-message AuthRoleAddRequest {
- // name is the name of the role to add to the authentication system.
- string name = 1;
-}
-
-message AuthRoleGetRequest {
- string role = 1;
-}
-
-message AuthUserListRequest {
-}
-
-message AuthRoleListRequest {
-}
-
-message AuthRoleDeleteRequest {
- string role = 1;
-}
-
-message AuthRoleGrantPermissionRequest {
- // name is the name of the role which will be granted the permission.
- string name = 1;
- // perm is the permission to grant to the role.
- authpb.Permission perm = 2;
-}
-
-message AuthRoleRevokePermissionRequest {
- string role = 1;
- bytes key = 2;
- bytes range_end = 3;
-}
-
-message AuthEnableResponse {
- ResponseHeader header = 1;
-}
-
-message AuthDisableResponse {
- ResponseHeader header = 1;
-}
-
-message AuthStatusResponse {
- ResponseHeader header = 1;
- bool enabled = 2;
- // authRevision is the current revision of auth store
- uint64 authRevision = 3;
-}
-
-message AuthenticateResponse {
- ResponseHeader header = 1;
- // token is an authorized token that can be used in succeeding RPCs
- string token = 2;
-}
-
-message AuthUserAddResponse {
- ResponseHeader header = 1;
-}
-
-message AuthUserGetResponse {
- ResponseHeader header = 1;
-
- repeated string roles = 2;
-}
-
-message AuthUserDeleteResponse {
- ResponseHeader header = 1;
-}
-
-message AuthUserChangePasswordResponse {
- ResponseHeader header = 1;
-}
-
-message AuthUserGrantRoleResponse {
- ResponseHeader header = 1;
-}
-
-message AuthUserRevokeRoleResponse {
- ResponseHeader header = 1;
-}
-
-message AuthRoleAddResponse {
- ResponseHeader header = 1;
-}
-
-message AuthRoleGetResponse {
- ResponseHeader header = 1;
-
- repeated authpb.Permission perm = 2;
-}
-
-message AuthRoleListResponse {
- ResponseHeader header = 1;
-
- repeated string roles = 2;
-}
-
-message AuthUserListResponse {
- ResponseHeader header = 1;
-
- repeated string users = 2;
-}
-
-message AuthRoleDeleteResponse {
- ResponseHeader header = 1;
-}
-
-message AuthRoleGrantPermissionResponse {
- ResponseHeader header = 1;
-}
-
-message AuthRoleRevokePermissionResponse {
- ResponseHeader header = 1;
-}
diff --git a/etcd-fix/api/go.mod b/etcd-fix/api/go.mod
deleted file mode 100644
index 28e9695..0000000
--- a/etcd-fix/api/go.mod
+++ /dev/null
@@ -1,22 +0,0 @@
-module go.etcd.io/etcd/api/v3
-
-go 1.15
-
-require (
- github.com/coreos/go-semver v0.3.0
- github.com/gogo/protobuf v1.3.1
- github.com/golang/protobuf v1.3.5
- github.com/grpc-ecosystem/grpc-gateway v1.14.6
- google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884
- google.golang.org/grpc v1.29.1
-)
-
-// Bad imports are sometimes causing attempts to pull that code.
-// This makes the error more explicit.
-replace (
- go.etcd.io/etcd => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/etcd/api/v3 => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/etcd/pkg/v3 => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/etcd/tests/v3 => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/etcd/v3 => ./FORBIDDEN_DEPENDENCY
-)
diff --git a/etcd-fix/api/go.sum b/etcd-fix/api/go.sum
deleted file mode 100644
index 6258c53..0000000
--- a/etcd-fix/api/go.sum
+++ /dev/null
@@ -1,77 +0,0 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
-github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/grpc-ecosystem/grpc-gateway v1.14.6 h1:8ERzHx8aj1Sc47mu9n/AksaKCSWrMchFtkdrS4BIj5o=
-github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs=
-golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/etcd-fix/api/membershippb/membership.pb.go b/etcd-fix/api/membershippb/membership.pb.go
deleted file mode 100644
index 55a3d01..0000000
--- a/etcd-fix/api/membershippb/membership.pb.go
+++ /dev/null
@@ -1,1472 +0,0 @@
-// Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: membership.proto
-
-package membershippb
-
-import (
- fmt "fmt"
- io "io"
- math "math"
- math_bits "math/bits"
-
- _ "github.com/gogo/protobuf/gogoproto"
- proto "github.com/golang/protobuf/proto"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-// RaftAttributes represents the raft related attributes of an etcd member.
-type RaftAttributes struct {
- // peerURLs is the list of peers in the raft cluster.
- PeerUrls []string `protobuf:"bytes,1,rep,name=peer_urls,json=peerUrls,proto3" json:"peer_urls,omitempty"`
- // isLearner indicates if the member is raft learner.
- IsLearner bool `protobuf:"varint,2,opt,name=is_learner,json=isLearner,proto3" json:"is_learner,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RaftAttributes) Reset() { *m = RaftAttributes{} }
-func (m *RaftAttributes) String() string { return proto.CompactTextString(m) }
-func (*RaftAttributes) ProtoMessage() {}
-func (*RaftAttributes) Descriptor() ([]byte, []int) {
- return fileDescriptor_949fe0d019050ef5, []int{0}
-}
-func (m *RaftAttributes) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *RaftAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_RaftAttributes.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *RaftAttributes) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RaftAttributes.Merge(m, src)
-}
-func (m *RaftAttributes) XXX_Size() int {
- return m.Size()
-}
-func (m *RaftAttributes) XXX_DiscardUnknown() {
- xxx_messageInfo_RaftAttributes.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RaftAttributes proto.InternalMessageInfo
-
-// Attributes represents all the non-raft related attributes of an etcd member.
-type Attributes struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- ClientUrls []string `protobuf:"bytes,2,rep,name=client_urls,json=clientUrls,proto3" json:"client_urls,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Attributes) Reset() { *m = Attributes{} }
-func (m *Attributes) String() string { return proto.CompactTextString(m) }
-func (*Attributes) ProtoMessage() {}
-func (*Attributes) Descriptor() ([]byte, []int) {
- return fileDescriptor_949fe0d019050ef5, []int{1}
-}
-func (m *Attributes) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Attributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Attributes.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Attributes) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Attributes.Merge(m, src)
-}
-func (m *Attributes) XXX_Size() int {
- return m.Size()
-}
-func (m *Attributes) XXX_DiscardUnknown() {
- xxx_messageInfo_Attributes.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Attributes proto.InternalMessageInfo
-
-type Member struct {
- ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
- RaftAttributes *RaftAttributes `protobuf:"bytes,2,opt,name=raft_attributes,json=raftAttributes,proto3" json:"raft_attributes,omitempty"`
- MemberAttributes *Attributes `protobuf:"bytes,3,opt,name=member_attributes,json=memberAttributes,proto3" json:"member_attributes,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Member) Reset() { *m = Member{} }
-func (m *Member) String() string { return proto.CompactTextString(m) }
-func (*Member) ProtoMessage() {}
-func (*Member) Descriptor() ([]byte, []int) {
- return fileDescriptor_949fe0d019050ef5, []int{2}
-}
-func (m *Member) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Member) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Member.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Member) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Member.Merge(m, src)
-}
-func (m *Member) XXX_Size() int {
- return m.Size()
-}
-func (m *Member) XXX_DiscardUnknown() {
- xxx_messageInfo_Member.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Member proto.InternalMessageInfo
-
-type ClusterVersionSetRequest struct {
- Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ClusterVersionSetRequest) Reset() { *m = ClusterVersionSetRequest{} }
-func (m *ClusterVersionSetRequest) String() string { return proto.CompactTextString(m) }
-func (*ClusterVersionSetRequest) ProtoMessage() {}
-func (*ClusterVersionSetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_949fe0d019050ef5, []int{3}
-}
-func (m *ClusterVersionSetRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *ClusterVersionSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_ClusterVersionSetRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *ClusterVersionSetRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ClusterVersionSetRequest.Merge(m, src)
-}
-func (m *ClusterVersionSetRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *ClusterVersionSetRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ClusterVersionSetRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ClusterVersionSetRequest proto.InternalMessageInfo
-
-type ClusterMemberAttrSetRequest struct {
- Member_ID uint64 `protobuf:"varint,1,opt,name=member_ID,json=memberID,proto3" json:"member_ID,omitempty"`
- MemberAttributes *Attributes `protobuf:"bytes,2,opt,name=member_attributes,json=memberAttributes,proto3" json:"member_attributes,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ClusterMemberAttrSetRequest) Reset() { *m = ClusterMemberAttrSetRequest{} }
-func (m *ClusterMemberAttrSetRequest) String() string { return proto.CompactTextString(m) }
-func (*ClusterMemberAttrSetRequest) ProtoMessage() {}
-func (*ClusterMemberAttrSetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_949fe0d019050ef5, []int{4}
-}
-func (m *ClusterMemberAttrSetRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *ClusterMemberAttrSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_ClusterMemberAttrSetRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *ClusterMemberAttrSetRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ClusterMemberAttrSetRequest.Merge(m, src)
-}
-func (m *ClusterMemberAttrSetRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *ClusterMemberAttrSetRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ClusterMemberAttrSetRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ClusterMemberAttrSetRequest proto.InternalMessageInfo
-
-type DowngradeInfoSetRequest struct {
- Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
- Ver string `protobuf:"bytes,2,opt,name=ver,proto3" json:"ver,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DowngradeInfoSetRequest) Reset() { *m = DowngradeInfoSetRequest{} }
-func (m *DowngradeInfoSetRequest) String() string { return proto.CompactTextString(m) }
-func (*DowngradeInfoSetRequest) ProtoMessage() {}
-func (*DowngradeInfoSetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_949fe0d019050ef5, []int{5}
-}
-func (m *DowngradeInfoSetRequest) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *DowngradeInfoSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_DowngradeInfoSetRequest.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *DowngradeInfoSetRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DowngradeInfoSetRequest.Merge(m, src)
-}
-func (m *DowngradeInfoSetRequest) XXX_Size() int {
- return m.Size()
-}
-func (m *DowngradeInfoSetRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_DowngradeInfoSetRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DowngradeInfoSetRequest proto.InternalMessageInfo
-
-func init() {
- proto.RegisterType((*RaftAttributes)(nil), "membershippb.RaftAttributes")
- proto.RegisterType((*Attributes)(nil), "membershippb.Attributes")
- proto.RegisterType((*Member)(nil), "membershippb.Member")
- proto.RegisterType((*ClusterVersionSetRequest)(nil), "membershippb.ClusterVersionSetRequest")
- proto.RegisterType((*ClusterMemberAttrSetRequest)(nil), "membershippb.ClusterMemberAttrSetRequest")
- proto.RegisterType((*DowngradeInfoSetRequest)(nil), "membershippb.DowngradeInfoSetRequest")
-}
-
-func init() { proto.RegisterFile("membership.proto", fileDescriptor_949fe0d019050ef5) }
-
-var fileDescriptor_949fe0d019050ef5 = []byte{
- // 367 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x4e, 0xf2, 0x40,
- 0x14, 0x85, 0x99, 0x42, 0xf8, 0xdb, 0xcb, 0x1f, 0xc4, 0x09, 0x89, 0x8d, 0x68, 0x25, 0x5d, 0xb1,
- 0x30, 0x98, 0xe8, 0x13, 0xa0, 0xb0, 0x20, 0x81, 0xcd, 0x18, 0xdd, 0x92, 0x56, 0x2e, 0xd8, 0xa4,
- 0x74, 0xea, 0xcc, 0x54, 0xd7, 0xbe, 0x85, 0x4f, 0xe0, 0xb3, 0xb0, 0xf4, 0x11, 0x14, 0x5f, 0xc4,
- 0x74, 0x5a, 0x4a, 0x49, 0xdc, 0xb8, 0xbb, 0x3d, 0xbd, 0xf7, 0x9c, 0xf3, 0x35, 0x85, 0xd6, 0x0a,
- 0x57, 0x3e, 0x0a, 0xf9, 0x18, 0xc4, 0xfd, 0x58, 0x70, 0xc5, 0xe9, 0xff, 0x9d, 0x12, 0xfb, 0xc7,
- 0xed, 0x25, 0x5f, 0x72, 0xfd, 0xe2, 0x22, 0x9d, 0xb2, 0x1d, 0x77, 0x02, 0x4d, 0xe6, 0x2d, 0xd4,
- 0x40, 0x29, 0x11, 0xf8, 0x89, 0x42, 0x49, 0x3b, 0x60, 0xc5, 0x88, 0x62, 0x96, 0x88, 0x50, 0xda,
- 0xa4, 0x5b, 0xed, 0x59, 0xcc, 0x4c, 0x85, 0x3b, 0x11, 0x4a, 0x7a, 0x0a, 0x10, 0xc8, 0x59, 0x88,
- 0x9e, 0x88, 0x50, 0xd8, 0x46, 0x97, 0xf4, 0x4c, 0x66, 0x05, 0x72, 0x92, 0x09, 0xee, 0x00, 0xa0,
- 0xe4, 0x44, 0xa1, 0x16, 0x79, 0x2b, 0xb4, 0x49, 0x97, 0xf4, 0x2c, 0xa6, 0x67, 0x7a, 0x06, 0x8d,
- 0x87, 0x30, 0xc0, 0x48, 0x65, 0xfe, 0x86, 0xf6, 0x87, 0x4c, 0x4a, 0x13, 0xdc, 0x77, 0x02, 0xf5,
- 0xa9, 0xee, 0x4d, 0x9b, 0x60, 0x8c, 0x87, 0xfa, 0xba, 0xc6, 0x8c, 0xf1, 0x90, 0x8e, 0xe0, 0x40,
- 0x78, 0x0b, 0x35, 0xf3, 0x8a, 0x08, 0xdd, 0xa0, 0x71, 0x79, 0xd2, 0x2f, 0x93, 0xf6, 0xf7, 0x81,
- 0x58, 0x53, 0xec, 0x03, 0x8e, 0xe0, 0x30, 0x5b, 0x2f, 0x1b, 0x55, 0xb5, 0x91, 0xbd, 0x6f, 0x54,
- 0x32, 0xc9, 0xbf, 0xee, 0x4e, 0x71, 0xcf, 0xc1, 0xbe, 0x09, 0x13, 0xa9, 0x50, 0xdc, 0xa3, 0x90,
- 0x01, 0x8f, 0x6e, 0x51, 0x31, 0x7c, 0x4a, 0x50, 0x2a, 0xda, 0x82, 0xea, 0x33, 0x8a, 0x1c, 0x3c,
- 0x1d, 0xdd, 0x57, 0x02, 0x9d, 0x7c, 0x7d, 0x5a, 0x38, 0x95, 0x2e, 0x3a, 0x60, 0xe5, 0xa5, 0x0a,
- 0x64, 0x33, 0x13, 0x34, 0xf8, 0x2f, 0x8d, 0x8d, 0x3f, 0x37, 0x1e, 0xc1, 0xd1, 0x90, 0xbf, 0x44,
- 0x4b, 0xe1, 0xcd, 0x71, 0x1c, 0x2d, 0x78, 0x29, 0xde, 0x86, 0x7f, 0x18, 0x79, 0x7e, 0x88, 0x73,
- 0x1d, 0x6e, 0xb2, 0xed, 0xe3, 0x16, 0xc5, 0x28, 0x50, 0xae, 0xdb, 0xeb, 0x2f, 0xa7, 0xb2, 0xde,
- 0x38, 0xe4, 0x63, 0xe3, 0x90, 0xcf, 0x8d, 0x43, 0xde, 0xbe, 0x9d, 0x8a, 0x5f, 0xd7, 0xff, 0xd3,
- 0xd5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x93, 0x7d, 0x0b, 0x87, 0x02, 0x00, 0x00,
-}
-
-func (m *RaftAttributes) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *RaftAttributes) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *RaftAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.IsLearner {
- i--
- if m.IsLearner {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x10
- }
- if len(m.PeerUrls) > 0 {
- for iNdEx := len(m.PeerUrls) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.PeerUrls[iNdEx])
- copy(dAtA[i:], m.PeerUrls[iNdEx])
- i = encodeVarintMembership(dAtA, i, uint64(len(m.PeerUrls[iNdEx])))
- i--
- dAtA[i] = 0xa
- }
- }
- return len(dAtA) - i, nil
-}
-
-func (m *Attributes) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Attributes) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Attributes) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.ClientUrls) > 0 {
- for iNdEx := len(m.ClientUrls) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.ClientUrls[iNdEx])
- copy(dAtA[i:], m.ClientUrls[iNdEx])
- i = encodeVarintMembership(dAtA, i, uint64(len(m.ClientUrls[iNdEx])))
- i--
- dAtA[i] = 0x12
- }
- }
- if len(m.Name) > 0 {
- i -= len(m.Name)
- copy(dAtA[i:], m.Name)
- i = encodeVarintMembership(dAtA, i, uint64(len(m.Name)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *Member) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Member) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Member) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.MemberAttributes != nil {
- {
- size, err := m.MemberAttributes.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintMembership(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- if m.RaftAttributes != nil {
- {
- size, err := m.RaftAttributes.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintMembership(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if m.ID != 0 {
- i = encodeVarintMembership(dAtA, i, uint64(m.ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *ClusterVersionSetRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *ClusterVersionSetRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ClusterVersionSetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Ver) > 0 {
- i -= len(m.Ver)
- copy(dAtA[i:], m.Ver)
- i = encodeVarintMembership(dAtA, i, uint64(len(m.Ver)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *ClusterMemberAttrSetRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *ClusterMemberAttrSetRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *ClusterMemberAttrSetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.MemberAttributes != nil {
- {
- size, err := m.MemberAttributes.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintMembership(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if m.Member_ID != 0 {
- i = encodeVarintMembership(dAtA, i, uint64(m.Member_ID))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func (m *DowngradeInfoSetRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *DowngradeInfoSetRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *DowngradeInfoSetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if len(m.Ver) > 0 {
- i -= len(m.Ver)
- copy(dAtA[i:], m.Ver)
- i = encodeVarintMembership(dAtA, i, uint64(len(m.Ver)))
- i--
- dAtA[i] = 0x12
- }
- if m.Enabled {
- i--
- if m.Enabled {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func encodeVarintMembership(dAtA []byte, offset int, v uint64) int {
- offset -= sovMembership(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
- }
- dAtA[offset] = uint8(v)
- return base
-}
-func (m *RaftAttributes) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if len(m.PeerUrls) > 0 {
- for _, s := range m.PeerUrls {
- l = len(s)
- n += 1 + l + sovMembership(uint64(l))
- }
- }
- if m.IsLearner {
- n += 2
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Attributes) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + sovMembership(uint64(l))
- }
- if len(m.ClientUrls) > 0 {
- for _, s := range m.ClientUrls {
- l = len(s)
- n += 1 + l + sovMembership(uint64(l))
- }
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Member) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.ID != 0 {
- n += 1 + sovMembership(uint64(m.ID))
- }
- if m.RaftAttributes != nil {
- l = m.RaftAttributes.Size()
- n += 1 + l + sovMembership(uint64(l))
- }
- if m.MemberAttributes != nil {
- l = m.MemberAttributes.Size()
- n += 1 + l + sovMembership(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *ClusterVersionSetRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Ver)
- if l > 0 {
- n += 1 + l + sovMembership(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *ClusterMemberAttrSetRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Member_ID != 0 {
- n += 1 + sovMembership(uint64(m.Member_ID))
- }
- if m.MemberAttributes != nil {
- l = m.MemberAttributes.Size()
- n += 1 + l + sovMembership(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *DowngradeInfoSetRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Enabled {
- n += 2
- }
- l = len(m.Ver)
- if l > 0 {
- n += 1 + l + sovMembership(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func sovMembership(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozMembership(x uint64) (n int) {
- return sovMembership(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (m *RaftAttributes) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: RaftAttributes: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: RaftAttributes: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PeerUrls", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.PeerUrls = append(m.PeerUrls, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IsLearner", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IsLearner = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := skipMembership(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Attributes) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Attributes: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Attributes: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClientUrls", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ClientUrls = append(m.ClientUrls, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipMembership(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Member) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Member: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Member: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
- }
- m.ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RaftAttributes", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.RaftAttributes == nil {
- m.RaftAttributes = &RaftAttributes{}
- }
- if err := m.RaftAttributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field MemberAttributes", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.MemberAttributes == nil {
- m.MemberAttributes = &Attributes{}
- }
- if err := m.MemberAttributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipMembership(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *ClusterVersionSetRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: ClusterVersionSetRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: ClusterVersionSetRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Ver", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Ver = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipMembership(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *ClusterMemberAttrSetRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: ClusterMemberAttrSetRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: ClusterMemberAttrSetRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Member_ID", wireType)
- }
- m.Member_ID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Member_ID |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field MemberAttributes", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.MemberAttributes == nil {
- m.MemberAttributes = &Attributes{}
- }
- if err := m.MemberAttributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipMembership(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *DowngradeInfoSetRequest) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: DowngradeInfoSetRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: DowngradeInfoSetRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Enabled = bool(v != 0)
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Ver", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthMembership
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthMembership
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Ver = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipMembership(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthMembership
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func skipMembership(dAtA []byte) (n int, err error) {
- l := len(dAtA)
- iNdEx := 0
- depth := 0
- for iNdEx < l {
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- wireType := int(wire & 0x7)
- switch wireType {
- case 0:
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- iNdEx++
- if dAtA[iNdEx-1] < 0x80 {
- break
- }
- }
- case 1:
- iNdEx += 8
- case 2:
- var length int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowMembership
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- length |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if length < 0 {
- return 0, ErrInvalidLengthMembership
- }
- iNdEx += length
- case 3:
- depth++
- case 4:
- if depth == 0 {
- return 0, ErrUnexpectedEndOfGroupMembership
- }
- depth--
- case 5:
- iNdEx += 4
- default:
- return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
- }
- if iNdEx < 0 {
- return 0, ErrInvalidLengthMembership
- }
- if depth == 0 {
- return iNdEx, nil
- }
- }
- return 0, io.ErrUnexpectedEOF
-}
-
-var (
- ErrInvalidLengthMembership = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowMembership = fmt.Errorf("proto: integer overflow")
- ErrUnexpectedEndOfGroupMembership = fmt.Errorf("proto: unexpected end of group")
-)
diff --git a/etcd-fix/api/membershippb/membership.proto b/etcd-fix/api/membershippb/membership.proto
deleted file mode 100644
index e63e9ec..0000000
--- a/etcd-fix/api/membershippb/membership.proto
+++ /dev/null
@@ -1,43 +0,0 @@
-syntax = "proto3";
-package membershippb;
-
-import "gogoproto/gogo.proto";
-
-option (gogoproto.marshaler_all) = true;
-option (gogoproto.sizer_all) = true;
-option (gogoproto.unmarshaler_all) = true;
-option (gogoproto.goproto_getters_all) = false;
-
-// RaftAttributes represents the raft related attributes of an etcd member.
-message RaftAttributes {
- // peerURLs is the list of peers in the raft cluster.
- repeated string peer_urls = 1;
- // isLearner indicates if the member is raft learner.
- bool is_learner = 2;
-}
-
-// Attributes represents all the non-raft related attributes of an etcd member.
-message Attributes {
- string name = 1;
- repeated string client_urls = 2;
-}
-
-message Member {
- uint64 ID = 1;
- RaftAttributes raft_attributes = 2;
- Attributes member_attributes = 3;
-}
-
-message ClusterVersionSetRequest {
- string ver = 1;
-}
-
-message ClusterMemberAttrSetRequest {
- uint64 member_ID = 1;
- Attributes member_attributes = 2;
-}
-
-message DowngradeInfoSetRequest {
- bool enabled = 1;
- string ver = 2;
-}
\ No newline at end of file
diff --git a/etcd-fix/api/mvccpb/kv.pb.go b/etcd-fix/api/mvccpb/kv.pb.go
deleted file mode 100644
index 8a8d1aa..0000000
--- a/etcd-fix/api/mvccpb/kv.pb.go
+++ /dev/null
@@ -1,804 +0,0 @@
-// Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: kv.proto
-
-package mvccpb
-
-import (
- fmt "fmt"
- io "io"
- math "math"
- math_bits "math/bits"
-
- _ "github.com/gogo/protobuf/gogoproto"
- proto "github.com/golang/protobuf/proto"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type Event_EventType int32
-
-const (
- PUT Event_EventType = 0
- DELETE Event_EventType = 1
-)
-
-var Event_EventType_name = map[int32]string{
- 0: "PUT",
- 1: "DELETE",
-}
-
-var Event_EventType_value = map[string]int32{
- "PUT": 0,
- "DELETE": 1,
-}
-
-func (x Event_EventType) String() string {
- return proto.EnumName(Event_EventType_name, int32(x))
-}
-
-func (Event_EventType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_2216fe83c9c12408, []int{1, 0}
-}
-
-type KeyValue struct {
- // key is the key in bytes. An empty key is not allowed.
- Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
- // create_revision is the revision of last creation on this key.
- CreateRevision int64 `protobuf:"varint,2,opt,name=create_revision,json=createRevision,proto3" json:"create_revision,omitempty"`
- // mod_revision is the revision of last modification on this key.
- ModRevision int64 `protobuf:"varint,3,opt,name=mod_revision,json=modRevision,proto3" json:"mod_revision,omitempty"`
- // version is the version of the key. A deletion resets
- // the version to zero and any modification of the key
- // increases its version.
- Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"`
- // value is the value held by the key, in bytes.
- Value []byte `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"`
- // lease is the ID of the lease that attached to key.
- // When the attached lease expires, the key will be deleted.
- // If lease is 0, then no lease is attached to the key.
- Lease int64 `protobuf:"varint,6,opt,name=lease,proto3" json:"lease,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *KeyValue) Reset() { *m = KeyValue{} }
-func (m *KeyValue) String() string { return proto.CompactTextString(m) }
-func (*KeyValue) ProtoMessage() {}
-func (*KeyValue) Descriptor() ([]byte, []int) {
- return fileDescriptor_2216fe83c9c12408, []int{0}
-}
-func (m *KeyValue) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *KeyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_KeyValue.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *KeyValue) XXX_Merge(src proto.Message) {
- xxx_messageInfo_KeyValue.Merge(m, src)
-}
-func (m *KeyValue) XXX_Size() int {
- return m.Size()
-}
-func (m *KeyValue) XXX_DiscardUnknown() {
- xxx_messageInfo_KeyValue.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_KeyValue proto.InternalMessageInfo
-
-type Event struct {
- // type is the kind of event. If type is a PUT, it indicates
- // new data has been stored to the key. If type is a DELETE,
- // it indicates the key was deleted.
- Type Event_EventType `protobuf:"varint,1,opt,name=type,proto3,enum=mvccpb.Event_EventType" json:"type,omitempty"`
- // kv holds the KeyValue for the event.
- // A PUT event contains current kv pair.
- // A PUT event with kv.Version=1 indicates the creation of a key.
- // A DELETE/EXPIRE event contains the deleted key with
- // its modification revision set to the revision of deletion.
- Kv *KeyValue `protobuf:"bytes,2,opt,name=kv,proto3" json:"kv,omitempty"`
- // prev_kv holds the key-value pair before the event happens.
- PrevKv *KeyValue `protobuf:"bytes,3,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Event) Reset() { *m = Event{} }
-func (m *Event) String() string { return proto.CompactTextString(m) }
-func (*Event) ProtoMessage() {}
-func (*Event) Descriptor() ([]byte, []int) {
- return fileDescriptor_2216fe83c9c12408, []int{1}
-}
-func (m *Event) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_Event.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *Event) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Event.Merge(m, src)
-}
-func (m *Event) XXX_Size() int {
- return m.Size()
-}
-func (m *Event) XXX_DiscardUnknown() {
- xxx_messageInfo_Event.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Event proto.InternalMessageInfo
-
-func init() {
- proto.RegisterEnum("mvccpb.Event_EventType", Event_EventType_name, Event_EventType_value)
- proto.RegisterType((*KeyValue)(nil), "mvccpb.KeyValue")
- proto.RegisterType((*Event)(nil), "mvccpb.Event")
-}
-
-func init() { proto.RegisterFile("kv.proto", fileDescriptor_2216fe83c9c12408) }
-
-var fileDescriptor_2216fe83c9c12408 = []byte{
- // 303 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x41, 0x4e, 0xc2, 0x40,
- 0x14, 0x86, 0x3b, 0x14, 0x0a, 0x3e, 0x08, 0x36, 0x13, 0x12, 0x27, 0x2e, 0x26, 0x95, 0x8d, 0x18,
- 0x13, 0x4c, 0xf0, 0x06, 0xc6, 0xae, 0x70, 0x61, 0x1a, 0x74, 0x4b, 0x4a, 0x79, 0x21, 0xa4, 0x94,
- 0x69, 0x4a, 0x9d, 0xa4, 0x37, 0x71, 0xef, 0xde, 0x73, 0xb0, 0xe4, 0x08, 0x52, 0x2f, 0x62, 0xfa,
- 0xc6, 0xe2, 0xc6, 0xcd, 0xe4, 0xfd, 0xff, 0xff, 0x65, 0xe6, 0x7f, 0x03, 0x9d, 0x58, 0x8f, 0xd3,
- 0x4c, 0xe5, 0x8a, 0x3b, 0x89, 0x8e, 0xa2, 0x74, 0x71, 0x39, 0x58, 0xa9, 0x95, 0x22, 0xeb, 0xae,
- 0x9a, 0x4c, 0x3a, 0xfc, 0x64, 0xd0, 0x99, 0x62, 0xf1, 0x1a, 0x6e, 0xde, 0x90, 0xbb, 0x60, 0xc7,
- 0x58, 0x08, 0xe6, 0xb1, 0x51, 0x2f, 0xa8, 0x46, 0x7e, 0x0d, 0xe7, 0x51, 0x86, 0x61, 0x8e, 0xf3,
- 0x0c, 0xf5, 0x7a, 0xb7, 0x56, 0x5b, 0xd1, 0xf0, 0xd8, 0xc8, 0x0e, 0xfa, 0xc6, 0x0e, 0x7e, 0x5d,
- 0x7e, 0x05, 0xbd, 0x44, 0x2d, 0xff, 0x28, 0x9b, 0xa8, 0x6e, 0xa2, 0x96, 0x27, 0x44, 0x40, 0x5b,
- 0x63, 0x46, 0x69, 0x93, 0xd2, 0x5a, 0xf2, 0x01, 0xb4, 0x74, 0x55, 0x40, 0xb4, 0xe8, 0x65, 0x23,
- 0x2a, 0x77, 0x83, 0xe1, 0x0e, 0x85, 0x43, 0xb4, 0x11, 0xc3, 0x0f, 0x06, 0x2d, 0x5f, 0xe3, 0x36,
- 0xe7, 0xb7, 0xd0, 0xcc, 0x8b, 0x14, 0xa9, 0x6e, 0x7f, 0x72, 0x31, 0x36, 0x7b, 0x8e, 0x29, 0x34,
- 0xe7, 0xac, 0x48, 0x31, 0x20, 0x88, 0x7b, 0xd0, 0x88, 0x35, 0x75, 0xef, 0x4e, 0xdc, 0x1a, 0xad,
- 0x17, 0x0f, 0x1a, 0xb1, 0xe6, 0x37, 0xd0, 0x4e, 0x33, 0xd4, 0xf3, 0x58, 0x53, 0xf9, 0xff, 0x30,
- 0xa7, 0x02, 0xa6, 0x7a, 0xe8, 0xc1, 0xd9, 0xe9, 0x7e, 0xde, 0x06, 0xfb, 0xf9, 0x65, 0xe6, 0x5a,
- 0x1c, 0xc0, 0x79, 0xf4, 0x9f, 0xfc, 0x99, 0xef, 0xb2, 0x07, 0xb1, 0x3f, 0x4a, 0xeb, 0x70, 0x94,
- 0xd6, 0xbe, 0x94, 0xec, 0x50, 0x4a, 0xf6, 0x55, 0x4a, 0xf6, 0xfe, 0x2d, 0xad, 0x85, 0x43, 0xff,
- 0x7e, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x45, 0x92, 0x5d, 0xa1, 0x01, 0x00, 0x00,
-}
-
-func (m *KeyValue) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *KeyValue) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *KeyValue) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.Lease != 0 {
- i = encodeVarintKv(dAtA, i, uint64(m.Lease))
- i--
- dAtA[i] = 0x30
- }
- if len(m.Value) > 0 {
- i -= len(m.Value)
- copy(dAtA[i:], m.Value)
- i = encodeVarintKv(dAtA, i, uint64(len(m.Value)))
- i--
- dAtA[i] = 0x2a
- }
- if m.Version != 0 {
- i = encodeVarintKv(dAtA, i, uint64(m.Version))
- i--
- dAtA[i] = 0x20
- }
- if m.ModRevision != 0 {
- i = encodeVarintKv(dAtA, i, uint64(m.ModRevision))
- i--
- dAtA[i] = 0x18
- }
- if m.CreateRevision != 0 {
- i = encodeVarintKv(dAtA, i, uint64(m.CreateRevision))
- i--
- dAtA[i] = 0x10
- }
- if len(m.Key) > 0 {
- i -= len(m.Key)
- copy(dAtA[i:], m.Key)
- i = encodeVarintKv(dAtA, i, uint64(len(m.Key)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *Event) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Event) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.XXX_unrecognized != nil {
- i -= len(m.XXX_unrecognized)
- copy(dAtA[i:], m.XXX_unrecognized)
- }
- if m.PrevKv != nil {
- {
- size, err := m.PrevKv.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintKv(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- if m.Kv != nil {
- {
- size, err := m.Kv.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintKv(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if m.Type != 0 {
- i = encodeVarintKv(dAtA, i, uint64(m.Type))
- i--
- dAtA[i] = 0x8
- }
- return len(dAtA) - i, nil
-}
-
-func encodeVarintKv(dAtA []byte, offset int, v uint64) int {
- offset -= sovKv(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
- }
- dAtA[offset] = uint8(v)
- return base
-}
-func (m *KeyValue) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Key)
- if l > 0 {
- n += 1 + l + sovKv(uint64(l))
- }
- if m.CreateRevision != 0 {
- n += 1 + sovKv(uint64(m.CreateRevision))
- }
- if m.ModRevision != 0 {
- n += 1 + sovKv(uint64(m.ModRevision))
- }
- if m.Version != 0 {
- n += 1 + sovKv(uint64(m.Version))
- }
- l = len(m.Value)
- if l > 0 {
- n += 1 + l + sovKv(uint64(l))
- }
- if m.Lease != 0 {
- n += 1 + sovKv(uint64(m.Lease))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func (m *Event) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Type != 0 {
- n += 1 + sovKv(uint64(m.Type))
- }
- if m.Kv != nil {
- l = m.Kv.Size()
- n += 1 + l + sovKv(uint64(l))
- }
- if m.PrevKv != nil {
- l = m.PrevKv.Size()
- n += 1 + l + sovKv(uint64(l))
- }
- if m.XXX_unrecognized != nil {
- n += len(m.XXX_unrecognized)
- }
- return n
-}
-
-func sovKv(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozKv(x uint64) (n int) {
- return sovKv(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (m *KeyValue) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: KeyValue: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: KeyValue: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthKv
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthKv
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
- if m.Key == nil {
- m.Key = []byte{}
- }
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field CreateRevision", wireType)
- }
- m.CreateRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.CreateRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ModRevision", wireType)
- }
- m.ModRevision = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ModRevision |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
- }
- m.Version = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Version |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthKv
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthKv
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...)
- if m.Value == nil {
- m.Value = []byte{}
- }
- iNdEx = postIndex
- case 6:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Lease", wireType)
- }
- m.Lease = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Lease |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipKv(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthKv
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthKv
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Event) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Event: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
- }
- m.Type = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Type |= Event_EventType(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Kv", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthKv
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthKv
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Kv == nil {
- m.Kv = &KeyValue{}
- }
- if err := m.Kv.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowKv
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthKv
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthKv
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.PrevKv == nil {
- m.PrevKv = &KeyValue{}
- }
- if err := m.PrevKv.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipKv(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthKv
- }
- if (iNdEx + skippy) < 0 {
- return ErrInvalidLengthKv
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func skipKv(dAtA []byte) (n int, err error) {
- l := len(dAtA)
- iNdEx := 0
- depth := 0
- for iNdEx < l {
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowKv
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- wireType := int(wire & 0x7)
- switch wireType {
- case 0:
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowKv
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- iNdEx++
- if dAtA[iNdEx-1] < 0x80 {
- break
- }
- }
- case 1:
- iNdEx += 8
- case 2:
- var length int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowKv
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- length |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if length < 0 {
- return 0, ErrInvalidLengthKv
- }
- iNdEx += length
- case 3:
- depth++
- case 4:
- if depth == 0 {
- return 0, ErrUnexpectedEndOfGroupKv
- }
- depth--
- case 5:
- iNdEx += 4
- default:
- return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
- }
- if iNdEx < 0 {
- return 0, ErrInvalidLengthKv
- }
- if depth == 0 {
- return iNdEx, nil
- }
- }
- return 0, io.ErrUnexpectedEOF
-}
-
-var (
- ErrInvalidLengthKv = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowKv = fmt.Errorf("proto: integer overflow")
- ErrUnexpectedEndOfGroupKv = fmt.Errorf("proto: unexpected end of group")
-)
diff --git a/etcd-fix/api/mvccpb/kv.proto b/etcd-fix/api/mvccpb/kv.proto
deleted file mode 100644
index 23c911b..0000000
--- a/etcd-fix/api/mvccpb/kv.proto
+++ /dev/null
@@ -1,49 +0,0 @@
-syntax = "proto3";
-package mvccpb;
-
-import "gogoproto/gogo.proto";
-
-option (gogoproto.marshaler_all) = true;
-option (gogoproto.sizer_all) = true;
-option (gogoproto.unmarshaler_all) = true;
-option (gogoproto.goproto_getters_all) = false;
-option (gogoproto.goproto_enum_prefix_all) = false;
-
-message KeyValue {
- // key is the key in bytes. An empty key is not allowed.
- bytes key = 1;
- // create_revision is the revision of last creation on this key.
- int64 create_revision = 2;
- // mod_revision is the revision of last modification on this key.
- int64 mod_revision = 3;
- // version is the version of the key. A deletion resets
- // the version to zero and any modification of the key
- // increases its version.
- int64 version = 4;
- // value is the value held by the key, in bytes.
- bytes value = 5;
- // lease is the ID of the lease that attached to key.
- // When the attached lease expires, the key will be deleted.
- // If lease is 0, then no lease is attached to the key.
- int64 lease = 6;
-}
-
-message Event {
- enum EventType {
- PUT = 0;
- DELETE = 1;
- }
- // type is the kind of event. If type is a PUT, it indicates
- // new data has been stored to the key. If type is a DELETE,
- // it indicates the key was deleted.
- EventType type = 1;
- // kv holds the KeyValue for the event.
- // A PUT event contains current kv pair.
- // A PUT event with kv.Version=1 indicates the creation of a key.
- // A DELETE/EXPIRE event contains the deleted key with
- // its modification revision set to the revision of deletion.
- KeyValue kv = 2;
-
- // prev_kv holds the key-value pair before the event happens.
- KeyValue prev_kv = 3;
-}
diff --git a/etcd-fix/api/v3rpc/rpctypes/doc.go b/etcd-fix/api/v3rpc/rpctypes/doc.go
deleted file mode 100644
index f72c6a6..0000000
--- a/etcd-fix/api/v3rpc/rpctypes/doc.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package rpctypes has types and values shared by the etcd server and client for v3 RPC interaction.
-package rpctypes
diff --git a/etcd-fix/api/v3rpc/rpctypes/error.go b/etcd-fix/api/v3rpc/rpctypes/error.go
deleted file mode 100644
index 26e3fd3..0000000
--- a/etcd-fix/api/v3rpc/rpctypes/error.go
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package rpctypes
-
-import (
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
-)
-
-// server-side error
-var (
- ErrGRPCEmptyKey = status.New(codes.InvalidArgument, "etcdserver: key is not provided").Err()
- ErrGRPCKeyNotFound = status.New(codes.InvalidArgument, "etcdserver: key not found").Err()
- ErrGRPCValueProvided = status.New(codes.InvalidArgument, "etcdserver: value is provided").Err()
- ErrGRPCLeaseProvided = status.New(codes.InvalidArgument, "etcdserver: lease is provided").Err()
- ErrGRPCTooManyOps = status.New(codes.InvalidArgument, "etcdserver: too many operations in txn request").Err()
- ErrGRPCDuplicateKey = status.New(codes.InvalidArgument, "etcdserver: duplicate key given in txn request").Err()
- ErrGRPCCompacted = status.New(codes.OutOfRange, "etcdserver: mvcc: required revision has been compacted").Err()
- ErrGRPCFutureRev = status.New(codes.OutOfRange, "etcdserver: mvcc: required revision is a future revision").Err()
- ErrGRPCNoSpace = status.New(codes.ResourceExhausted, "etcdserver: mvcc: database space exceeded").Err()
-
- ErrGRPCLeaseNotFound = status.New(codes.NotFound, "etcdserver: requested lease not found").Err()
- ErrGRPCLeaseExist = status.New(codes.FailedPrecondition, "etcdserver: lease already exists").Err()
- ErrGRPCLeaseTTLTooLarge = status.New(codes.OutOfRange, "etcdserver: too large lease TTL").Err()
-
- ErrGRPCMemberExist = status.New(codes.FailedPrecondition, "etcdserver: member ID already exist").Err()
- ErrGRPCPeerURLExist = status.New(codes.FailedPrecondition, "etcdserver: Peer URLs already exists").Err()
- ErrGRPCMemberNotEnoughStarted = status.New(codes.FailedPrecondition, "etcdserver: re-configuration failed due to not enough started members").Err()
- ErrGRPCMemberBadURLs = status.New(codes.InvalidArgument, "etcdserver: given member URLs are invalid").Err()
- ErrGRPCMemberNotFound = status.New(codes.NotFound, "etcdserver: member not found").Err()
- ErrGRPCMemberNotLearner = status.New(codes.FailedPrecondition, "etcdserver: can only promote a learner member").Err()
- ErrGRPCLearnerNotReady = status.New(codes.FailedPrecondition, "etcdserver: can only promote a learner member which is in sync with leader").Err()
- ErrGRPCTooManyLearners = status.New(codes.FailedPrecondition, "etcdserver: too many learner members in cluster").Err()
-
- ErrGRPCRequestTooLarge = status.New(codes.InvalidArgument, "etcdserver: request is too large").Err()
- ErrGRPCRequestTooManyRequests = status.New(codes.ResourceExhausted, "etcdserver: too many requests").Err()
-
- ErrGRPCRootUserNotExist = status.New(codes.FailedPrecondition, "etcdserver: root user does not exist").Err()
- ErrGRPCRootRoleNotExist = status.New(codes.FailedPrecondition, "etcdserver: root user does not have root role").Err()
- ErrGRPCUserAlreadyExist = status.New(codes.FailedPrecondition, "etcdserver: user name already exists").Err()
- ErrGRPCUserEmpty = status.New(codes.InvalidArgument, "etcdserver: user name is empty").Err()
- ErrGRPCUserNotFound = status.New(codes.FailedPrecondition, "etcdserver: user name not found").Err()
- ErrGRPCRoleAlreadyExist = status.New(codes.FailedPrecondition, "etcdserver: role name already exists").Err()
- ErrGRPCRoleNotFound = status.New(codes.FailedPrecondition, "etcdserver: role name not found").Err()
- ErrGRPCRoleEmpty = status.New(codes.InvalidArgument, "etcdserver: role name is empty").Err()
- ErrGRPCAuthFailed = status.New(codes.InvalidArgument, "etcdserver: authentication failed, invalid user ID or password").Err()
- ErrGRPCPermissionDenied = status.New(codes.PermissionDenied, "etcdserver: permission denied").Err()
- ErrGRPCRoleNotGranted = status.New(codes.FailedPrecondition, "etcdserver: role is not granted to the user").Err()
- ErrGRPCPermissionNotGranted = status.New(codes.FailedPrecondition, "etcdserver: permission is not granted to the role").Err()
- ErrGRPCAuthNotEnabled = status.New(codes.FailedPrecondition, "etcdserver: authentication is not enabled").Err()
- ErrGRPCInvalidAuthToken = status.New(codes.Unauthenticated, "etcdserver: invalid auth token").Err()
- ErrGRPCInvalidAuthMgmt = status.New(codes.InvalidArgument, "etcdserver: invalid auth management").Err()
-
- ErrGRPCNoLeader = status.New(codes.Unavailable, "etcdserver: no leader").Err()
- ErrGRPCNotLeader = status.New(codes.FailedPrecondition, "etcdserver: not leader").Err()
- ErrGRPCLeaderChanged = status.New(codes.Unavailable, "etcdserver: leader changed").Err()
- ErrGRPCNotCapable = status.New(codes.Unavailable, "etcdserver: not capable").Err()
- ErrGRPCStopped = status.New(codes.Unavailable, "etcdserver: server stopped").Err()
- ErrGRPCTimeout = status.New(codes.Unavailable, "etcdserver: request timed out").Err()
- ErrGRPCTimeoutDueToLeaderFail = status.New(codes.Unavailable, "etcdserver: request timed out, possibly due to previous leader failure").Err()
- ErrGRPCTimeoutDueToConnectionLost = status.New(codes.Unavailable, "etcdserver: request timed out, possibly due to connection lost").Err()
- ErrGRPCUnhealthy = status.New(codes.Unavailable, "etcdserver: unhealthy cluster").Err()
- ErrGRPCCorrupt = status.New(codes.DataLoss, "etcdserver: corrupt cluster").Err()
- ErrGPRCNotSupportedForLearner = status.New(codes.Unavailable, "etcdserver: rpc not supported for learner").Err()
- ErrGRPCBadLeaderTransferee = status.New(codes.FailedPrecondition, "etcdserver: bad leader transferee").Err()
-
- ErrGRPCClusterVersionUnavailable = status.New(codes.Unavailable, "etcdserver: cluster version not found during downgrade").Err()
- ErrGRPCWrongDowngradeVersionFormat = status.New(codes.InvalidArgument, "etcdserver: wrong downgrade target version format").Err()
- ErrGRPCInvalidDowngradeTargetVersion = status.New(codes.InvalidArgument, "etcdserver: invalid downgrade target version").Err()
- ErrGRPCDowngradeInProcess = status.New(codes.FailedPrecondition, "etcdserver: cluster has a downgrade job in progress").Err()
- ErrGRPCNoInflightDowngrade = status.New(codes.FailedPrecondition, "etcdserver: no inflight downgrade job").Err()
-
- errStringToError = map[string]error{
- ErrorDesc(ErrGRPCEmptyKey): ErrGRPCEmptyKey,
- ErrorDesc(ErrGRPCKeyNotFound): ErrGRPCKeyNotFound,
- ErrorDesc(ErrGRPCValueProvided): ErrGRPCValueProvided,
- ErrorDesc(ErrGRPCLeaseProvided): ErrGRPCLeaseProvided,
-
- ErrorDesc(ErrGRPCTooManyOps): ErrGRPCTooManyOps,
- ErrorDesc(ErrGRPCDuplicateKey): ErrGRPCDuplicateKey,
- ErrorDesc(ErrGRPCCompacted): ErrGRPCCompacted,
- ErrorDesc(ErrGRPCFutureRev): ErrGRPCFutureRev,
- ErrorDesc(ErrGRPCNoSpace): ErrGRPCNoSpace,
-
- ErrorDesc(ErrGRPCLeaseNotFound): ErrGRPCLeaseNotFound,
- ErrorDesc(ErrGRPCLeaseExist): ErrGRPCLeaseExist,
- ErrorDesc(ErrGRPCLeaseTTLTooLarge): ErrGRPCLeaseTTLTooLarge,
-
- ErrorDesc(ErrGRPCMemberExist): ErrGRPCMemberExist,
- ErrorDesc(ErrGRPCPeerURLExist): ErrGRPCPeerURLExist,
- ErrorDesc(ErrGRPCMemberNotEnoughStarted): ErrGRPCMemberNotEnoughStarted,
- ErrorDesc(ErrGRPCMemberBadURLs): ErrGRPCMemberBadURLs,
- ErrorDesc(ErrGRPCMemberNotFound): ErrGRPCMemberNotFound,
- ErrorDesc(ErrGRPCMemberNotLearner): ErrGRPCMemberNotLearner,
- ErrorDesc(ErrGRPCLearnerNotReady): ErrGRPCLearnerNotReady,
- ErrorDesc(ErrGRPCTooManyLearners): ErrGRPCTooManyLearners,
-
- ErrorDesc(ErrGRPCRequestTooLarge): ErrGRPCRequestTooLarge,
- ErrorDesc(ErrGRPCRequestTooManyRequests): ErrGRPCRequestTooManyRequests,
-
- ErrorDesc(ErrGRPCRootUserNotExist): ErrGRPCRootUserNotExist,
- ErrorDesc(ErrGRPCRootRoleNotExist): ErrGRPCRootRoleNotExist,
- ErrorDesc(ErrGRPCUserAlreadyExist): ErrGRPCUserAlreadyExist,
- ErrorDesc(ErrGRPCUserEmpty): ErrGRPCUserEmpty,
- ErrorDesc(ErrGRPCUserNotFound): ErrGRPCUserNotFound,
- ErrorDesc(ErrGRPCRoleAlreadyExist): ErrGRPCRoleAlreadyExist,
- ErrorDesc(ErrGRPCRoleNotFound): ErrGRPCRoleNotFound,
- ErrorDesc(ErrGRPCRoleEmpty): ErrGRPCRoleEmpty,
- ErrorDesc(ErrGRPCAuthFailed): ErrGRPCAuthFailed,
- ErrorDesc(ErrGRPCPermissionDenied): ErrGRPCPermissionDenied,
- ErrorDesc(ErrGRPCRoleNotGranted): ErrGRPCRoleNotGranted,
- ErrorDesc(ErrGRPCPermissionNotGranted): ErrGRPCPermissionNotGranted,
- ErrorDesc(ErrGRPCAuthNotEnabled): ErrGRPCAuthNotEnabled,
- ErrorDesc(ErrGRPCInvalidAuthToken): ErrGRPCInvalidAuthToken,
- ErrorDesc(ErrGRPCInvalidAuthMgmt): ErrGRPCInvalidAuthMgmt,
-
- ErrorDesc(ErrGRPCNoLeader): ErrGRPCNoLeader,
- ErrorDesc(ErrGRPCNotLeader): ErrGRPCNotLeader,
- ErrorDesc(ErrGRPCLeaderChanged): ErrGRPCLeaderChanged,
- ErrorDesc(ErrGRPCNotCapable): ErrGRPCNotCapable,
- ErrorDesc(ErrGRPCStopped): ErrGRPCStopped,
- ErrorDesc(ErrGRPCTimeout): ErrGRPCTimeout,
- ErrorDesc(ErrGRPCTimeoutDueToLeaderFail): ErrGRPCTimeoutDueToLeaderFail,
- ErrorDesc(ErrGRPCTimeoutDueToConnectionLost): ErrGRPCTimeoutDueToConnectionLost,
- ErrorDesc(ErrGRPCUnhealthy): ErrGRPCUnhealthy,
- ErrorDesc(ErrGRPCCorrupt): ErrGRPCCorrupt,
- ErrorDesc(ErrGPRCNotSupportedForLearner): ErrGPRCNotSupportedForLearner,
- ErrorDesc(ErrGRPCBadLeaderTransferee): ErrGRPCBadLeaderTransferee,
-
- ErrorDesc(ErrGRPCClusterVersionUnavailable): ErrGRPCClusterVersionUnavailable,
- ErrorDesc(ErrGRPCWrongDowngradeVersionFormat): ErrGRPCWrongDowngradeVersionFormat,
- ErrorDesc(ErrGRPCInvalidDowngradeTargetVersion): ErrGRPCInvalidDowngradeTargetVersion,
- ErrorDesc(ErrGRPCDowngradeInProcess): ErrGRPCDowngradeInProcess,
- ErrorDesc(ErrGRPCNoInflightDowngrade): ErrGRPCNoInflightDowngrade,
- }
-)
-
-// client-side error
-var (
- ErrEmptyKey = Error(ErrGRPCEmptyKey)
- ErrKeyNotFound = Error(ErrGRPCKeyNotFound)
- ErrValueProvided = Error(ErrGRPCValueProvided)
- ErrLeaseProvided = Error(ErrGRPCLeaseProvided)
- ErrTooManyOps = Error(ErrGRPCTooManyOps)
- ErrDuplicateKey = Error(ErrGRPCDuplicateKey)
- ErrCompacted = Error(ErrGRPCCompacted)
- ErrFutureRev = Error(ErrGRPCFutureRev)
- ErrNoSpace = Error(ErrGRPCNoSpace)
-
- ErrLeaseNotFound = Error(ErrGRPCLeaseNotFound)
- ErrLeaseExist = Error(ErrGRPCLeaseExist)
- ErrLeaseTTLTooLarge = Error(ErrGRPCLeaseTTLTooLarge)
-
- ErrMemberExist = Error(ErrGRPCMemberExist)
- ErrPeerURLExist = Error(ErrGRPCPeerURLExist)
- ErrMemberNotEnoughStarted = Error(ErrGRPCMemberNotEnoughStarted)
- ErrMemberBadURLs = Error(ErrGRPCMemberBadURLs)
- ErrMemberNotFound = Error(ErrGRPCMemberNotFound)
- ErrMemberNotLearner = Error(ErrGRPCMemberNotLearner)
- ErrMemberLearnerNotReady = Error(ErrGRPCLearnerNotReady)
- ErrTooManyLearners = Error(ErrGRPCTooManyLearners)
-
- ErrRequestTooLarge = Error(ErrGRPCRequestTooLarge)
- ErrTooManyRequests = Error(ErrGRPCRequestTooManyRequests)
-
- ErrRootUserNotExist = Error(ErrGRPCRootUserNotExist)
- ErrRootRoleNotExist = Error(ErrGRPCRootRoleNotExist)
- ErrUserAlreadyExist = Error(ErrGRPCUserAlreadyExist)
- ErrUserEmpty = Error(ErrGRPCUserEmpty)
- ErrUserNotFound = Error(ErrGRPCUserNotFound)
- ErrRoleAlreadyExist = Error(ErrGRPCRoleAlreadyExist)
- ErrRoleNotFound = Error(ErrGRPCRoleNotFound)
- ErrRoleEmpty = Error(ErrGRPCRoleEmpty)
- ErrAuthFailed = Error(ErrGRPCAuthFailed)
- ErrPermissionDenied = Error(ErrGRPCPermissionDenied)
- ErrRoleNotGranted = Error(ErrGRPCRoleNotGranted)
- ErrPermissionNotGranted = Error(ErrGRPCPermissionNotGranted)
- ErrAuthNotEnabled = Error(ErrGRPCAuthNotEnabled)
- ErrInvalidAuthToken = Error(ErrGRPCInvalidAuthToken)
- ErrInvalidAuthMgmt = Error(ErrGRPCInvalidAuthMgmt)
-
- ErrNoLeader = Error(ErrGRPCNoLeader)
- ErrNotLeader = Error(ErrGRPCNotLeader)
- ErrLeaderChanged = Error(ErrGRPCLeaderChanged)
- ErrNotCapable = Error(ErrGRPCNotCapable)
- ErrStopped = Error(ErrGRPCStopped)
- ErrTimeout = Error(ErrGRPCTimeout)
- ErrTimeoutDueToLeaderFail = Error(ErrGRPCTimeoutDueToLeaderFail)
- ErrTimeoutDueToConnectionLost = Error(ErrGRPCTimeoutDueToConnectionLost)
- ErrUnhealthy = Error(ErrGRPCUnhealthy)
- ErrCorrupt = Error(ErrGRPCCorrupt)
- ErrBadLeaderTransferee = Error(ErrGRPCBadLeaderTransferee)
-
- ErrClusterVersionUnavailable = Error(ErrGRPCClusterVersionUnavailable)
- ErrWrongDowngradeVersionFormat = Error(ErrGRPCWrongDowngradeVersionFormat)
- ErrInvalidDowngradeTargetVersion = Error(ErrGRPCInvalidDowngradeTargetVersion)
- ErrDowngradeInProcess = Error(ErrGRPCDowngradeInProcess)
- ErrNoInflightDowngrade = Error(ErrGRPCNoInflightDowngrade)
-)
-
-// EtcdError defines gRPC server errors.
-// (https://github.com/grpc/grpc-go/blob/master/rpc_util.go#L319-L323)
-type EtcdError struct {
- code codes.Code
- desc string
-}
-
-// Code returns grpc/codes.Code.
-// TODO: define clientv3/codes.Code.
-func (e EtcdError) Code() codes.Code {
- return e.code
-}
-
-func (e EtcdError) Error() string {
- return e.desc
-}
-
-func Error(err error) error {
- if err == nil {
- return nil
- }
- verr, ok := errStringToError[ErrorDesc(err)]
- if !ok { // not gRPC error
- return err
- }
- ev, ok := status.FromError(verr)
- var desc string
- if ok {
- desc = ev.Message()
- } else {
- desc = verr.Error()
- }
- return EtcdError{code: ev.Code(), desc: desc}
-}
-
-func ErrorDesc(err error) string {
- if s, ok := status.FromError(err); ok {
- return s.Message()
- }
- return err.Error()
-}
diff --git a/etcd-fix/api/v3rpc/rpctypes/error_test.go b/etcd-fix/api/v3rpc/rpctypes/error_test.go
deleted file mode 100644
index 525d969..0000000
--- a/etcd-fix/api/v3rpc/rpctypes/error_test.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package rpctypes
-
-import (
- "testing"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
-)
-
-func TestConvert(t *testing.T) {
- e1 := status.New(codes.InvalidArgument, "etcdserver: key is not provided").Err()
- e2 := ErrGRPCEmptyKey
- e3 := ErrEmptyKey
-
- if e1.Error() != e2.Error() {
- t.Fatalf("expected %q == %q", e1.Error(), e2.Error())
- }
- if ev1, ok := status.FromError(e1); ok && ev1.Code() != e3.(EtcdError).Code() {
- t.Fatalf("expected them to be equal, got %v / %v", ev1.Code(), e3.(EtcdError).Code())
- }
-
- if e1.Error() == e3.Error() {
- t.Fatalf("expected %q != %q", e1.Error(), e3.Error())
- }
- if ev2, ok := status.FromError(e2); ok && ev2.Code() != e3.(EtcdError).Code() {
- t.Fatalf("expected them to be equal, got %v / %v", ev2.Code(), e3.(EtcdError).Code())
- }
-}
diff --git a/etcd-fix/api/v3rpc/rpctypes/md.go b/etcd-fix/api/v3rpc/rpctypes/md.go
deleted file mode 100644
index 90b8b83..0000000
--- a/etcd-fix/api/v3rpc/rpctypes/md.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package rpctypes
-
-var (
- MetadataRequireLeaderKey = "hasleader"
- MetadataHasLeader = "true"
-
- MetadataClientAPIVersionKey = "client-api-version"
-)
diff --git a/etcd-fix/api/v3rpc/rpctypes/metadatafields.go b/etcd-fix/api/v3rpc/rpctypes/metadatafields.go
deleted file mode 100644
index 8f8ac60..0000000
--- a/etcd-fix/api/v3rpc/rpctypes/metadatafields.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package rpctypes
-
-var (
- TokenFieldNameGRPC = "token"
- TokenFieldNameSwagger = "authorization"
-)
diff --git a/etcd-fix/api/version/version.go b/etcd-fix/api/version/version.go
deleted file mode 100644
index 622e751..0000000
--- a/etcd-fix/api/version/version.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package version implements etcd version parsing and contains latest version
-// information.
-package version
-
-import (
- "fmt"
- "strings"
-
- "github.com/coreos/go-semver/semver"
-)
-
-var (
- // MinClusterVersion is the min cluster version this etcd binary is compatible with.
- MinClusterVersion = "3.0.0"
- Version = "3.5.0-pre"
- APIVersion = "unknown"
-
- // Git SHA Value will be set during build
- GitSHA = "Not provided (use ./build instead of go build)"
-)
-
-func init() {
- ver, err := semver.NewVersion(Version)
- if err == nil {
- APIVersion = fmt.Sprintf("%d.%d", ver.Major, ver.Minor)
- }
-}
-
-type Versions struct {
- Server string `json:"etcdserver"`
- Cluster string `json:"etcdcluster"`
- // TODO: raft state machine version
-}
-
-// Cluster only keeps the major.minor.
-func Cluster(v string) string {
- vs := strings.Split(v, ".")
- if len(vs) <= 2 {
- return v
- }
- return fmt.Sprintf("%s.%s", vs[0], vs[1])
-}
diff --git a/etcd-fix/bill-of-materials.json b/etcd-fix/bill-of-materials.json
deleted file mode 100644
index 536f06c..0000000
--- a/etcd-fix/bill-of-materials.json
+++ /dev/null
@@ -1,636 +0,0 @@
-[
- {
- "project": "github.com/beorn7/perks/quantile",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "github.com/bgentry/speakeasy",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9441624365482234
- }
- ]
- },
- {
- "project": "github.com/certifi/gocertifi",
- "licenses": [
- {
- "type": "\"Do What The F*ck You Want To Public License\"",
- "confidence": 0.3287671232876712
- }
- ]
- },
- {
- "project": "github.com/cespare/xxhash/v2",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/cockroachdb/datadriven",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/cockroachdb/errors",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/cockroachdb/logtags",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/coreos/go-semver/semver",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/coreos/go-systemd/v22",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 0.9966703662597114
- }
- ]
- },
- {
- "project": "github.com/cpuguy83/go-md2man/v2/md2man",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/creack/pty",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "github.com/dgrijalva/jwt-go",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "github.com/dustin/go-humanize",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.96875
- }
- ]
- },
- {
- "project": "github.com/etcd-io/gofail/runtime",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/getsentry/raven-go",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "github.com/gogo/protobuf",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9163346613545816
- }
- ]
- },
- {
- "project": "github.com/golang/groupcache/lru",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 0.9966703662597114
- }
- ]
- },
- {
- "project": "github.com/golang/protobuf",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "github.com/google/btree",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/google/uuid",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "github.com/gorilla/websocket",
- "licenses": [
- {
- "type": "BSD 2-clause \"Simplified\" License",
- "confidence": 0.9852216748768473
- }
- ]
- },
- {
- "project": "github.com/grpc-ecosystem/go-grpc-middleware",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/grpc-ecosystem/go-grpc-prometheus",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/grpc-ecosystem/grpc-gateway",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.979253112033195
- }
- ]
- },
- {
- "project": "github.com/inconshreveable/mousetrap",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/jonboulle/clockwork",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/json-iterator/go",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/mattn/go-runewidth",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/matttproud/golang_protobuf_extensions/pbutil",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/modern-go/concurrent",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/modern-go/reflect2",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/olekukonko/tablewriter",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "github.com/pkg/errors",
- "licenses": [
- {
- "type": "BSD 2-clause \"Simplified\" License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/pmezard/go-difflib/difflib",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9830508474576272
- }
- ]
- },
- {
- "project": "github.com/prometheus/client_golang/prometheus",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/prometheus/client_model/go",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/prometheus/common",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/prometheus/procfs",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/russross/blackfriday/v2",
- "licenses": [
- {
- "type": "BSD 2-clause \"Simplified\" License",
- "confidence": 0.9626168224299065
- }
- ]
- },
- {
- "project": "github.com/shurcooL/sanitized_anchor_name",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/sirupsen/logrus",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/soheilhy/cmux",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/spf13/cobra",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 0.9573241061130334
- }
- ]
- },
- {
- "project": "github.com/spf13/pflag",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "github.com/tmc/grpc-websocket-proxy/wsproxy",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "github.com/urfave/cli",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "github.com/xiang90/probing",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/bbolt",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/api/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/client/v2",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/client/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/etcdctl/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/pkg/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/raft/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/server/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/tests/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.etcd.io/etcd/v3",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "go.uber.org/atomic",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "go.uber.org/multierr",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "go.uber.org/zap",
- "licenses": [
- {
- "type": "MIT License",
- "confidence": 0.9891304347826086
- }
- ]
- },
- {
- "project": "golang.org/x/crypto",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "golang.org/x/net",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "golang.org/x/sys",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "golang.org/x/text",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "golang.org/x/time/rate",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9663865546218487
- }
- ]
- },
- {
- "project": "google.golang.org/genproto",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "google.golang.org/grpc",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- }
- ]
- },
- {
- "project": "gopkg.in/cheggaaa/pb.v1",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 0.9916666666666667
- }
- ]
- },
- {
- "project": "gopkg.in/yaml.v2",
- "licenses": [
- {
- "type": "Apache License 2.0",
- "confidence": 1
- },
- {
- "type": "MIT License",
- "confidence": 0.8975609756097561
- }
- ]
- },
- {
- "project": "sigs.k8s.io/yaml",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License",
- "confidence": 1
- }
- ]
- }
-]
diff --git a/etcd-fix/bill-of-materials.override.json b/etcd-fix/bill-of-materials.override.json
deleted file mode 100644
index 15afc56..0000000
--- a/etcd-fix/bill-of-materials.override.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "project": "sigs.k8s.io/yaml",
- "licenses": [
- {
- "type": "BSD 3-clause \"New\" or \"Revised\" License"
- }
- ]
- },
- {
- "project": "github.com/inconshreveable/mousetrap",
- "licenses": [
- {
- "type": "Apache License 2.0"
- }
- ]
- }
-]
diff --git a/etcd-fix/build b/etcd-fix/build
deleted file mode 100755
index 0521fe6..0000000
--- a/etcd-fix/build
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env bash
-
-source ./scripts/test_lib.sh
-
-GIT_SHA=$(git rev-parse --short HEAD || echo "GitNotFound")
-if [[ -n "$FAILPOINTS" ]]; then
- GIT_SHA="$GIT_SHA"-FAILPOINTS
-fi
-
-VERSION_SYMBOL="go.etcd.io/etcd/api/v3/version.GitSHA"
-
-# Set GO_LDFLAGS="-s" for building without symbols for debugging.
-# shellcheck disable=SC2206
-GO_LDFLAGS=(${GO_LDFLAGS} "-X=${VERSION_SYMBOL}=${GIT_SHA}")
-GO_BUILD_ENV=("CGO_ENABLED=0" "GO_BUILD_FLAGS=${GO_BUILD_FLAGS}" "GOOS=${GOOS}" "GOARCH=${GOARCH}")
-
-# enable/disable failpoints
-toggle_failpoints() {
- mode="$1"
- if command -v gofail >/dev/null 2>&1; then
- run gofail "$mode" server/etcdserver/ server/mvcc/backend/
- elif [[ "$mode" != "disable" ]]; then
- log_error "FAILPOINTS set but gofail not found"
- exit 1
- fi
-}
-
-toggle_failpoints_default() {
- mode="disable"
- if [[ -n "$FAILPOINTS" ]]; then mode="enable"; fi
- toggle_failpoints "$mode"
-}
-
-etcd_build() {
- out="bin"
- if [[ -n "${BINDIR}" ]]; then out="${BINDIR}"; fi
- toggle_failpoints_default
-
- run rm -f "${out}/etcd"
- (
- cd ./server
- # Static compilation is useful when etcd is run in a container. $GO_BUILD_FLAGS is OK
- # shellcheck disable=SC2086
- run env "${GO_BUILD_ENV[@]}" go build $GO_BUILD_FLAGS \
- -installsuffix=cgo \
- "-ldflags=${GO_LDFLAGS[*]}" \
- -o="../${out}/etcd" . || return 2
- ) || return 2
-
- run rm -f "${out}/etcdctl"
- # shellcheck disable=SC2086
- (
- cd ./etcdctl
- run env CGO_ENABLED=0 GO_BUILD_FLAGS="${GO_BUILD_FLAGS}" go build $GO_BUILD_FLAGS \
- -installsuffix=cgo \
- "-ldflags=${GO_LDFLAGS[*]}" \
- -o="../${out}/etcdctl" . || return 2
- ) || return 2
- # Verify whether symbol we overriden exists
- # For cross-compiling we cannot run: ${out}/etcd --version | grep -q "Git SHA: ${GIT_SHA}"
-
- # We need symbols to do this check:
- if [[ "${GO_LDFLAGS[*]}" != *"-s"* ]]; then
- go tool nm "${out}/etcd" | grep "${VERSION_SYMBOL}" > /dev/null
- if [[ "${PIPESTATUS[*]}" != "0 0" ]]; then
- log_error "FAIL: Symbol ${VERSION_SYMBOL} not found in binary: ${out}/etcd"
- return 2
- fi
- fi
-}
-
-tools_build() {
- out="bin"
- if [[ -n "${BINDIR}" ]]; then out="${BINDIR}"; fi
- tools_path="tools/benchmark
- tools/etcd-dump-db
- tools/etcd-dump-logs
- tools/local-tester/bridge"
- for tool in ${tools_path}
- do
- echo "Building" "'${tool}'"...
- run rm -f "${out}/${tool}"
- # shellcheck disable=SC2086
- run env GO_BUILD_FLAGS="${GO_BUILD_FLAGS}" CGO_ENABLED=0 go build ${GO_BUILD_FLAGS} \
- -installsuffix=cgo \
- "-ldflags='${GO_LDFLAGS[*]}'" \
- -o="${out}/${tool}" "./${tool}" || return 2
- done
- tests_build "${@}"
-}
-
-tests_build() {
- out="bin"
- if [[ -n "${BINDIR}" ]]; then out="${BINDIR}"; fi
- tools_path="
- functional/cmd/etcd-agent
- functional/cmd/etcd-proxy
- functional/cmd/etcd-runner
- functional/cmd/etcd-tester"
- (
- cd tests || exit 2
- for tool in ${tools_path}; do
- echo "Building" "'${tool}'"...
- run rm -f "../${out}/${tool}"
-
- # shellcheck disable=SC2086
- run env CGO_ENABLED=0 GO_BUILD_FLAGS="${GO_BUILD_FLAGS}" go build ${GO_BUILD_FLAGS} \
- -installsuffix=cgo \
- "-ldflags='${GO_LDFLAGS[*]}'" \
- -o="../${out}/${tool}" "./${tool}" || return 2
- done
- ) || return 2
-}
-
-toggle_failpoints_default
-
-# only build when called directly, not sourced
-if echo "$0" | grep "build$" >/dev/null; then
- if etcd_build; then
- log_success "SUCCESS: etcd_build"
- else
- log_error "FAIL: etcd_build"
- exit 2
- fi
-fi
diff --git a/etcd-fix/build.bat b/etcd-fix/build.bat
deleted file mode 100755
index ff9b209..0000000
--- a/etcd-fix/build.bat
+++ /dev/null
@@ -1 +0,0 @@
-powershell -ExecutionPolicy Bypass -File build.ps1
diff --git a/etcd-fix/build.ps1 b/etcd-fix/build.ps1
deleted file mode 100644
index d1c36ee..0000000
--- a/etcd-fix/build.ps1
+++ /dev/null
@@ -1,81 +0,0 @@
-$ORG_PATH="go.etcd.io"
-$REPO_PATH="$ORG_PATH/etcd"
-$PWD = $((Get-Item -Path ".\" -Verbose).FullName)
-$FSROOT = $((Get-Location).Drive.Name+":")
-$FSYS = $((Get-WMIObject win32_logicaldisk -filter "DeviceID = '$FSROOT'").filesystem)
-
-if ($FSYS.StartsWith("FAT","CurrentCultureIgnoreCase")) {
- echo "Error: Cannot build etcd using the $FSYS filesystem (use NTFS instead)"
- exit 1
-}
-
-# Set $Env:GO_LDFLAGS="-s" for building without symbols.
-$GO_LDFLAGS="$Env:GO_LDFLAGS -X $REPO_PATH/version.GitSHA=$GIT_SHA"
-
-# rebuild symlinks
-git ls-files -s cmd | select-string -pattern 120000 | ForEach {
- $l = $_.ToString()
- $lnkname = $l.Split(' ')[1]
- $target = "$(git log -p HEAD -- $lnkname | select -last 2 | select -first 1)"
- $target = $target.SubString(1,$target.Length-1).Replace("/","\")
- $lnkname = $lnkname.Replace("/","\")
-
- $terms = $lnkname.Split("\")
- $dirname = $terms[0..($terms.length-2)] -join "\"
- $lnkname = "$PWD\$lnkname"
- $targetAbs = "$((Get-Item -Path "$dirname\$target").FullName)"
- $targetAbs = $targetAbs.Replace("/", "\")
-
- if (test-path -pathtype container "$targetAbs") {
- if (Test-Path "$lnkname") {
- if ((Get-Item "$lnkname") -is [System.IO.DirectoryInfo]) {
- # rd so deleting junction doesn't take files with it
- cmd /c rd "$lnkname"
- }
- }
- if (Test-Path "$lnkname") {
- if (!((Get-Item "$lnkname") -is [System.IO.DirectoryInfo])) {
- cmd /c del /A /F "$lnkname"
- }
- }
- cmd /c mklink /J "$lnkname" "$targetAbs" ">NUL"
- } else {
- # Remove file with symlink data (first run)
- if (Test-Path "$lnkname") {
- cmd /c del /A /F "$lnkname"
- }
- cmd /c mklink /H "$lnkname" "$targetAbs" ">NUL"
- }
-}
-
-if (-not $env:GOPATH) {
- $orgpath="$PWD\gopath\src\" + $ORG_PATH.Replace("/", "\")
- if (Test-Path "$orgpath\etcd") {
- if ((Get-Item "$orgpath\etcd") -is [System.IO.DirectoryInfo]) {
- # rd so deleting junction doesn't take files with it
- cmd /c rd "$orgpath\etcd"
- }
- }
- if (Test-Path "$orgpath") {
- if ((Get-Item "$orgpath") -is [System.IO.DirectoryInfo]) {
- # rd so deleting junction doesn't take files with it
- cmd /c rd "$orgpath"
- }
- }
- if (Test-Path "$orgpath") {
- if (!((Get-Item "$orgpath") -is [System.IO.DirectoryInfo])) {
- # Remove file with symlink data (first run)
- cmd /c del /A /F "$orgpath"
- }
- }
- cmd /c mkdir "$orgpath"
- cmd /c mklink /J "$orgpath\etcd" "$PWD" ">NUL"
- $env:GOPATH = "$PWD\gopath"
-}
-
-# Static compilation is useful when etcd is run in a container
-$env:CGO_ENABLED = 0
-$env:GO15VENDOREXPERIMENT = 1
-$GIT_SHA="$(git rev-parse --short HEAD)"
-go build -a -installsuffix cgo -ldflags $GO_LDFLAGS -o bin\etcd.exe "$REPO_PATH"
-go build -a -installsuffix cgo -ldflags $GO_LDFLAGS -o bin\etcdctl.exe "$REPO_PATH\etcdctl"
diff --git a/etcd-fix/build.sh b/etcd-fix/build.sh
deleted file mode 120000
index c795b05..0000000
--- a/etcd-fix/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-build
\ No newline at end of file
diff --git a/etcd-fix/client/v2/LICENSE b/etcd-fix/client/v2/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/etcd-fix/client/v2/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/etcd-fix/client/v2/README.md b/etcd-fix/client/v2/README.md
deleted file mode 100644
index 5ecb678..0000000
--- a/etcd-fix/client/v2/README.md
+++ /dev/null
@@ -1,112 +0,0 @@
-# etcd/client
-
-etcd/client is the Go client library for etcd.
-
-[![GoDoc](https://godoc.org/go.etcd.io/etcd/client?status.png)](https://godoc.org/go.etcd.io/etcd/client)
-
-For full compatibility, it is recommended to install released versions of clients using go modules.
-
-## Install
-
-```bash
-go get go.etcd.io/etcd/v3/client
-```
-
-## Usage
-
-```go
-package main
-
-import (
- "log"
- "time"
- "context"
-
- "go.etcd.io/etcd/v3/client"
-)
-
-func main() {
- cfg := client.Config{
- Endpoints: []string{"http://127.0.0.1:2379"},
- Transport: client.DefaultTransport,
- // set timeout per request to fail fast when the target endpoint is unavailable
- HeaderTimeoutPerRequest: time.Second,
- }
- c, err := client.New(cfg)
- if err != nil {
- log.Fatal(err)
- }
- kapi := client.NewKeysAPI(c)
- // set "/foo" key with "bar" value
- log.Print("Setting '/foo' key with 'bar' value")
- resp, err := kapi.Set(context.Background(), "/foo", "bar", nil)
- if err != nil {
- log.Fatal(err)
- } else {
- // print common key info
- log.Printf("Set is done. Metadata is %q\n", resp)
- }
- // get "/foo" key's value
- log.Print("Getting '/foo' key value")
- resp, err = kapi.Get(context.Background(), "/foo", nil)
- if err != nil {
- log.Fatal(err)
- } else {
- // print common key info
- log.Printf("Get is done. Metadata is %q\n", resp)
- // print value
- log.Printf("%q key has %q value\n", resp.Node.Key, resp.Node.Value)
- }
-}
-```
-
-## Error Handling
-
-etcd client might return three types of errors.
-
-- context error
-
-Each API call has its first parameter as `context`. A context can be canceled or have an attached deadline. If the context is canceled or reaches its deadline, the responding context error will be returned no matter what internal errors the API call has already encountered.
-
-- cluster error
-
-Each API call tries to send request to the cluster endpoints one by one until it successfully gets a response. If a requests to an endpoint fails, due to exceeding per request timeout or connection issues, the error will be added into a list of errors. If all possible endpoints fail, a cluster error that includes all encountered errors will be returned.
-
-- response error
-
-If the response gets from the cluster is invalid, a plain string error will be returned. For example, it might be a invalid JSON error.
-
-Here is the example code to handle client errors:
-
-```go
-cfg := client.Config{Endpoints: []string{"http://etcd1:2379","http://etcd2:2379","http://etcd3:2379"}}
-c, err := client.New(cfg)
-if err != nil {
- log.Fatal(err)
-}
-
-kapi := client.NewKeysAPI(c)
-resp, err := kapi.Set(ctx, "test", "bar", nil)
-if err != nil {
- if err == context.Canceled {
- // ctx is canceled by another routine
- } else if err == context.DeadlineExceeded {
- // ctx is attached with a deadline and it exceeded
- } else if cerr, ok := err.(*client.ClusterError); ok {
- // process (cerr.Errors)
- } else {
- // bad cluster endpoints, which are not etcd servers
- }
-}
-```
-
-
-## Caveat
-
-1. etcd/client prefers to use the same endpoint as long as the endpoint continues to work well. This saves socket resources, and improves efficiency for both client and server side. This preference doesn't remove consistency from the data consumed by the client because data replicated to each etcd member has already passed through the consensus process.
-
-2. etcd/client does round-robin rotation on other available endpoints if the preferred endpoint isn't functioning properly. For example, if the member that etcd/client connects to is hard killed, etcd/client will fail on the first attempt with the killed member, and succeed on the second attempt with another member. If it fails to talk to all available endpoints, it will return all errors happened.
-
-3. Default etcd/client cannot handle the case that the remote server is SIGSTOPed now. TCP keepalive mechanism doesn't help in this scenario because operating system may still send TCP keep-alive packets. Over time we'd like to improve this functionality, but solving this issue isn't high priority because a real-life case in which a server is stopped, but the connection is kept alive, hasn't been brought to our attention.
-
-4. etcd/client cannot detect whether a member is healthy with watches and non-quorum read requests. If the member is isolated from the cluster, etcd/client may retrieve outdated data. Instead, users can either issue quorum read requests or monitor the /health endpoint for member health information.
diff --git a/etcd-fix/client/v2/auth_role.go b/etcd-fix/client/v2/auth_role.go
deleted file mode 100644
index b6ba7e1..0000000
--- a/etcd-fix/client/v2/auth_role.go
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "net/http"
- "net/url"
-)
-
-type Role struct {
- Role string `json:"role"`
- Permissions Permissions `json:"permissions"`
- Grant *Permissions `json:"grant,omitempty"`
- Revoke *Permissions `json:"revoke,omitempty"`
-}
-
-type Permissions struct {
- KV rwPermission `json:"kv"`
-}
-
-type rwPermission struct {
- Read []string `json:"read"`
- Write []string `json:"write"`
-}
-
-type PermissionType int
-
-const (
- ReadPermission PermissionType = iota
- WritePermission
- ReadWritePermission
-)
-
-// NewAuthRoleAPI constructs a new AuthRoleAPI that uses HTTP to
-// interact with etcd's role creation and modification features.
-func NewAuthRoleAPI(c Client) AuthRoleAPI {
- return &httpAuthRoleAPI{
- client: c,
- }
-}
-
-type AuthRoleAPI interface {
- // AddRole adds a role.
- AddRole(ctx context.Context, role string) error
-
- // RemoveRole removes a role.
- RemoveRole(ctx context.Context, role string) error
-
- // GetRole retrieves role details.
- GetRole(ctx context.Context, role string) (*Role, error)
-
- // GrantRoleKV grants a role some permission prefixes for the KV store.
- GrantRoleKV(ctx context.Context, role string, prefixes []string, permType PermissionType) (*Role, error)
-
- // RevokeRoleKV revokes some permission prefixes for a role on the KV store.
- RevokeRoleKV(ctx context.Context, role string, prefixes []string, permType PermissionType) (*Role, error)
-
- // ListRoles lists roles.
- ListRoles(ctx context.Context) ([]string, error)
-}
-
-type httpAuthRoleAPI struct {
- client httpClient
-}
-
-type authRoleAPIAction struct {
- verb string
- name string
- role *Role
-}
-
-type authRoleAPIList struct{}
-
-func (list *authRoleAPIList) HTTPRequest(ep url.URL) *http.Request {
- u := v2AuthURL(ep, "roles", "")
- req, _ := http.NewRequest("GET", u.String(), nil)
- req.Header.Set("Content-Type", "application/json")
- return req
-}
-
-func (l *authRoleAPIAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2AuthURL(ep, "roles", l.name)
- if l.role == nil {
- req, _ := http.NewRequest(l.verb, u.String(), nil)
- return req
- }
- b, err := json.Marshal(l.role)
- if err != nil {
- panic(err)
- }
- body := bytes.NewReader(b)
- req, _ := http.NewRequest(l.verb, u.String(), body)
- req.Header.Set("Content-Type", "application/json")
- return req
-}
-
-func (r *httpAuthRoleAPI) ListRoles(ctx context.Context) ([]string, error) {
- resp, body, err := r.client.Do(ctx, &authRoleAPIList{})
- if err != nil {
- return nil, err
- }
- if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil {
- return nil, err
- }
- var roleList struct {
- Roles []Role `json:"roles"`
- }
- if err = json.Unmarshal(body, &roleList); err != nil {
- return nil, err
- }
- ret := make([]string, 0, len(roleList.Roles))
- for _, r := range roleList.Roles {
- ret = append(ret, r.Role)
- }
- return ret, nil
-}
-
-func (r *httpAuthRoleAPI) AddRole(ctx context.Context, rolename string) error {
- role := &Role{
- Role: rolename,
- }
- return r.addRemoveRole(ctx, &authRoleAPIAction{
- verb: "PUT",
- name: rolename,
- role: role,
- })
-}
-
-func (r *httpAuthRoleAPI) RemoveRole(ctx context.Context, rolename string) error {
- return r.addRemoveRole(ctx, &authRoleAPIAction{
- verb: "DELETE",
- name: rolename,
- })
-}
-
-func (r *httpAuthRoleAPI) addRemoveRole(ctx context.Context, req *authRoleAPIAction) error {
- resp, body, err := r.client.Do(ctx, req)
- if err != nil {
- return err
- }
- if err := assertStatusCode(resp.StatusCode, http.StatusOK, http.StatusCreated); err != nil {
- var sec authError
- err := json.Unmarshal(body, &sec)
- if err != nil {
- return err
- }
- return sec
- }
- return nil
-}
-
-func (r *httpAuthRoleAPI) GetRole(ctx context.Context, rolename string) (*Role, error) {
- return r.modRole(ctx, &authRoleAPIAction{
- verb: "GET",
- name: rolename,
- })
-}
-
-func buildRWPermission(prefixes []string, permType PermissionType) rwPermission {
- var out rwPermission
- switch permType {
- case ReadPermission:
- out.Read = prefixes
- case WritePermission:
- out.Write = prefixes
- case ReadWritePermission:
- out.Read = prefixes
- out.Write = prefixes
- }
- return out
-}
-
-func (r *httpAuthRoleAPI) GrantRoleKV(ctx context.Context, rolename string, prefixes []string, permType PermissionType) (*Role, error) {
- rwp := buildRWPermission(prefixes, permType)
- role := &Role{
- Role: rolename,
- Grant: &Permissions{
- KV: rwp,
- },
- }
- return r.modRole(ctx, &authRoleAPIAction{
- verb: "PUT",
- name: rolename,
- role: role,
- })
-}
-
-func (r *httpAuthRoleAPI) RevokeRoleKV(ctx context.Context, rolename string, prefixes []string, permType PermissionType) (*Role, error) {
- rwp := buildRWPermission(prefixes, permType)
- role := &Role{
- Role: rolename,
- Revoke: &Permissions{
- KV: rwp,
- },
- }
- return r.modRole(ctx, &authRoleAPIAction{
- verb: "PUT",
- name: rolename,
- role: role,
- })
-}
-
-func (r *httpAuthRoleAPI) modRole(ctx context.Context, req *authRoleAPIAction) (*Role, error) {
- resp, body, err := r.client.Do(ctx, req)
- if err != nil {
- return nil, err
- }
- if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil {
- var sec authError
- err = json.Unmarshal(body, &sec)
- if err != nil {
- return nil, err
- }
- return nil, sec
- }
- var role Role
- if err = json.Unmarshal(body, &role); err != nil {
- return nil, err
- }
- return &role, nil
-}
diff --git a/etcd-fix/client/v2/auth_user.go b/etcd-fix/client/v2/auth_user.go
deleted file mode 100644
index 8e7e2ef..0000000
--- a/etcd-fix/client/v2/auth_user.go
+++ /dev/null
@@ -1,319 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "net/http"
- "net/url"
- "path"
-)
-
-var (
- defaultV2AuthPrefix = "/v2/auth"
-)
-
-type User struct {
- User string `json:"user"`
- Password string `json:"password,omitempty"`
- Roles []string `json:"roles"`
- Grant []string `json:"grant,omitempty"`
- Revoke []string `json:"revoke,omitempty"`
-}
-
-// userListEntry is the user representation given by the server for ListUsers
-type userListEntry struct {
- User string `json:"user"`
- Roles []Role `json:"roles"`
-}
-
-type UserRoles struct {
- User string `json:"user"`
- Roles []Role `json:"roles"`
-}
-
-func v2AuthURL(ep url.URL, action string, name string) *url.URL {
- if name != "" {
- ep.Path = path.Join(ep.Path, defaultV2AuthPrefix, action, name)
- return &ep
- }
- ep.Path = path.Join(ep.Path, defaultV2AuthPrefix, action)
- return &ep
-}
-
-// NewAuthAPI constructs a new AuthAPI that uses HTTP to
-// interact with etcd's general auth features.
-func NewAuthAPI(c Client) AuthAPI {
- return &httpAuthAPI{
- client: c,
- }
-}
-
-type AuthAPI interface {
- // Enable auth.
- Enable(ctx context.Context) error
-
- // Disable auth.
- Disable(ctx context.Context) error
-}
-
-type httpAuthAPI struct {
- client httpClient
-}
-
-func (s *httpAuthAPI) Enable(ctx context.Context) error {
- return s.enableDisable(ctx, &authAPIAction{"PUT"})
-}
-
-func (s *httpAuthAPI) Disable(ctx context.Context) error {
- return s.enableDisable(ctx, &authAPIAction{"DELETE"})
-}
-
-func (s *httpAuthAPI) enableDisable(ctx context.Context, req httpAction) error {
- resp, body, err := s.client.Do(ctx, req)
- if err != nil {
- return err
- }
- if err = assertStatusCode(resp.StatusCode, http.StatusOK, http.StatusCreated); err != nil {
- var sec authError
- err = json.Unmarshal(body, &sec)
- if err != nil {
- return err
- }
- return sec
- }
- return nil
-}
-
-type authAPIAction struct {
- verb string
-}
-
-func (l *authAPIAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2AuthURL(ep, "enable", "")
- req, _ := http.NewRequest(l.verb, u.String(), nil)
- return req
-}
-
-type authError struct {
- Message string `json:"message"`
- Code int `json:"-"`
-}
-
-func (e authError) Error() string {
- return e.Message
-}
-
-// NewAuthUserAPI constructs a new AuthUserAPI that uses HTTP to
-// interact with etcd's user creation and modification features.
-func NewAuthUserAPI(c Client) AuthUserAPI {
- return &httpAuthUserAPI{
- client: c,
- }
-}
-
-type AuthUserAPI interface {
- // AddUser adds a user.
- AddUser(ctx context.Context, username string, password string) error
-
- // RemoveUser removes a user.
- RemoveUser(ctx context.Context, username string) error
-
- // GetUser retrieves user details.
- GetUser(ctx context.Context, username string) (*User, error)
-
- // GrantUser grants a user some permission roles.
- GrantUser(ctx context.Context, username string, roles []string) (*User, error)
-
- // RevokeUser revokes some permission roles from a user.
- RevokeUser(ctx context.Context, username string, roles []string) (*User, error)
-
- // ChangePassword changes the user's password.
- ChangePassword(ctx context.Context, username string, password string) (*User, error)
-
- // ListUsers lists the users.
- ListUsers(ctx context.Context) ([]string, error)
-}
-
-type httpAuthUserAPI struct {
- client httpClient
-}
-
-type authUserAPIAction struct {
- verb string
- username string
- user *User
-}
-
-type authUserAPIList struct{}
-
-func (list *authUserAPIList) HTTPRequest(ep url.URL) *http.Request {
- u := v2AuthURL(ep, "users", "")
- req, _ := http.NewRequest("GET", u.String(), nil)
- req.Header.Set("Content-Type", "application/json")
- return req
-}
-
-func (l *authUserAPIAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2AuthURL(ep, "users", l.username)
- if l.user == nil {
- req, _ := http.NewRequest(l.verb, u.String(), nil)
- return req
- }
- b, err := json.Marshal(l.user)
- if err != nil {
- panic(err)
- }
- body := bytes.NewReader(b)
- req, _ := http.NewRequest(l.verb, u.String(), body)
- req.Header.Set("Content-Type", "application/json")
- return req
-}
-
-func (u *httpAuthUserAPI) ListUsers(ctx context.Context) ([]string, error) {
- resp, body, err := u.client.Do(ctx, &authUserAPIList{})
- if err != nil {
- return nil, err
- }
- if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil {
- var sec authError
- err = json.Unmarshal(body, &sec)
- if err != nil {
- return nil, err
- }
- return nil, sec
- }
-
- var userList struct {
- Users []userListEntry `json:"users"`
- }
-
- if err = json.Unmarshal(body, &userList); err != nil {
- return nil, err
- }
-
- ret := make([]string, 0, len(userList.Users))
- for _, u := range userList.Users {
- ret = append(ret, u.User)
- }
- return ret, nil
-}
-
-func (u *httpAuthUserAPI) AddUser(ctx context.Context, username string, password string) error {
- user := &User{
- User: username,
- Password: password,
- }
- return u.addRemoveUser(ctx, &authUserAPIAction{
- verb: "PUT",
- username: username,
- user: user,
- })
-}
-
-func (u *httpAuthUserAPI) RemoveUser(ctx context.Context, username string) error {
- return u.addRemoveUser(ctx, &authUserAPIAction{
- verb: "DELETE",
- username: username,
- })
-}
-
-func (u *httpAuthUserAPI) addRemoveUser(ctx context.Context, req *authUserAPIAction) error {
- resp, body, err := u.client.Do(ctx, req)
- if err != nil {
- return err
- }
- if err = assertStatusCode(resp.StatusCode, http.StatusOK, http.StatusCreated); err != nil {
- var sec authError
- err = json.Unmarshal(body, &sec)
- if err != nil {
- return err
- }
- return sec
- }
- return nil
-}
-
-func (u *httpAuthUserAPI) GetUser(ctx context.Context, username string) (*User, error) {
- return u.modUser(ctx, &authUserAPIAction{
- verb: "GET",
- username: username,
- })
-}
-
-func (u *httpAuthUserAPI) GrantUser(ctx context.Context, username string, roles []string) (*User, error) {
- user := &User{
- User: username,
- Grant: roles,
- }
- return u.modUser(ctx, &authUserAPIAction{
- verb: "PUT",
- username: username,
- user: user,
- })
-}
-
-func (u *httpAuthUserAPI) RevokeUser(ctx context.Context, username string, roles []string) (*User, error) {
- user := &User{
- User: username,
- Revoke: roles,
- }
- return u.modUser(ctx, &authUserAPIAction{
- verb: "PUT",
- username: username,
- user: user,
- })
-}
-
-func (u *httpAuthUserAPI) ChangePassword(ctx context.Context, username string, password string) (*User, error) {
- user := &User{
- User: username,
- Password: password,
- }
- return u.modUser(ctx, &authUserAPIAction{
- verb: "PUT",
- username: username,
- user: user,
- })
-}
-
-func (u *httpAuthUserAPI) modUser(ctx context.Context, req *authUserAPIAction) (*User, error) {
- resp, body, err := u.client.Do(ctx, req)
- if err != nil {
- return nil, err
- }
- if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil {
- var sec authError
- err = json.Unmarshal(body, &sec)
- if err != nil {
- return nil, err
- }
- return nil, sec
- }
- var user User
- if err = json.Unmarshal(body, &user); err != nil {
- var userR UserRoles
- if urerr := json.Unmarshal(body, &userR); urerr != nil {
- return nil, err
- }
- user.User = userR.User
- for _, r := range userR.Roles {
- user.Roles = append(user.Roles, r.Role)
- }
- }
- return &user, nil
-}
diff --git a/etcd-fix/client/v2/cancelreq.go b/etcd-fix/client/v2/cancelreq.go
deleted file mode 100644
index 76d1f04..0000000
--- a/etcd-fix/client/v2/cancelreq.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// borrowed from golang/net/context/ctxhttp/cancelreq.go
-
-package client
-
-import "net/http"
-
-func requestCanceler(tr CancelableTransport, req *http.Request) func() {
- ch := make(chan struct{})
- req.Cancel = ch
-
- return func() {
- close(ch)
- }
-}
diff --git a/etcd-fix/client/v2/client.go b/etcd-fix/client/v2/client.go
deleted file mode 100644
index ee6e0ef..0000000
--- a/etcd-fix/client/v2/client.go
+++ /dev/null
@@ -1,710 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "io/ioutil"
- "math/rand"
- "net"
- "net/http"
- "net/url"
- "sort"
- "strconv"
- "sync"
- "time"
-
- "go.etcd.io/etcd/api/v3/version"
-)
-
-var (
- ErrNoEndpoints = errors.New("client: no endpoints available")
- ErrTooManyRedirects = errors.New("client: too many redirects")
- ErrClusterUnavailable = errors.New("client: etcd cluster is unavailable or misconfigured")
- ErrNoLeaderEndpoint = errors.New("client: no leader endpoint available")
- errTooManyRedirectChecks = errors.New("client: too many redirect checks")
-
- // oneShotCtxValue is set on a context using WithValue(&oneShotValue) so
- // that Do() will not retry a request
- oneShotCtxValue interface{}
-)
-
-var DefaultRequestTimeout = 5 * time.Second
-
-var DefaultTransport CancelableTransport = &http.Transport{
- Proxy: http.ProxyFromEnvironment,
- Dial: (&net.Dialer{
- Timeout: 30 * time.Second,
- KeepAlive: 30 * time.Second,
- }).Dial,
- TLSHandshakeTimeout: 10 * time.Second,
-}
-
-type EndpointSelectionMode int
-
-const (
- // EndpointSelectionRandom is the default value of the 'SelectionMode'.
- // As the name implies, the client object will pick a node from the members
- // of the cluster in a random fashion. If the cluster has three members, A, B,
- // and C, the client picks any node from its three members as its request
- // destination.
- EndpointSelectionRandom EndpointSelectionMode = iota
-
- // If 'SelectionMode' is set to 'EndpointSelectionPrioritizeLeader',
- // requests are sent directly to the cluster leader. This reduces
- // forwarding roundtrips compared to making requests to etcd followers
- // who then forward them to the cluster leader. In the event of a leader
- // failure, however, clients configured this way cannot prioritize among
- // the remaining etcd followers. Therefore, when a client sets 'SelectionMode'
- // to 'EndpointSelectionPrioritizeLeader', it must use 'client.AutoSync()' to
- // maintain its knowledge of current cluster state.
- //
- // This mode should be used with Client.AutoSync().
- EndpointSelectionPrioritizeLeader
-)
-
-type Config struct {
- // Endpoints defines a set of URLs (schemes, hosts and ports only)
- // that can be used to communicate with a logical etcd cluster. For
- // example, a three-node cluster could be provided like so:
- //
- // Endpoints: []string{
- // "http://node1.example.com:2379",
- // "http://node2.example.com:2379",
- // "http://node3.example.com:2379",
- // }
- //
- // If multiple endpoints are provided, the Client will attempt to
- // use them all in the event that one or more of them are unusable.
- //
- // If Client.Sync is ever called, the Client may cache an alternate
- // set of endpoints to continue operation.
- Endpoints []string
-
- // Transport is used by the Client to drive HTTP requests. If not
- // provided, DefaultTransport will be used.
- Transport CancelableTransport
-
- // CheckRedirect specifies the policy for handling HTTP redirects.
- // If CheckRedirect is not nil, the Client calls it before
- // following an HTTP redirect. The sole argument is the number of
- // requests that have already been made. If CheckRedirect returns
- // an error, Client.Do will not make any further requests and return
- // the error back it to the caller.
- //
- // If CheckRedirect is nil, the Client uses its default policy,
- // which is to stop after 10 consecutive requests.
- CheckRedirect CheckRedirectFunc
-
- // Username specifies the user credential to add as an authorization header
- Username string
-
- // Password is the password for the specified user to add as an authorization header
- // to the request.
- Password string
-
- // HeaderTimeoutPerRequest specifies the time limit to wait for response
- // header in a single request made by the Client. The timeout includes
- // connection time, any redirects, and header wait time.
- //
- // For non-watch GET request, server returns the response body immediately.
- // For PUT/POST/DELETE request, server will attempt to commit request
- // before responding, which is expected to take `100ms + 2 * RTT`.
- // For watch request, server returns the header immediately to notify Client
- // watch start. But if server is behind some kind of proxy, the response
- // header may be cached at proxy, and Client cannot rely on this behavior.
- //
- // Especially, wait request will ignore this timeout.
- //
- // One API call may send multiple requests to different etcd servers until it
- // succeeds. Use context of the API to specify the overall timeout.
- //
- // A HeaderTimeoutPerRequest of zero means no timeout.
- HeaderTimeoutPerRequest time.Duration
-
- // SelectionMode is an EndpointSelectionMode enum that specifies the
- // policy for choosing the etcd cluster node to which requests are sent.
- SelectionMode EndpointSelectionMode
-}
-
-func (cfg *Config) transport() CancelableTransport {
- if cfg.Transport == nil {
- return DefaultTransport
- }
- return cfg.Transport
-}
-
-func (cfg *Config) checkRedirect() CheckRedirectFunc {
- if cfg.CheckRedirect == nil {
- return DefaultCheckRedirect
- }
- return cfg.CheckRedirect
-}
-
-// CancelableTransport mimics net/http.Transport, but requires that
-// the object also support request cancellation.
-type CancelableTransport interface {
- http.RoundTripper
- CancelRequest(req *http.Request)
-}
-
-type CheckRedirectFunc func(via int) error
-
-// DefaultCheckRedirect follows up to 10 redirects, but no more.
-var DefaultCheckRedirect CheckRedirectFunc = func(via int) error {
- if via > 10 {
- return ErrTooManyRedirects
- }
- return nil
-}
-
-type Client interface {
- // Sync updates the internal cache of the etcd cluster's membership.
- Sync(context.Context) error
-
- // AutoSync periodically calls Sync() every given interval.
- // The recommended sync interval is 10 seconds to 1 minute, which does
- // not bring too much overhead to server and makes client catch up the
- // cluster change in time.
- //
- // The example to use it:
- //
- // for {
- // err := client.AutoSync(ctx, 10*time.Second)
- // if err == context.DeadlineExceeded || err == context.Canceled {
- // break
- // }
- // log.Print(err)
- // }
- AutoSync(context.Context, time.Duration) error
-
- // Endpoints returns a copy of the current set of API endpoints used
- // by Client to resolve HTTP requests. If Sync has ever been called,
- // this may differ from the initial Endpoints provided in the Config.
- Endpoints() []string
-
- // SetEndpoints sets the set of API endpoints used by Client to resolve
- // HTTP requests. If the given endpoints are not valid, an error will be
- // returned
- SetEndpoints(eps []string) error
-
- // GetVersion retrieves the current etcd server and cluster version
- GetVersion(ctx context.Context) (*version.Versions, error)
-
- httpClient
-}
-
-func New(cfg Config) (Client, error) {
- c := &httpClusterClient{
- clientFactory: newHTTPClientFactory(cfg.transport(), cfg.checkRedirect(), cfg.HeaderTimeoutPerRequest),
- rand: rand.New(rand.NewSource(int64(time.Now().Nanosecond()))),
- selectionMode: cfg.SelectionMode,
- }
- if cfg.Username != "" {
- c.credentials = &credentials{
- username: cfg.Username,
- password: cfg.Password,
- }
- }
- if err := c.SetEndpoints(cfg.Endpoints); err != nil {
- return nil, err
- }
- return c, nil
-}
-
-type httpClient interface {
- Do(context.Context, httpAction) (*http.Response, []byte, error)
-}
-
-func newHTTPClientFactory(tr CancelableTransport, cr CheckRedirectFunc, headerTimeout time.Duration) httpClientFactory {
- return func(ep url.URL) httpClient {
- return &redirectFollowingHTTPClient{
- checkRedirect: cr,
- client: &simpleHTTPClient{
- transport: tr,
- endpoint: ep,
- headerTimeout: headerTimeout,
- },
- }
- }
-}
-
-type credentials struct {
- username string
- password string
-}
-
-type httpClientFactory func(url.URL) httpClient
-
-type httpAction interface {
- HTTPRequest(url.URL) *http.Request
-}
-
-type httpClusterClient struct {
- clientFactory httpClientFactory
- endpoints []url.URL
- pinned int
- credentials *credentials
- sync.RWMutex
- rand *rand.Rand
- selectionMode EndpointSelectionMode
-}
-
-func (c *httpClusterClient) getLeaderEndpoint(ctx context.Context, eps []url.URL) (string, error) {
- ceps := make([]url.URL, len(eps))
- copy(ceps, eps)
-
- // To perform a lookup on the new endpoint list without using the current
- // client, we'll copy it
- clientCopy := &httpClusterClient{
- clientFactory: c.clientFactory,
- credentials: c.credentials,
- rand: c.rand,
-
- pinned: 0,
- endpoints: ceps,
- }
-
- mAPI := NewMembersAPI(clientCopy)
- leader, err := mAPI.Leader(ctx)
- if err != nil {
- return "", err
- }
- if len(leader.ClientURLs) == 0 {
- return "", ErrNoLeaderEndpoint
- }
-
- return leader.ClientURLs[0], nil // TODO: how to handle multiple client URLs?
-}
-
-func (c *httpClusterClient) parseEndpoints(eps []string) ([]url.URL, error) {
- if len(eps) == 0 {
- return []url.URL{}, ErrNoEndpoints
- }
-
- neps := make([]url.URL, len(eps))
- for i, ep := range eps {
- u, err := url.Parse(ep)
- if err != nil {
- return []url.URL{}, err
- }
- neps[i] = *u
- }
- return neps, nil
-}
-
-func (c *httpClusterClient) SetEndpoints(eps []string) error {
- neps, err := c.parseEndpoints(eps)
- if err != nil {
- return err
- }
-
- c.Lock()
- defer c.Unlock()
-
- c.endpoints = shuffleEndpoints(c.rand, neps)
- // We're not doing anything for PrioritizeLeader here. This is
- // due to not having a context meaning we can't call getLeaderEndpoint
- // However, if you're using PrioritizeLeader, you've already been told
- // to regularly call sync, where we do have a ctx, and can figure the
- // leader. PrioritizeLeader is also quite a loose guarantee, so deal
- // with it
- c.pinned = 0
-
- return nil
-}
-
-func (c *httpClusterClient) Do(ctx context.Context, act httpAction) (*http.Response, []byte, error) {
- action := act
- c.RLock()
- leps := len(c.endpoints)
- eps := make([]url.URL, leps)
- n := copy(eps, c.endpoints)
- pinned := c.pinned
-
- if c.credentials != nil {
- action = &authedAction{
- act: act,
- credentials: *c.credentials,
- }
- }
- c.RUnlock()
-
- if leps == 0 {
- return nil, nil, ErrNoEndpoints
- }
-
- if leps != n {
- return nil, nil, errors.New("unable to pick endpoint: copy failed")
- }
-
- var resp *http.Response
- var body []byte
- var err error
- cerr := &ClusterError{}
- isOneShot := ctx.Value(&oneShotCtxValue) != nil
-
- for i := pinned; i < leps+pinned; i++ {
- k := i % leps
- hc := c.clientFactory(eps[k])
- resp, body, err = hc.Do(ctx, action)
- if err != nil {
- cerr.Errors = append(cerr.Errors, err)
- if err == ctx.Err() {
- return nil, nil, ctx.Err()
- }
- if err == context.Canceled || err == context.DeadlineExceeded {
- return nil, nil, err
- }
- } else if resp.StatusCode/100 == 5 {
- switch resp.StatusCode {
- case http.StatusInternalServerError, http.StatusServiceUnavailable:
- // TODO: make sure this is a no leader response
- cerr.Errors = append(cerr.Errors, fmt.Errorf("client: etcd member %s has no leader", eps[k].String()))
- default:
- cerr.Errors = append(cerr.Errors, fmt.Errorf("client: etcd member %s returns server error [%s]", eps[k].String(), http.StatusText(resp.StatusCode)))
- }
- err = cerr.Errors[0]
- }
- if err != nil {
- if !isOneShot {
- continue
- }
- c.Lock()
- c.pinned = (k + 1) % leps
- c.Unlock()
- return nil, nil, err
- }
- if k != pinned {
- c.Lock()
- c.pinned = k
- c.Unlock()
- }
- return resp, body, nil
- }
-
- return nil, nil, cerr
-}
-
-func (c *httpClusterClient) Endpoints() []string {
- c.RLock()
- defer c.RUnlock()
-
- eps := make([]string, len(c.endpoints))
- for i, ep := range c.endpoints {
- eps[i] = ep.String()
- }
-
- return eps
-}
-
-func (c *httpClusterClient) Sync(ctx context.Context) error {
- mAPI := NewMembersAPI(c)
- ms, err := mAPI.List(ctx)
- if err != nil {
- return err
- }
-
- var eps []string
- for _, m := range ms {
- eps = append(eps, m.ClientURLs...)
- }
-
- neps, err := c.parseEndpoints(eps)
- if err != nil {
- return err
- }
-
- npin := 0
-
- switch c.selectionMode {
- case EndpointSelectionRandom:
- c.RLock()
- eq := endpointsEqual(c.endpoints, neps)
- c.RUnlock()
-
- if eq {
- return nil
- }
- // When items in the endpoint list changes, we choose a new pin
- neps = shuffleEndpoints(c.rand, neps)
- case EndpointSelectionPrioritizeLeader:
- nle, err := c.getLeaderEndpoint(ctx, neps)
- if err != nil {
- return ErrNoLeaderEndpoint
- }
-
- for i, n := range neps {
- if n.String() == nle {
- npin = i
- break
- }
- }
- default:
- return fmt.Errorf("invalid endpoint selection mode: %d", c.selectionMode)
- }
-
- c.Lock()
- defer c.Unlock()
- c.endpoints = neps
- c.pinned = npin
-
- return nil
-}
-
-func (c *httpClusterClient) AutoSync(ctx context.Context, interval time.Duration) error {
- ticker := time.NewTicker(interval)
- defer ticker.Stop()
- for {
- err := c.Sync(ctx)
- if err != nil {
- return err
- }
- select {
- case <-ctx.Done():
- return ctx.Err()
- case <-ticker.C:
- }
- }
-}
-
-func (c *httpClusterClient) GetVersion(ctx context.Context) (*version.Versions, error) {
- act := &getAction{Prefix: "/version"}
-
- resp, body, err := c.Do(ctx, act)
- if err != nil {
- return nil, err
- }
-
- switch resp.StatusCode {
- case http.StatusOK:
- if len(body) == 0 {
- return nil, ErrEmptyBody
- }
- var vresp version.Versions
- if err := json.Unmarshal(body, &vresp); err != nil {
- return nil, ErrInvalidJSON
- }
- return &vresp, nil
- default:
- var etcdErr Error
- if err := json.Unmarshal(body, &etcdErr); err != nil {
- return nil, ErrInvalidJSON
- }
- return nil, etcdErr
- }
-}
-
-type roundTripResponse struct {
- resp *http.Response
- err error
-}
-
-type simpleHTTPClient struct {
- transport CancelableTransport
- endpoint url.URL
- headerTimeout time.Duration
-}
-
-func (c *simpleHTTPClient) Do(ctx context.Context, act httpAction) (*http.Response, []byte, error) {
- req := act.HTTPRequest(c.endpoint)
-
- if err := printcURL(req); err != nil {
- return nil, nil, err
- }
-
- isWait := false
- if req != nil && req.URL != nil {
- ws := req.URL.Query().Get("wait")
- if len(ws) != 0 {
- var err error
- isWait, err = strconv.ParseBool(ws)
- if err != nil {
- return nil, nil, fmt.Errorf("wrong wait value %s (%v for %+v)", ws, err, req)
- }
- }
- }
-
- var hctx context.Context
- var hcancel context.CancelFunc
- if !isWait && c.headerTimeout > 0 {
- hctx, hcancel = context.WithTimeout(ctx, c.headerTimeout)
- } else {
- hctx, hcancel = context.WithCancel(ctx)
- }
- defer hcancel()
-
- reqcancel := requestCanceler(c.transport, req)
-
- rtchan := make(chan roundTripResponse, 1)
- go func() {
- resp, err := c.transport.RoundTrip(req)
- rtchan <- roundTripResponse{resp: resp, err: err}
- close(rtchan)
- }()
-
- var resp *http.Response
- var err error
-
- select {
- case rtresp := <-rtchan:
- resp, err = rtresp.resp, rtresp.err
- case <-hctx.Done():
- // cancel and wait for request to actually exit before continuing
- reqcancel()
- rtresp := <-rtchan
- resp = rtresp.resp
- switch {
- case ctx.Err() != nil:
- err = ctx.Err()
- case hctx.Err() != nil:
- err = fmt.Errorf("client: endpoint %s exceeded header timeout", c.endpoint.String())
- default:
- panic("failed to get error from context")
- }
- }
-
- // always check for resp nil-ness to deal with possible
- // race conditions between channels above
- defer func() {
- if resp != nil {
- resp.Body.Close()
- }
- }()
-
- if err != nil {
- return nil, nil, err
- }
-
- var body []byte
- done := make(chan struct{})
- go func() {
- body, err = ioutil.ReadAll(resp.Body)
- done <- struct{}{}
- }()
-
- select {
- case <-ctx.Done():
- resp.Body.Close()
- <-done
- return nil, nil, ctx.Err()
- case <-done:
- }
-
- return resp, body, err
-}
-
-type authedAction struct {
- act httpAction
- credentials credentials
-}
-
-func (a *authedAction) HTTPRequest(url url.URL) *http.Request {
- r := a.act.HTTPRequest(url)
- r.SetBasicAuth(a.credentials.username, a.credentials.password)
- return r
-}
-
-type redirectFollowingHTTPClient struct {
- client httpClient
- checkRedirect CheckRedirectFunc
-}
-
-func (r *redirectFollowingHTTPClient) Do(ctx context.Context, act httpAction) (*http.Response, []byte, error) {
- next := act
- for i := 0; i < 100; i++ {
- if i > 0 {
- if err := r.checkRedirect(i); err != nil {
- return nil, nil, err
- }
- }
- resp, body, err := r.client.Do(ctx, next)
- if err != nil {
- return nil, nil, err
- }
- if resp.StatusCode/100 == 3 {
- hdr := resp.Header.Get("Location")
- if hdr == "" {
- return nil, nil, fmt.Errorf("location header not set")
- }
- loc, err := url.Parse(hdr)
- if err != nil {
- return nil, nil, fmt.Errorf("location header not valid URL: %s", hdr)
- }
- next = &redirectedHTTPAction{
- action: act,
- location: *loc,
- }
- continue
- }
- return resp, body, nil
- }
-
- return nil, nil, errTooManyRedirectChecks
-}
-
-type redirectedHTTPAction struct {
- action httpAction
- location url.URL
-}
-
-func (r *redirectedHTTPAction) HTTPRequest(ep url.URL) *http.Request {
- orig := r.action.HTTPRequest(ep)
- orig.URL = &r.location
- return orig
-}
-
-func shuffleEndpoints(r *rand.Rand, eps []url.URL) []url.URL {
- // copied from Go 1.9<= rand.Rand.Perm
- n := len(eps)
- p := make([]int, n)
- for i := 0; i < n; i++ {
- j := r.Intn(i + 1)
- p[i] = p[j]
- p[j] = i
- }
- neps := make([]url.URL, n)
- for i, k := range p {
- neps[i] = eps[k]
- }
- return neps
-}
-
-func endpointsEqual(left, right []url.URL) bool {
- if len(left) != len(right) {
- return false
- }
-
- sLeft := make([]string, len(left))
- sRight := make([]string, len(right))
- for i, l := range left {
- sLeft[i] = l.String()
- }
- for i, r := range right {
- sRight[i] = r.String()
- }
-
- sort.Strings(sLeft)
- sort.Strings(sRight)
- for i := range sLeft {
- if sLeft[i] != sRight[i] {
- return false
- }
- }
- return true
-}
diff --git a/etcd-fix/client/v2/client_test.go b/etcd-fix/client/v2/client_test.go
deleted file mode 100644
index 8e83bd2..0000000
--- a/etcd-fix/client/v2/client_test.go
+++ /dev/null
@@ -1,1080 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "context"
- "errors"
- "fmt"
- "io"
- "io/ioutil"
- "math/rand"
- "net/http"
- "net/url"
- "reflect"
- "sort"
- "strings"
- "testing"
- "time"
-
- "go.etcd.io/etcd/api/v3/version"
- "go.etcd.io/etcd/pkg/v3/testutil"
-)
-
-type actionAssertingHTTPClient struct {
- t *testing.T
- num int
- act httpAction
-
- resp http.Response
- body []byte
- err error
-}
-
-func (a *actionAssertingHTTPClient) Do(_ context.Context, act httpAction) (*http.Response, []byte, error) {
- if !reflect.DeepEqual(a.act, act) {
- a.t.Errorf("#%d: unexpected httpAction: want=%#v got=%#v", a.num, a.act, act)
- }
-
- return &a.resp, a.body, a.err
-}
-
-type staticHTTPClient struct {
- resp http.Response
- body []byte
- err error
-}
-
-func (s *staticHTTPClient) Do(context.Context, httpAction) (*http.Response, []byte, error) {
- return &s.resp, s.body, s.err
-}
-
-type staticHTTPAction struct {
- request http.Request
-}
-
-func (s *staticHTTPAction) HTTPRequest(url.URL) *http.Request {
- return &s.request
-}
-
-type staticHTTPResponse struct {
- resp http.Response
- body []byte
- err error
-}
-
-type multiStaticHTTPClient struct {
- responses []staticHTTPResponse
- cur int
-}
-
-func (s *multiStaticHTTPClient) Do(context.Context, httpAction) (*http.Response, []byte, error) {
- r := s.responses[s.cur]
- s.cur++
- return &r.resp, r.body, r.err
-}
-
-func newStaticHTTPClientFactory(responses []staticHTTPResponse) httpClientFactory {
- var cur int
- return func(url.URL) httpClient {
- r := responses[cur]
- cur++
- return &staticHTTPClient{resp: r.resp, body: r.body, err: r.err}
- }
-}
-
-type fakeTransport struct {
- respchan chan *http.Response
- errchan chan error
- startCancel chan struct{}
- finishCancel chan struct{}
-}
-
-func newFakeTransport() *fakeTransport {
- return &fakeTransport{
- respchan: make(chan *http.Response, 1),
- errchan: make(chan error, 1),
- startCancel: make(chan struct{}, 1),
- finishCancel: make(chan struct{}, 1),
- }
-}
-
-func (t *fakeTransport) CancelRequest(*http.Request) {
- t.startCancel <- struct{}{}
-}
-
-type fakeAction struct{}
-
-func (a *fakeAction) HTTPRequest(url.URL) *http.Request {
- return &http.Request{}
-}
-
-func TestSimpleHTTPClientDoSuccess(t *testing.T) {
- tr := newFakeTransport()
- c := &simpleHTTPClient{transport: tr}
-
- tr.respchan <- &http.Response{
- StatusCode: http.StatusTeapot,
- Body: ioutil.NopCloser(strings.NewReader("foo")),
- }
-
- resp, body, err := c.Do(context.Background(), &fakeAction{})
- if err != nil {
- t.Fatalf("incorrect error value: want=nil got=%v", err)
- }
-
- wantCode := http.StatusTeapot
- if wantCode != resp.StatusCode {
- t.Fatalf("invalid response code: want=%d got=%d", wantCode, resp.StatusCode)
- }
-
- wantBody := []byte("foo")
- if !reflect.DeepEqual(wantBody, body) {
- t.Fatalf("invalid response body: want=%q got=%q", wantBody, body)
- }
-}
-
-func TestSimpleHTTPClientDoError(t *testing.T) {
- tr := newFakeTransport()
- c := &simpleHTTPClient{transport: tr}
-
- tr.errchan <- errors.New("fixture")
-
- _, _, err := c.Do(context.Background(), &fakeAction{})
- if err == nil {
- t.Fatalf("expected non-nil error, got nil")
- }
-}
-
-func TestSimpleHTTPClientDoCancelContext(t *testing.T) {
- tr := newFakeTransport()
- c := &simpleHTTPClient{transport: tr}
-
- tr.startCancel <- struct{}{}
- tr.finishCancel <- struct{}{}
-
- _, _, err := c.Do(context.Background(), &fakeAction{})
- if err == nil {
- t.Fatalf("expected non-nil error, got nil")
- }
-}
-
-type checkableReadCloser struct {
- io.ReadCloser
- closed bool
-}
-
-func (c *checkableReadCloser) Close() error {
- if !c.closed {
- c.closed = true
- return c.ReadCloser.Close()
- }
- return nil
-}
-
-func TestSimpleHTTPClientDoCancelContextResponseBodyClosed(t *testing.T) {
- tr := newFakeTransport()
- c := &simpleHTTPClient{transport: tr}
-
- // create an already-cancelled context
- ctx, cancel := context.WithCancel(context.Background())
- cancel()
-
- body := &checkableReadCloser{ReadCloser: ioutil.NopCloser(strings.NewReader("foo"))}
- go func() {
- // wait that simpleHTTPClient knows the context is already timed out,
- // and calls CancelRequest
- testutil.WaitSchedule()
-
- // response is returned before cancel effects
- tr.respchan <- &http.Response{Body: body}
- }()
-
- _, _, err := c.Do(ctx, &fakeAction{})
- if err == nil {
- t.Fatalf("expected non-nil error, got nil")
- }
-
- if !body.closed {
- t.Fatalf("expected closed body")
- }
-}
-
-type blockingBody struct {
- c chan struct{}
-}
-
-func (bb *blockingBody) Read(p []byte) (n int, err error) {
- <-bb.c
- return 0, errors.New("closed")
-}
-
-func (bb *blockingBody) Close() error {
- close(bb.c)
- return nil
-}
-
-func TestSimpleHTTPClientDoCancelContextResponseBodyClosedWithBlockingBody(t *testing.T) {
- tr := newFakeTransport()
- c := &simpleHTTPClient{transport: tr}
-
- ctx, cancel := context.WithCancel(context.Background())
- body := &checkableReadCloser{ReadCloser: &blockingBody{c: make(chan struct{})}}
- go func() {
- tr.respchan <- &http.Response{Body: body}
- time.Sleep(2 * time.Millisecond)
- // cancel after the body is received
- cancel()
- }()
-
- _, _, err := c.Do(ctx, &fakeAction{})
- if err != context.Canceled {
- t.Fatalf("expected %+v, got %+v", context.Canceled, err)
- }
-
- if !body.closed {
- t.Fatalf("expected closed body")
- }
-}
-
-func TestSimpleHTTPClientDoCancelContextWaitForRoundTrip(t *testing.T) {
- tr := newFakeTransport()
- c := &simpleHTTPClient{transport: tr}
-
- donechan := make(chan struct{})
- ctx, cancel := context.WithCancel(context.Background())
- go func() {
- c.Do(ctx, &fakeAction{})
- close(donechan)
- }()
-
- // This should call CancelRequest and begin the cancellation process
- cancel()
-
- select {
- case <-donechan:
- t.Fatalf("simpleHTTPClient.Do should not have exited yet")
- default:
- }
-
- tr.finishCancel <- struct{}{}
-
- select {
- case <-donechan:
- //expected behavior
- return
- case <-time.After(time.Second):
- t.Fatalf("simpleHTTPClient.Do did not exit within 1s")
- }
-}
-
-func TestSimpleHTTPClientDoHeaderTimeout(t *testing.T) {
- tr := newFakeTransport()
- tr.finishCancel <- struct{}{}
- c := &simpleHTTPClient{transport: tr, headerTimeout: time.Millisecond}
-
- errc := make(chan error, 1)
- go func() {
- _, _, err := c.Do(context.Background(), &fakeAction{})
- errc <- err
- }()
-
- select {
- case err := <-errc:
- if err == nil {
- t.Fatalf("expected non-nil error, got nil")
- }
- case <-time.After(time.Second):
- t.Fatalf("unexpected timeout when waiting for the test to finish")
- }
-}
-
-func TestHTTPClusterClientDo(t *testing.T) {
- fakeErr := errors.New("fake!")
- fakeURL := url.URL{}
- tests := []struct {
- client *httpClusterClient
- ctx context.Context
-
- wantCode int
- wantErr error
- wantPinned int
- }{
- // first good response short-circuits Do
- {
- client: &httpClusterClient{
- endpoints: []url.URL{fakeURL, fakeURL},
- clientFactory: newStaticHTTPClientFactory(
- []staticHTTPResponse{
- {resp: http.Response{StatusCode: http.StatusTeapot}},
- {err: fakeErr},
- },
- ),
- rand: rand.New(rand.NewSource(0)),
- },
- wantCode: http.StatusTeapot,
- },
-
- // fall through to good endpoint if err is arbitrary
- {
- client: &httpClusterClient{
- endpoints: []url.URL{fakeURL, fakeURL},
- clientFactory: newStaticHTTPClientFactory(
- []staticHTTPResponse{
- {err: fakeErr},
- {resp: http.Response{StatusCode: http.StatusTeapot}},
- },
- ),
- rand: rand.New(rand.NewSource(0)),
- },
- wantCode: http.StatusTeapot,
- wantPinned: 1,
- },
-
- // context.Canceled short-circuits Do
- {
- client: &httpClusterClient{
- endpoints: []url.URL{fakeURL, fakeURL},
- clientFactory: newStaticHTTPClientFactory(
- []staticHTTPResponse{
- {err: context.Canceled},
- {resp: http.Response{StatusCode: http.StatusTeapot}},
- },
- ),
- rand: rand.New(rand.NewSource(0)),
- },
- wantErr: context.Canceled,
- },
-
- // return err if there are no endpoints
- {
- client: &httpClusterClient{
- endpoints: []url.URL{},
- clientFactory: newHTTPClientFactory(nil, nil, 0),
- rand: rand.New(rand.NewSource(0)),
- },
- wantErr: ErrNoEndpoints,
- },
-
- // return err if all endpoints return arbitrary errors
- {
- client: &httpClusterClient{
- endpoints: []url.URL{fakeURL, fakeURL},
- clientFactory: newStaticHTTPClientFactory(
- []staticHTTPResponse{
- {err: fakeErr},
- {err: fakeErr},
- },
- ),
- rand: rand.New(rand.NewSource(0)),
- },
- wantErr: &ClusterError{Errors: []error{fakeErr, fakeErr}},
- },
-
- // 500-level errors cause Do to fallthrough to next endpoint
- {
- client: &httpClusterClient{
- endpoints: []url.URL{fakeURL, fakeURL},
- clientFactory: newStaticHTTPClientFactory(
- []staticHTTPResponse{
- {resp: http.Response{StatusCode: http.StatusBadGateway}},
- {resp: http.Response{StatusCode: http.StatusTeapot}},
- },
- ),
- rand: rand.New(rand.NewSource(0)),
- },
- wantCode: http.StatusTeapot,
- wantPinned: 1,
- },
-
- // 500-level errors cause one shot Do to fallthrough to next endpoint
- {
- client: &httpClusterClient{
- endpoints: []url.URL{fakeURL, fakeURL},
- clientFactory: newStaticHTTPClientFactory(
- []staticHTTPResponse{
- {resp: http.Response{StatusCode: http.StatusBadGateway}},
- {resp: http.Response{StatusCode: http.StatusTeapot}},
- },
- ),
- rand: rand.New(rand.NewSource(0)),
- },
- ctx: context.WithValue(context.Background(), &oneShotCtxValue, &oneShotCtxValue),
- wantErr: fmt.Errorf("client: etcd member returns server error [Bad Gateway]"),
- wantPinned: 1,
- },
- }
-
- for i, tt := range tests {
- if tt.ctx == nil {
- tt.ctx = context.Background()
- }
- resp, _, err := tt.client.Do(tt.ctx, nil)
- if (tt.wantErr == nil && tt.wantErr != err) || (tt.wantErr != nil && tt.wantErr.Error() != err.Error()) {
- t.Errorf("#%d: got err=%v, want=%v", i, err, tt.wantErr)
- continue
- }
-
- if resp == nil {
- if tt.wantCode != 0 {
- t.Errorf("#%d: resp is nil, want=%d", i, tt.wantCode)
- continue
- }
- } else if resp.StatusCode != tt.wantCode {
- t.Errorf("#%d: resp code=%d, want=%d", i, resp.StatusCode, tt.wantCode)
- continue
- }
-
- if tt.client.pinned != tt.wantPinned {
- t.Errorf("#%d: pinned=%d, want=%d", i, tt.client.pinned, tt.wantPinned)
- }
- }
-}
-
-func TestHTTPClusterClientDoDeadlineExceedContext(t *testing.T) {
- fakeURL := url.URL{}
- tr := newFakeTransport()
- tr.finishCancel <- struct{}{}
- c := &httpClusterClient{
- clientFactory: newHTTPClientFactory(tr, DefaultCheckRedirect, 0),
- endpoints: []url.URL{fakeURL},
- }
-
- errc := make(chan error, 1)
- go func() {
- ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
- defer cancel()
- _, _, err := c.Do(ctx, &fakeAction{})
- errc <- err
- }()
-
- select {
- case err := <-errc:
- if err != context.DeadlineExceeded {
- t.Errorf("err = %+v, want %+v", err, context.DeadlineExceeded)
- }
- case <-time.After(time.Second):
- t.Fatalf("unexpected timeout when waiting for request to deadline exceed")
- }
-}
-
-type fakeCancelContext struct{}
-
-var errFakeCancelContext = errors.New("fake context canceled")
-
-func (f fakeCancelContext) Deadline() (time.Time, bool) { return time.Time{}, false }
-func (f fakeCancelContext) Done() <-chan struct{} {
- d := make(chan struct{}, 1)
- d <- struct{}{}
- return d
-}
-func (f fakeCancelContext) Err() error { return errFakeCancelContext }
-func (f fakeCancelContext) Value(key interface{}) interface{} { return 1 }
-
-func withTimeout(parent context.Context, timeout time.Duration) (
- ctx context.Context,
- cancel context.CancelFunc) {
- ctx = parent
- cancel = func() {
- ctx = nil
- }
- return ctx, cancel
-}
-
-func TestHTTPClusterClientDoCanceledContext(t *testing.T) {
- fakeURL := url.URL{}
- tr := newFakeTransport()
- tr.finishCancel <- struct{}{}
- c := &httpClusterClient{
- clientFactory: newHTTPClientFactory(tr, DefaultCheckRedirect, 0),
- endpoints: []url.URL{fakeURL},
- }
-
- errc := make(chan error, 1)
- go func() {
- ctx, cancel := withTimeout(fakeCancelContext{}, time.Millisecond)
- cancel()
- _, _, err := c.Do(ctx, &fakeAction{})
- errc <- err
- }()
-
- select {
- case err := <-errc:
- if err != errFakeCancelContext {
- t.Errorf("err = %+v, want %+v", err, errFakeCancelContext)
- }
- case <-time.After(time.Second):
- t.Fatalf("unexpected timeout when waiting for request to fake context canceled")
- }
-}
-
-func TestRedirectedHTTPAction(t *testing.T) {
- act := &redirectedHTTPAction{
- action: &staticHTTPAction{
- request: http.Request{
- Method: "DELETE",
- URL: &url.URL{
- Scheme: "https",
- Host: "foo.example.com",
- Path: "/ping",
- },
- },
- },
- location: url.URL{
- Scheme: "https",
- Host: "bar.example.com",
- Path: "/pong",
- },
- }
-
- want := &http.Request{
- Method: "DELETE",
- URL: &url.URL{
- Scheme: "https",
- Host: "bar.example.com",
- Path: "/pong",
- },
- }
- got := act.HTTPRequest(url.URL{Scheme: "http", Host: "baz.example.com", Path: "/pang"})
-
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("HTTPRequest is %#v, want %#v", want, got)
- }
-}
-
-func TestRedirectFollowingHTTPClient(t *testing.T) {
- tests := []struct {
- checkRedirect CheckRedirectFunc
- client httpClient
- wantCode int
- wantErr error
- }{
- // errors bubbled up
- {
- checkRedirect: func(int) error { return ErrTooManyRedirects },
- client: &multiStaticHTTPClient{
- responses: []staticHTTPResponse{
- {
- err: errors.New("fail!"),
- },
- },
- },
- wantErr: errors.New("fail!"),
- },
-
- // no need to follow redirect if none given
- {
- checkRedirect: func(int) error { return ErrTooManyRedirects },
- client: &multiStaticHTTPClient{
- responses: []staticHTTPResponse{
- {
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
- },
- },
- wantCode: http.StatusTeapot,
- },
-
- // redirects if less than max
- {
- checkRedirect: func(via int) error {
- if via >= 2 {
- return ErrTooManyRedirects
- }
- return nil
- },
- client: &multiStaticHTTPClient{
- responses: []staticHTTPResponse{
- {
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- Header: http.Header{"Location": []string{"http://example.com"}},
- },
- },
- {
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
- },
- },
- wantCode: http.StatusTeapot,
- },
-
- // succeed after reaching max redirects
- {
- checkRedirect: func(via int) error {
- if via >= 3 {
- return ErrTooManyRedirects
- }
- return nil
- },
- client: &multiStaticHTTPClient{
- responses: []staticHTTPResponse{
- {
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- Header: http.Header{"Location": []string{"http://example.com"}},
- },
- },
- {
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- Header: http.Header{"Location": []string{"http://example.com"}},
- },
- },
- {
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
- },
- },
- wantCode: http.StatusTeapot,
- },
-
- // fail if too many redirects
- {
- checkRedirect: func(via int) error {
- if via >= 2 {
- return ErrTooManyRedirects
- }
- return nil
- },
- client: &multiStaticHTTPClient{
- responses: []staticHTTPResponse{
- {
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- Header: http.Header{"Location": []string{"http://example.com"}},
- },
- },
- {
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- Header: http.Header{"Location": []string{"http://example.com"}},
- },
- },
- {
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
- },
- },
- wantErr: ErrTooManyRedirects,
- },
-
- // fail if Location header not set
- {
- checkRedirect: func(int) error { return ErrTooManyRedirects },
- client: &multiStaticHTTPClient{
- responses: []staticHTTPResponse{
- {
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- },
- },
- },
- },
- wantErr: errors.New("location header not set"),
- },
-
- // fail if Location header is invalid
- {
- checkRedirect: func(int) error { return ErrTooManyRedirects },
- client: &multiStaticHTTPClient{
- responses: []staticHTTPResponse{
- {
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- Header: http.Header{"Location": []string{":"}},
- },
- },
- },
- },
- wantErr: errors.New("location header not valid URL: :"),
- },
-
- // fail if redirects checked way too many times
- {
- checkRedirect: func(int) error { return nil },
- client: &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusTemporaryRedirect,
- Header: http.Header{"Location": []string{"http://example.com"}},
- },
- },
- wantErr: errTooManyRedirectChecks,
- },
- }
-
- for i, tt := range tests {
- client := &redirectFollowingHTTPClient{client: tt.client, checkRedirect: tt.checkRedirect}
- resp, _, err := client.Do(context.Background(), nil)
- if (tt.wantErr == nil && tt.wantErr != err) || (tt.wantErr != nil && tt.wantErr.Error() != err.Error()) {
- t.Errorf("#%d: got err=%v, want=%v", i, err, tt.wantErr)
- continue
- }
-
- if resp == nil {
- if tt.wantCode != 0 {
- t.Errorf("#%d: resp is nil, want=%d", i, tt.wantCode)
- }
- continue
- }
-
- if resp.StatusCode != tt.wantCode {
- t.Errorf("#%d: resp code=%d, want=%d", i, resp.StatusCode, tt.wantCode)
- continue
- }
- }
-}
-
-func TestDefaultCheckRedirect(t *testing.T) {
- tests := []struct {
- num int
- err error
- }{
- {0, nil},
- {5, nil},
- {10, nil},
- {11, ErrTooManyRedirects},
- {29, ErrTooManyRedirects},
- }
-
- for i, tt := range tests {
- err := DefaultCheckRedirect(tt.num)
- if !reflect.DeepEqual(tt.err, err) {
- t.Errorf("#%d: want=%#v got=%#v", i, tt.err, err)
- }
- }
-}
-
-func TestHTTPClusterClientSync(t *testing.T) {
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- }
- err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"})
- if err != nil {
- t.Fatalf("unexpected error during setup: %#v", err)
- }
-
- want := []string{"http://127.0.0.1:2379"}
- got := hc.Endpoints()
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("incorrect endpoints: want=%#v got=%#v", want, got)
- }
-
- err = hc.Sync(context.Background())
- if err != nil {
- t.Fatalf("unexpected error during Sync: %#v", err)
- }
-
- want = []string{"http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002", "http://127.0.0.1:4003"}
- got = hc.Endpoints()
- sort.Strings(got)
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("incorrect endpoints post-Sync: want=%#v got=%#v", want, got)
- }
-
- err = hc.SetEndpoints([]string{"http://127.0.0.1:4009"})
- if err != nil {
- t.Fatalf("unexpected error during reset: %#v", err)
- }
-
- want = []string{"http://127.0.0.1:4009"}
- got = hc.Endpoints()
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("incorrect endpoints post-reset: want=%#v got=%#v", want, got)
- }
-}
-
-func TestHTTPClusterClientSyncFail(t *testing.T) {
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {err: errors.New("fail!")},
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- }
- err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"})
- if err != nil {
- t.Fatalf("unexpected error during setup: %#v", err)
- }
-
- want := []string{"http://127.0.0.1:2379"}
- got := hc.Endpoints()
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("incorrect endpoints: want=%#v got=%#v", want, got)
- }
-
- err = hc.Sync(context.Background())
- if err == nil {
- t.Fatalf("got nil error during Sync")
- }
-
- got = hc.Endpoints()
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("incorrect endpoints after failed Sync: want=%#v got=%#v", want, got)
- }
-}
-
-func TestHTTPClusterClientAutoSyncCancelContext(t *testing.T) {
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- }
- err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"})
- if err != nil {
- t.Fatalf("unexpected error during setup: %#v", err)
- }
- ctx, cancel := context.WithCancel(context.Background())
- cancel()
-
- err = hc.AutoSync(ctx, time.Hour)
- if err != context.Canceled {
- t.Fatalf("incorrect error value: want=%v got=%v", context.Canceled, err)
- }
-}
-
-func TestHTTPClusterClientAutoSyncFail(t *testing.T) {
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {err: errors.New("fail!")},
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- }
- err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"})
- if err != nil {
- t.Fatalf("unexpected error during setup: %#v", err)
- }
-
- err = hc.AutoSync(context.Background(), time.Hour)
- if !strings.HasPrefix(err.Error(), ErrClusterUnavailable.Error()) {
- t.Fatalf("incorrect error value: want=%v got=%v", ErrClusterUnavailable, err)
- }
-}
-
-func TestHTTPClusterClientGetVersion(t *testing.T) {
- body := []byte(`{"etcdserver":"2.3.2","etcdcluster":"2.3.0"}`)
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Length": []string{"44"}}},
- body: body,
- },
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- }
- err := hc.SetEndpoints([]string{"http://127.0.0.1:4003", "http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002"})
- if err != nil {
- t.Fatalf("unexpected error during setup: %#v", err)
- }
-
- actual, err := hc.GetVersion(context.Background())
- if err != nil {
- t.Errorf("non-nil error: %#v", err)
- }
- expected := version.Versions{Server: "2.3.2", Cluster: "2.3.0"}
- if !reflect.DeepEqual(&expected, actual) {
- t.Errorf("incorrect Response: want=%#v got=%#v", expected, actual)
- }
-}
-
-// TestHTTPClusterClientSyncPinEndpoint tests that Sync() pins the endpoint when
-// it gets the exactly same member list as before.
-func TestHTTPClusterClientSyncPinEndpoint(t *testing.T) {
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- }
- err := hc.SetEndpoints([]string{"http://127.0.0.1:4003", "http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002"})
- if err != nil {
- t.Fatalf("unexpected error during setup: %#v", err)
- }
- pinnedEndpoint := hc.endpoints[hc.pinned]
-
- for i := 0; i < 3; i++ {
- err = hc.Sync(context.Background())
- if err != nil {
- t.Fatalf("#%d: unexpected error during Sync: %#v", i, err)
- }
-
- if g := hc.endpoints[hc.pinned]; g != pinnedEndpoint {
- t.Errorf("#%d: pinned endpoint = %v, want %v", i, g, pinnedEndpoint)
- }
- }
-}
-
-// TestHTTPClusterClientSyncUnpinEndpoint tests that Sync() unpins the endpoint when
-// it gets a different member list than before.
-func TestHTTPClusterClientSyncUnpinEndpoint(t *testing.T) {
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- }
- err := hc.SetEndpoints([]string{"http://127.0.0.1:4003", "http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002"})
- if err != nil {
- t.Fatalf("unexpected error during setup: %#v", err)
- }
- wants := []string{"http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002"}
-
- for i := 0; i < 3; i++ {
- err = hc.Sync(context.Background())
- if err != nil {
- t.Fatalf("#%d: unexpected error during Sync: %#v", i, err)
- }
-
- if g := hc.endpoints[hc.pinned]; g.String() != wants[i] {
- t.Errorf("#%d: pinned endpoint = %v, want %v", i, g, wants[i])
- }
- }
-}
-
-// TestHTTPClusterClientSyncPinLeaderEndpoint tests that Sync() pins the leader
-// when the selection mode is EndpointSelectionPrioritizeLeader
-func TestHTTPClusterClientSyncPinLeaderEndpoint(t *testing.T) {
- cf := newStaticHTTPClientFactory([]staticHTTPResponse{
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]}`),
- },
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- {
- resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}},
- body: []byte(`{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}`),
- },
- })
-
- hc := &httpClusterClient{
- clientFactory: cf,
- rand: rand.New(rand.NewSource(0)),
- selectionMode: EndpointSelectionPrioritizeLeader,
- endpoints: []url.URL{{}}, // Need somewhere to pretend to send to initially
- }
-
- wants := []string{"http://127.0.0.1:4003", "http://127.0.0.1:4002"}
-
- for i, want := range wants {
- err := hc.Sync(context.Background())
- if err != nil {
- t.Fatalf("#%d: unexpected error during Sync: %#v", i, err)
- }
-
- pinned := hc.endpoints[hc.pinned].String()
- if pinned != want {
- t.Errorf("#%d: pinned endpoint = %v, want %v", i, pinned, want)
- }
- }
-}
-
-func TestHTTPClusterClientResetFail(t *testing.T) {
- tests := [][]string{
- // need at least one endpoint
- {},
-
- // urls must be valid
- {":"},
- }
-
- for i, tt := range tests {
- hc := &httpClusterClient{rand: rand.New(rand.NewSource(0))}
- err := hc.SetEndpoints(tt)
- if err == nil {
- t.Errorf("#%d: expected non-nil error", i)
- }
- }
-}
-
-func TestHTTPClusterClientResetPinRandom(t *testing.T) {
- round := 2000
- pinNum := 0
- for i := 0; i < round; i++ {
- hc := &httpClusterClient{rand: rand.New(rand.NewSource(int64(i)))}
- err := hc.SetEndpoints([]string{"http://127.0.0.1:4001", "http://127.0.0.1:4002", "http://127.0.0.1:4003"})
- if err != nil {
- t.Fatalf("#%d: reset error (%v)", i, err)
- }
- if hc.endpoints[hc.pinned].String() == "http://127.0.0.1:4001" {
- pinNum++
- }
- }
-
- min := 1.0/3.0 - 0.05
- max := 1.0/3.0 + 0.05
- if ratio := float64(pinNum) / float64(round); ratio > max || ratio < min {
- t.Errorf("pinned ratio = %v, want [%v, %v]", ratio, min, max)
- }
-}
diff --git a/etcd-fix/client/v2/cluster_error.go b/etcd-fix/client/v2/cluster_error.go
deleted file mode 100644
index 34618cd..0000000
--- a/etcd-fix/client/v2/cluster_error.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import "fmt"
-
-type ClusterError struct {
- Errors []error
-}
-
-func (ce *ClusterError) Error() string {
- s := ErrClusterUnavailable.Error()
- for i, e := range ce.Errors {
- s += fmt.Sprintf("; error #%d: %s\n", i, e)
- }
- return s
-}
-
-func (ce *ClusterError) Detail() string {
- s := ""
- for i, e := range ce.Errors {
- s += fmt.Sprintf("error #%d: %s\n", i, e)
- }
- return s
-}
diff --git a/etcd-fix/client/v2/curl.go b/etcd-fix/client/v2/curl.go
deleted file mode 100644
index c8bc9fb..0000000
--- a/etcd-fix/client/v2/curl.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "bytes"
- "fmt"
- "io/ioutil"
- "net/http"
- "os"
-)
-
-var (
- cURLDebug = false
-)
-
-func EnablecURLDebug() {
- cURLDebug = true
-}
-
-func DisablecURLDebug() {
- cURLDebug = false
-}
-
-// printcURL prints the cURL equivalent request to stderr.
-// It returns an error if the body of the request cannot
-// be read.
-// The caller MUST cancel the request if there is an error.
-func printcURL(req *http.Request) error {
- if !cURLDebug {
- return nil
- }
- var (
- command string
- b []byte
- err error
- )
-
- if req.URL != nil {
- command = fmt.Sprintf("curl -X %s %s", req.Method, req.URL.String())
- }
-
- if req.Body != nil {
- b, err = ioutil.ReadAll(req.Body)
- if err != nil {
- return err
- }
- command += fmt.Sprintf(" -d %q", string(b))
- }
-
- fmt.Fprintf(os.Stderr, "cURL Command: %s\n", command)
-
- // reset body
- body := bytes.NewBuffer(b)
- req.Body = ioutil.NopCloser(body)
-
- return nil
-}
diff --git a/etcd-fix/client/v2/discover.go b/etcd-fix/client/v2/discover.go
deleted file mode 100644
index 7209304..0000000
--- a/etcd-fix/client/v2/discover.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "go.etcd.io/etcd/pkg/v3/srv"
-)
-
-// Discoverer is an interface that wraps the Discover method.
-type Discoverer interface {
- // Discover looks up the etcd servers for the domain.
- Discover(domain string, serviceName string) ([]string, error)
-}
-
-type srvDiscover struct{}
-
-// NewSRVDiscover constructs a new Discoverer that uses the stdlib to lookup SRV records.
-func NewSRVDiscover() Discoverer {
- return &srvDiscover{}
-}
-
-func (d *srvDiscover) Discover(domain string, serviceName string) ([]string, error) {
- srvs, err := srv.GetClient("etcd-client", domain, serviceName)
- if err != nil {
- return nil, err
- }
- return srvs.Endpoints, nil
-}
diff --git a/etcd-fix/client/v2/doc.go b/etcd-fix/client/v2/doc.go
deleted file mode 100644
index 5250758..0000000
--- a/etcd-fix/client/v2/doc.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/*
-Package client provides bindings for the etcd APIs.
-
-Create a Config and exchange it for a Client:
-
- import (
- "net/http"
- "context"
-
- "go.etcd.io/etcd/client/v2"
- )
-
- cfg := client.Config{
- Endpoints: []string{"http://127.0.0.1:2379"},
- Transport: DefaultTransport,
- }
-
- c, err := client.New(cfg)
- if err != nil {
- // handle error
- }
-
-Clients are safe for concurrent use by multiple goroutines.
-
-Create a KeysAPI using the Client, then use it to interact with etcd:
-
- kAPI := client.NewKeysAPI(c)
-
- // create a new key /foo with the value "bar"
- _, err = kAPI.Create(context.Background(), "/foo", "bar")
- if err != nil {
- // handle error
- }
-
- // delete the newly created key only if the value is still "bar"
- _, err = kAPI.Delete(context.Background(), "/foo", &DeleteOptions{PrevValue: "bar"})
- if err != nil {
- // handle error
- }
-
-Use a custom context to set timeouts on your operations:
-
- import "time"
-
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
-
- // set a new key, ignoring its previous state
- _, err := kAPI.Set(ctx, "/ping", "pong", nil)
- if err != nil {
- if err == context.DeadlineExceeded {
- // request took longer than 5s
- } else {
- // handle error
- }
- }
-
-*/
-package client
diff --git a/etcd-fix/client/v2/example_keys_test.go b/etcd-fix/client/v2/example_keys_test.go
deleted file mode 120000
index 1e4520d..0000000
--- a/etcd-fix/client/v2/example_keys_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/client/examples/example_keys_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v2/fake_transport_test.go b/etcd-fix/client/v2/fake_transport_test.go
deleted file mode 100644
index 7a725c1..0000000
--- a/etcd-fix/client/v2/fake_transport_test.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "errors"
- "net/http"
-)
-
-func (t *fakeTransport) RoundTrip(req *http.Request) (*http.Response, error) {
- select {
- case resp := <-t.respchan:
- return resp, nil
- case err := <-t.errchan:
- return nil, err
- case <-t.startCancel:
- case <-req.Cancel:
- }
- select {
- // this simulates that the request is finished before cancel effects
- case resp := <-t.respchan:
- return resp, nil
- // wait on finishCancel to simulate taking some amount of
- // time while calling CancelRequest
- case <-t.finishCancel:
- return nil, errors.New("cancelled")
- }
-}
diff --git a/etcd-fix/client/v2/go.mod b/etcd-fix/client/v2/go.mod
deleted file mode 100644
index 0c12a87..0000000
--- a/etcd-fix/client/v2/go.mod
+++ /dev/null
@@ -1,23 +0,0 @@
-module go.etcd.io/etcd/client/v2
-
-go 1.15
-
-require (
- github.com/json-iterator/go v1.1.10
- github.com/modern-go/reflect2 v1.0.1
- go.etcd.io/etcd/api/v3 v3.5.0-pre
- go.etcd.io/etcd/pkg/v3 v3.5.0-pre
-)
-
-replace (
- go.etcd.io/etcd/api/v3 => ../../api
- go.etcd.io/etcd/pkg/v3 => ../../pkg
-)
-
-// Bad imports are sometimes causing attempts to pull that code.
-// This makes the error more explicit.
-replace (
- go.etcd.io/etcd => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/etcd/v3 => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/tests/v3 => ./FORBIDDEN_DEPENDENCY
-)
diff --git a/etcd-fix/client/v2/go.sum b/etcd-fix/client/v2/go.sum
deleted file mode 100644
index 37950a5..0000000
--- a/etcd-fix/client/v2/go.sum
+++ /dev/null
@@ -1,117 +0,0 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
-github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
-github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
diff --git a/etcd-fix/client/v2/json.go b/etcd-fix/client/v2/json.go
deleted file mode 100644
index 97cdbcd..0000000
--- a/etcd-fix/client/v2/json.go
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2019 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "github.com/json-iterator/go"
- "github.com/modern-go/reflect2"
- "strconv"
- "unsafe"
-)
-
-type customNumberExtension struct {
- jsoniter.DummyExtension
-}
-
-func (cne *customNumberExtension) CreateDecoder(typ reflect2.Type) jsoniter.ValDecoder {
- if typ.String() == "interface {}" {
- return customNumberDecoder{}
- }
- return nil
-}
-
-type customNumberDecoder struct {
-}
-
-func (customNumberDecoder) Decode(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
- switch iter.WhatIsNext() {
- case jsoniter.NumberValue:
- var number jsoniter.Number
- iter.ReadVal(&number)
- i64, err := strconv.ParseInt(string(number), 10, 64)
- if err == nil {
- *(*interface{})(ptr) = i64
- return
- }
- f64, err := strconv.ParseFloat(string(number), 64)
- if err == nil {
- *(*interface{})(ptr) = f64
- return
- }
- iter.ReportError("DecodeNumber", err.Error())
- default:
- *(*interface{})(ptr) = iter.Read()
- }
-}
-
-// caseSensitiveJsonIterator returns a jsoniterator API that's configured to be
-// case-sensitive when unmarshalling, and otherwise compatible with
-// the encoding/json standard library.
-func caseSensitiveJsonIterator() jsoniter.API {
- config := jsoniter.Config{
- EscapeHTML: true,
- SortMapKeys: true,
- ValidateJsonRawMessage: true,
- CaseSensitive: true,
- }.Froze()
- // Force jsoniter to decode number to interface{} via int64/float64, if possible.
- config.RegisterExtension(&customNumberExtension{})
- return config
-}
diff --git a/etcd-fix/client/v2/keys.go b/etcd-fix/client/v2/keys.go
deleted file mode 100644
index f98368b..0000000
--- a/etcd-fix/client/v2/keys.go
+++ /dev/null
@@ -1,679 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "go.etcd.io/etcd/pkg/v3/pathutil"
- "net/http"
- "net/url"
- "strconv"
- "strings"
- "time"
-)
-
-const (
- ErrorCodeKeyNotFound = 100
- ErrorCodeTestFailed = 101
- ErrorCodeNotFile = 102
- ErrorCodeNotDir = 104
- ErrorCodeNodeExist = 105
- ErrorCodeRootROnly = 107
- ErrorCodeDirNotEmpty = 108
- ErrorCodeUnauthorized = 110
-
- ErrorCodePrevValueRequired = 201
- ErrorCodeTTLNaN = 202
- ErrorCodeIndexNaN = 203
- ErrorCodeInvalidField = 209
- ErrorCodeInvalidForm = 210
-
- ErrorCodeRaftInternal = 300
- ErrorCodeLeaderElect = 301
-
- ErrorCodeWatcherCleared = 400
- ErrorCodeEventIndexCleared = 401
-)
-
-type Error struct {
- Code int `json:"errorCode"`
- Message string `json:"message"`
- Cause string `json:"cause"`
- Index uint64 `json:"index"`
-}
-
-func (e Error) Error() string {
- return fmt.Sprintf("%v: %v (%v) [%v]", e.Code, e.Message, e.Cause, e.Index)
-}
-
-var (
- ErrInvalidJSON = errors.New("client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint")
- ErrEmptyBody = errors.New("client: response body is empty")
-)
-
-// PrevExistType is used to define an existence condition when setting
-// or deleting Nodes.
-type PrevExistType string
-
-const (
- PrevIgnore = PrevExistType("")
- PrevExist = PrevExistType("true")
- PrevNoExist = PrevExistType("false")
-)
-
-var (
- defaultV2KeysPrefix = "/v2/keys"
-)
-
-// NewKeysAPI builds a KeysAPI that interacts with etcd's key-value
-// API over HTTP.
-func NewKeysAPI(c Client) KeysAPI {
- return NewKeysAPIWithPrefix(c, defaultV2KeysPrefix)
-}
-
-// NewKeysAPIWithPrefix acts like NewKeysAPI, but allows the caller
-// to provide a custom base URL path. This should only be used in
-// very rare cases.
-func NewKeysAPIWithPrefix(c Client, p string) KeysAPI {
- return &httpKeysAPI{
- client: c,
- prefix: p,
- }
-}
-
-type KeysAPI interface {
- // Get retrieves a set of Nodes from etcd
- Get(ctx context.Context, key string, opts *GetOptions) (*Response, error)
-
- // Set assigns a new value to a Node identified by a given key. The caller
- // may define a set of conditions in the SetOptions. If SetOptions.Dir=true
- // then value is ignored.
- Set(ctx context.Context, key, value string, opts *SetOptions) (*Response, error)
-
- // Delete removes a Node identified by the given key, optionally destroying
- // all of its children as well. The caller may define a set of required
- // conditions in an DeleteOptions object.
- Delete(ctx context.Context, key string, opts *DeleteOptions) (*Response, error)
-
- // Create is an alias for Set w/ PrevExist=false
- Create(ctx context.Context, key, value string) (*Response, error)
-
- // CreateInOrder is used to atomically create in-order keys within the given directory.
- CreateInOrder(ctx context.Context, dir, value string, opts *CreateInOrderOptions) (*Response, error)
-
- // Update is an alias for Set w/ PrevExist=true
- Update(ctx context.Context, key, value string) (*Response, error)
-
- // Watcher builds a new Watcher targeted at a specific Node identified
- // by the given key. The Watcher may be configured at creation time
- // through a WatcherOptions object. The returned Watcher is designed
- // to emit events that happen to a Node, and optionally to its children.
- Watcher(key string, opts *WatcherOptions) Watcher
-}
-
-type WatcherOptions struct {
- // AfterIndex defines the index after-which the Watcher should
- // start emitting events. For example, if a value of 5 is
- // provided, the first event will have an index >= 6.
- //
- // Setting AfterIndex to 0 (default) means that the Watcher
- // should start watching for events starting at the current
- // index, whatever that may be.
- AfterIndex uint64
-
- // Recursive specifies whether or not the Watcher should emit
- // events that occur in children of the given keyspace. If set
- // to false (default), events will be limited to those that
- // occur for the exact key.
- Recursive bool
-}
-
-type CreateInOrderOptions struct {
- // TTL defines a period of time after-which the Node should
- // expire and no longer exist. Values <= 0 are ignored. Given
- // that the zero-value is ignored, TTL cannot be used to set
- // a TTL of 0.
- TTL time.Duration
-}
-
-type SetOptions struct {
- // PrevValue specifies what the current value of the Node must
- // be in order for the Set operation to succeed.
- //
- // Leaving this field empty means that the caller wishes to
- // ignore the current value of the Node. This cannot be used
- // to compare the Node's current value to an empty string.
- //
- // PrevValue is ignored if Dir=true
- PrevValue string
-
- // PrevIndex indicates what the current ModifiedIndex of the
- // Node must be in order for the Set operation to succeed.
- //
- // If PrevIndex is set to 0 (default), no comparison is made.
- PrevIndex uint64
-
- // PrevExist specifies whether the Node must currently exist
- // (PrevExist) or not (PrevNoExist). If the caller does not
- // care about existence, set PrevExist to PrevIgnore, or simply
- // leave it unset.
- PrevExist PrevExistType
-
- // TTL defines a period of time after-which the Node should
- // expire and no longer exist. Values <= 0 are ignored. Given
- // that the zero-value is ignored, TTL cannot be used to set
- // a TTL of 0.
- TTL time.Duration
-
- // Refresh set to true means a TTL value can be updated
- // without firing a watch or changing the node value. A
- // value must not be provided when refreshing a key.
- Refresh bool
-
- // Dir specifies whether or not this Node should be created as a directory.
- Dir bool
-
- // NoValueOnSuccess specifies whether the response contains the current value of the Node.
- // If set, the response will only contain the current value when the request fails.
- NoValueOnSuccess bool
-}
-
-type GetOptions struct {
- // Recursive defines whether or not all children of the Node
- // should be returned.
- Recursive bool
-
- // Sort instructs the server whether or not to sort the Nodes.
- // If true, the Nodes are sorted alphabetically by key in
- // ascending order (A to z). If false (default), the Nodes will
- // not be sorted and the ordering used should not be considered
- // predictable.
- Sort bool
-
- // Quorum specifies whether it gets the latest committed value that
- // has been applied in quorum of members, which ensures external
- // consistency (or linearizability).
- Quorum bool
-}
-
-type DeleteOptions struct {
- // PrevValue specifies what the current value of the Node must
- // be in order for the Delete operation to succeed.
- //
- // Leaving this field empty means that the caller wishes to
- // ignore the current value of the Node. This cannot be used
- // to compare the Node's current value to an empty string.
- PrevValue string
-
- // PrevIndex indicates what the current ModifiedIndex of the
- // Node must be in order for the Delete operation to succeed.
- //
- // If PrevIndex is set to 0 (default), no comparison is made.
- PrevIndex uint64
-
- // Recursive defines whether or not all children of the Node
- // should be deleted. If set to true, all children of the Node
- // identified by the given key will be deleted. If left unset
- // or explicitly set to false, only a single Node will be
- // deleted.
- Recursive bool
-
- // Dir specifies whether or not this Node should be removed as a directory.
- Dir bool
-}
-
-type Watcher interface {
- // Next blocks until an etcd event occurs, then returns a Response
- // representing that event. The behavior of Next depends on the
- // WatcherOptions used to construct the Watcher. Next is designed to
- // be called repeatedly, each time blocking until a subsequent event
- // is available.
- //
- // If the provided context is cancelled, Next will return a non-nil
- // error. Any other failures encountered while waiting for the next
- // event (connection issues, deserialization failures, etc) will
- // also result in a non-nil error.
- Next(context.Context) (*Response, error)
-}
-
-type Response struct {
- // Action is the name of the operation that occurred. Possible values
- // include get, set, delete, update, create, compareAndSwap,
- // compareAndDelete and expire.
- Action string `json:"action"`
-
- // Node represents the state of the relevant etcd Node.
- Node *Node `json:"node"`
-
- // PrevNode represents the previous state of the Node. PrevNode is non-nil
- // only if the Node existed before the action occurred and the action
- // caused a change to the Node.
- PrevNode *Node `json:"prevNode"`
-
- // Index holds the cluster-level index at the time the Response was generated.
- // This index is not tied to the Node(s) contained in this Response.
- Index uint64 `json:"-"`
-
- // ClusterID holds the cluster-level ID reported by the server. This
- // should be different for different etcd clusters.
- ClusterID string `json:"-"`
-}
-
-type Node struct {
- // Key represents the unique location of this Node (e.g. "/foo/bar").
- Key string `json:"key"`
-
- // Dir reports whether node describes a directory.
- Dir bool `json:"dir,omitempty"`
-
- // Value is the current data stored on this Node. If this Node
- // is a directory, Value will be empty.
- Value string `json:"value"`
-
- // Nodes holds the children of this Node, only if this Node is a directory.
- // This slice of will be arbitrarily deep (children, grandchildren, great-
- // grandchildren, etc.) if a recursive Get or Watch request were made.
- Nodes Nodes `json:"nodes"`
-
- // CreatedIndex is the etcd index at-which this Node was created.
- CreatedIndex uint64 `json:"createdIndex"`
-
- // ModifiedIndex is the etcd index at-which this Node was last modified.
- ModifiedIndex uint64 `json:"modifiedIndex"`
-
- // Expiration is the server side expiration time of the key.
- Expiration *time.Time `json:"expiration,omitempty"`
-
- // TTL is the time to live of the key in second.
- TTL int64 `json:"ttl,omitempty"`
-}
-
-func (n *Node) String() string {
- return fmt.Sprintf("{Key: %s, CreatedIndex: %d, ModifiedIndex: %d, TTL: %d}", n.Key, n.CreatedIndex, n.ModifiedIndex, n.TTL)
-}
-
-// TTLDuration returns the Node's TTL as a time.Duration object
-func (n *Node) TTLDuration() time.Duration {
- return time.Duration(n.TTL) * time.Second
-}
-
-type Nodes []*Node
-
-// interfaces for sorting
-
-func (ns Nodes) Len() int { return len(ns) }
-func (ns Nodes) Less(i, j int) bool { return ns[i].Key < ns[j].Key }
-func (ns Nodes) Swap(i, j int) { ns[i], ns[j] = ns[j], ns[i] }
-
-type httpKeysAPI struct {
- client httpClient
- prefix string
-}
-
-func (k *httpKeysAPI) Set(ctx context.Context, key, val string, opts *SetOptions) (*Response, error) {
- act := &setAction{
- Prefix: k.prefix,
- Key: key,
- Value: val,
- }
-
- if opts != nil {
- act.PrevValue = opts.PrevValue
- act.PrevIndex = opts.PrevIndex
- act.PrevExist = opts.PrevExist
- act.TTL = opts.TTL
- act.Refresh = opts.Refresh
- act.Dir = opts.Dir
- act.NoValueOnSuccess = opts.NoValueOnSuccess
- }
-
- doCtx := ctx
- if act.PrevExist == PrevNoExist {
- doCtx = context.WithValue(doCtx, &oneShotCtxValue, &oneShotCtxValue)
- }
- resp, body, err := k.client.Do(doCtx, act)
- if err != nil {
- return nil, err
- }
-
- return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body)
-}
-
-func (k *httpKeysAPI) Create(ctx context.Context, key, val string) (*Response, error) {
- return k.Set(ctx, key, val, &SetOptions{PrevExist: PrevNoExist})
-}
-
-func (k *httpKeysAPI) CreateInOrder(ctx context.Context, dir, val string, opts *CreateInOrderOptions) (*Response, error) {
- act := &createInOrderAction{
- Prefix: k.prefix,
- Dir: dir,
- Value: val,
- }
-
- if opts != nil {
- act.TTL = opts.TTL
- }
-
- resp, body, err := k.client.Do(ctx, act)
- if err != nil {
- return nil, err
- }
-
- return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body)
-}
-
-func (k *httpKeysAPI) Update(ctx context.Context, key, val string) (*Response, error) {
- return k.Set(ctx, key, val, &SetOptions{PrevExist: PrevExist})
-}
-
-func (k *httpKeysAPI) Delete(ctx context.Context, key string, opts *DeleteOptions) (*Response, error) {
- act := &deleteAction{
- Prefix: k.prefix,
- Key: key,
- }
-
- if opts != nil {
- act.PrevValue = opts.PrevValue
- act.PrevIndex = opts.PrevIndex
- act.Dir = opts.Dir
- act.Recursive = opts.Recursive
- }
-
- doCtx := context.WithValue(ctx, &oneShotCtxValue, &oneShotCtxValue)
- resp, body, err := k.client.Do(doCtx, act)
- if err != nil {
- return nil, err
- }
-
- return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body)
-}
-
-func (k *httpKeysAPI) Get(ctx context.Context, key string, opts *GetOptions) (*Response, error) {
- act := &getAction{
- Prefix: k.prefix,
- Key: key,
- }
-
- if opts != nil {
- act.Recursive = opts.Recursive
- act.Sorted = opts.Sort
- act.Quorum = opts.Quorum
- }
-
- resp, body, err := k.client.Do(ctx, act)
- if err != nil {
- return nil, err
- }
-
- return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body)
-}
-
-func (k *httpKeysAPI) Watcher(key string, opts *WatcherOptions) Watcher {
- act := waitAction{
- Prefix: k.prefix,
- Key: key,
- }
-
- if opts != nil {
- act.Recursive = opts.Recursive
- if opts.AfterIndex > 0 {
- act.WaitIndex = opts.AfterIndex + 1
- }
- }
-
- return &httpWatcher{
- client: k.client,
- nextWait: act,
- }
-}
-
-type httpWatcher struct {
- client httpClient
- nextWait waitAction
-}
-
-func (hw *httpWatcher) Next(ctx context.Context) (*Response, error) {
- for {
- httpresp, body, err := hw.client.Do(ctx, &hw.nextWait)
- if err != nil {
- return nil, err
- }
-
- resp, err := unmarshalHTTPResponse(httpresp.StatusCode, httpresp.Header, body)
- if err != nil {
- if err == ErrEmptyBody {
- continue
- }
- return nil, err
- }
-
- hw.nextWait.WaitIndex = resp.Node.ModifiedIndex + 1
- return resp, nil
- }
-}
-
-// v2KeysURL forms a URL representing the location of a key.
-// The endpoint argument represents the base URL of an etcd
-// server. The prefix is the path needed to route from the
-// provided endpoint's path to the root of the keys API
-// (typically "/v2/keys").
-func v2KeysURL(ep url.URL, prefix, key string) *url.URL {
- // We concatenate all parts together manually. We cannot use
- // path.Join because it does not reserve trailing slash.
- // We call CanonicalURLPath to further cleanup the path.
- if prefix != "" && prefix[0] != '/' {
- prefix = "/" + prefix
- }
- if key != "" && key[0] != '/' {
- key = "/" + key
- }
- ep.Path = pathutil.CanonicalURLPath(ep.Path + prefix + key)
- return &ep
-}
-
-type getAction struct {
- Prefix string
- Key string
- Recursive bool
- Sorted bool
- Quorum bool
-}
-
-func (g *getAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2KeysURL(ep, g.Prefix, g.Key)
-
- params := u.Query()
- params.Set("recursive", strconv.FormatBool(g.Recursive))
- params.Set("sorted", strconv.FormatBool(g.Sorted))
- params.Set("quorum", strconv.FormatBool(g.Quorum))
- u.RawQuery = params.Encode()
-
- req, _ := http.NewRequest("GET", u.String(), nil)
- return req
-}
-
-type waitAction struct {
- Prefix string
- Key string
- WaitIndex uint64
- Recursive bool
-}
-
-func (w *waitAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2KeysURL(ep, w.Prefix, w.Key)
-
- params := u.Query()
- params.Set("wait", "true")
- params.Set("waitIndex", strconv.FormatUint(w.WaitIndex, 10))
- params.Set("recursive", strconv.FormatBool(w.Recursive))
- u.RawQuery = params.Encode()
-
- req, _ := http.NewRequest("GET", u.String(), nil)
- return req
-}
-
-type setAction struct {
- Prefix string
- Key string
- Value string
- PrevValue string
- PrevIndex uint64
- PrevExist PrevExistType
- TTL time.Duration
- Refresh bool
- Dir bool
- NoValueOnSuccess bool
-}
-
-func (a *setAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2KeysURL(ep, a.Prefix, a.Key)
-
- params := u.Query()
- form := url.Values{}
-
- // we're either creating a directory or setting a key
- if a.Dir {
- params.Set("dir", strconv.FormatBool(a.Dir))
- } else {
- // These options are only valid for setting a key
- if a.PrevValue != "" {
- params.Set("prevValue", a.PrevValue)
- }
- form.Add("value", a.Value)
- }
-
- // Options which apply to both setting a key and creating a dir
- if a.PrevIndex != 0 {
- params.Set("prevIndex", strconv.FormatUint(a.PrevIndex, 10))
- }
- if a.PrevExist != PrevIgnore {
- params.Set("prevExist", string(a.PrevExist))
- }
- if a.TTL > 0 {
- form.Add("ttl", strconv.FormatUint(uint64(a.TTL.Seconds()), 10))
- }
-
- if a.Refresh {
- form.Add("refresh", "true")
- }
- if a.NoValueOnSuccess {
- params.Set("noValueOnSuccess", strconv.FormatBool(a.NoValueOnSuccess))
- }
-
- u.RawQuery = params.Encode()
- body := strings.NewReader(form.Encode())
-
- req, _ := http.NewRequest("PUT", u.String(), body)
- req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
-
- return req
-}
-
-type deleteAction struct {
- Prefix string
- Key string
- PrevValue string
- PrevIndex uint64
- Dir bool
- Recursive bool
-}
-
-func (a *deleteAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2KeysURL(ep, a.Prefix, a.Key)
-
- params := u.Query()
- if a.PrevValue != "" {
- params.Set("prevValue", a.PrevValue)
- }
- if a.PrevIndex != 0 {
- params.Set("prevIndex", strconv.FormatUint(a.PrevIndex, 10))
- }
- if a.Dir {
- params.Set("dir", "true")
- }
- if a.Recursive {
- params.Set("recursive", "true")
- }
- u.RawQuery = params.Encode()
-
- req, _ := http.NewRequest("DELETE", u.String(), nil)
- req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
-
- return req
-}
-
-type createInOrderAction struct {
- Prefix string
- Dir string
- Value string
- TTL time.Duration
-}
-
-func (a *createInOrderAction) HTTPRequest(ep url.URL) *http.Request {
- u := v2KeysURL(ep, a.Prefix, a.Dir)
-
- form := url.Values{}
- form.Add("value", a.Value)
- if a.TTL > 0 {
- form.Add("ttl", strconv.FormatUint(uint64(a.TTL.Seconds()), 10))
- }
- body := strings.NewReader(form.Encode())
-
- req, _ := http.NewRequest("POST", u.String(), body)
- req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
- return req
-}
-
-func unmarshalHTTPResponse(code int, header http.Header, body []byte) (res *Response, err error) {
- switch code {
- case http.StatusOK, http.StatusCreated:
- if len(body) == 0 {
- return nil, ErrEmptyBody
- }
- res, err = unmarshalSuccessfulKeysResponse(header, body)
- default:
- err = unmarshalFailedKeysResponse(body)
- }
- return res, err
-}
-
-var jsonIterator = caseSensitiveJsonIterator()
-
-func unmarshalSuccessfulKeysResponse(header http.Header, body []byte) (*Response, error) {
- var res Response
- err := jsonIterator.Unmarshal(body, &res)
- if err != nil {
- return nil, ErrInvalidJSON
- }
- if header.Get("X-Etcd-Index") != "" {
- res.Index, err = strconv.ParseUint(header.Get("X-Etcd-Index"), 10, 64)
- if err != nil {
- return nil, err
- }
- }
- res.ClusterID = header.Get("X-Etcd-Cluster-ID")
- return &res, nil
-}
-
-func unmarshalFailedKeysResponse(body []byte) error {
- var etcdErr Error
- if err := json.Unmarshal(body, &etcdErr); err != nil {
- return ErrInvalidJSON
- }
- return etcdErr
-}
diff --git a/etcd-fix/client/v2/keys_bench_test.go b/etcd-fix/client/v2/keys_bench_test.go
deleted file mode 100644
index ff13603..0000000
--- a/etcd-fix/client/v2/keys_bench_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "encoding/json"
- "net/http"
- "reflect"
- "strings"
- "testing"
-)
-
-func createTestNode(size int) *Node {
- return &Node{
- Key: strings.Repeat("a", 30),
- Value: strings.Repeat("a", size),
- CreatedIndex: 123456,
- ModifiedIndex: 123456,
- TTL: 123456789,
- }
-}
-
-func createTestNodeWithChildren(children, size int) *Node {
- node := createTestNode(size)
- for i := 0; i < children; i++ {
- node.Nodes = append(node.Nodes, createTestNode(size))
- }
- return node
-}
-
-func createTestResponse(children, size int) *Response {
- return &Response{
- Action: "aaaaa",
- Node: createTestNodeWithChildren(children, size),
- PrevNode: nil,
- }
-}
-
-func benchmarkResponseUnmarshalling(b *testing.B, children, size int) {
- header := http.Header{}
- header.Add("X-Etcd-Index", "123456")
- response := createTestResponse(children, size)
- body, err := json.Marshal(response)
- if err != nil {
- b.Fatal(err)
- }
-
- b.ResetTimer()
- newResponse := new(Response)
- for i := 0; i < b.N; i++ {
- if newResponse, err = unmarshalSuccessfulKeysResponse(header, body); err != nil {
- b.Errorf("error unmarshalling response (%v)", err)
- }
-
- }
- if !reflect.DeepEqual(response.Node, newResponse.Node) {
- b.Errorf("Unexpected difference in a parsed response: \n%+v\n%+v", response, newResponse)
- }
-}
-
-func BenchmarkSmallResponseUnmarshal(b *testing.B) {
- benchmarkResponseUnmarshalling(b, 30, 20)
-}
-
-func BenchmarkManySmallResponseUnmarshal(b *testing.B) {
- benchmarkResponseUnmarshalling(b, 3000, 20)
-}
-
-func BenchmarkMediumResponseUnmarshal(b *testing.B) {
- benchmarkResponseUnmarshalling(b, 300, 200)
-}
-
-func BenchmarkLargeResponseUnmarshal(b *testing.B) {
- benchmarkResponseUnmarshalling(b, 3000, 2000)
-}
diff --git a/etcd-fix/client/v2/keys_test.go b/etcd-fix/client/v2/keys_test.go
deleted file mode 100644
index 34428bb..0000000
--- a/etcd-fix/client/v2/keys_test.go
+++ /dev/null
@@ -1,1429 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "context"
- "errors"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/url"
- "reflect"
- "testing"
- "time"
-)
-
-func TestV2KeysURLHelper(t *testing.T) {
- tests := []struct {
- endpoint url.URL
- prefix string
- key string
- want url.URL
- }{
- // key is empty, no problem
- {
- endpoint: url.URL{Scheme: "http", Host: "example.com", Path: "/v2/keys"},
- prefix: "",
- key: "",
- want: url.URL{Scheme: "http", Host: "example.com", Path: "/v2/keys"},
- },
-
- // key is joined to path
- {
- endpoint: url.URL{Scheme: "http", Host: "example.com", Path: "/v2/keys"},
- prefix: "",
- key: "/foo/bar",
- want: url.URL{Scheme: "http", Host: "example.com", Path: "/v2/keys/foo/bar"},
- },
-
- // key is joined to path when path is empty
- {
- endpoint: url.URL{Scheme: "http", Host: "example.com", Path: ""},
- prefix: "",
- key: "/foo/bar",
- want: url.URL{Scheme: "http", Host: "example.com", Path: "/foo/bar"},
- },
-
- // Host field carries through with port
- {
- endpoint: url.URL{Scheme: "http", Host: "example.com:8080", Path: "/v2/keys"},
- prefix: "",
- key: "",
- want: url.URL{Scheme: "http", Host: "example.com:8080", Path: "/v2/keys"},
- },
-
- // Scheme carries through
- {
- endpoint: url.URL{Scheme: "https", Host: "example.com", Path: "/v2/keys"},
- prefix: "",
- key: "",
- want: url.URL{Scheme: "https", Host: "example.com", Path: "/v2/keys"},
- },
- // Prefix is applied
- {
- endpoint: url.URL{Scheme: "https", Host: "example.com", Path: "/foo"},
- prefix: "/bar",
- key: "/baz",
- want: url.URL{Scheme: "https", Host: "example.com", Path: "/foo/bar/baz"},
- },
- // Prefix is joined to path
- {
- endpoint: url.URL{Scheme: "https", Host: "example.com", Path: "/foo"},
- prefix: "/bar",
- key: "",
- want: url.URL{Scheme: "https", Host: "example.com", Path: "/foo/bar"},
- },
- // Keep trailing slash
- {
- endpoint: url.URL{Scheme: "https", Host: "example.com", Path: "/foo"},
- prefix: "/bar",
- key: "/baz/",
- want: url.URL{Scheme: "https", Host: "example.com", Path: "/foo/bar/baz/"},
- },
- }
-
- for i, tt := range tests {
- got := v2KeysURL(tt.endpoint, tt.prefix, tt.key)
- if tt.want != *got {
- t.Errorf("#%d: want=%#v, got=%#v", i, tt.want, *got)
- }
- }
-}
-
-func TestGetAction(t *testing.T) {
- ep := url.URL{Scheme: "http", Host: "example.com", Path: "/v2/keys"}
- baseWantURL := &url.URL{
- Scheme: "http",
- Host: "example.com",
- Path: "/v2/keys/foo/bar",
- }
- wantHeader := http.Header{}
-
- tests := []struct {
- recursive bool
- sorted bool
- quorum bool
- wantQuery string
- }{
- {
- recursive: false,
- sorted: false,
- quorum: false,
- wantQuery: "quorum=false&recursive=false&sorted=false",
- },
- {
- recursive: true,
- sorted: false,
- quorum: false,
- wantQuery: "quorum=false&recursive=true&sorted=false",
- },
- {
- recursive: false,
- sorted: true,
- quorum: false,
- wantQuery: "quorum=false&recursive=false&sorted=true",
- },
- {
- recursive: true,
- sorted: true,
- quorum: false,
- wantQuery: "quorum=false&recursive=true&sorted=true",
- },
- {
- recursive: false,
- sorted: false,
- quorum: true,
- wantQuery: "quorum=true&recursive=false&sorted=false",
- },
- }
-
- for i, tt := range tests {
- f := getAction{
- Key: "/foo/bar",
- Recursive: tt.recursive,
- Sorted: tt.sorted,
- Quorum: tt.quorum,
- }
- got := *f.HTTPRequest(ep)
-
- wantURL := baseWantURL
- wantURL.RawQuery = tt.wantQuery
-
- err := assertRequest(got, "GET", wantURL, wantHeader, nil)
- if err != nil {
- t.Errorf("#%d: %v", i, err)
- }
- }
-}
-
-func TestWaitAction(t *testing.T) {
- ep := url.URL{Scheme: "http", Host: "example.com", Path: "/v2/keys"}
- baseWantURL := &url.URL{
- Scheme: "http",
- Host: "example.com",
- Path: "/v2/keys/foo/bar",
- }
- wantHeader := http.Header{}
-
- tests := []struct {
- waitIndex uint64
- recursive bool
- wantQuery string
- }{
- {
- recursive: false,
- waitIndex: uint64(0),
- wantQuery: "recursive=false&wait=true&waitIndex=0",
- },
- {
- recursive: false,
- waitIndex: uint64(12),
- wantQuery: "recursive=false&wait=true&waitIndex=12",
- },
- {
- recursive: true,
- waitIndex: uint64(12),
- wantQuery: "recursive=true&wait=true&waitIndex=12",
- },
- }
-
- for i, tt := range tests {
- f := waitAction{
- Key: "/foo/bar",
- WaitIndex: tt.waitIndex,
- Recursive: tt.recursive,
- }
- got := *f.HTTPRequest(ep)
-
- wantURL := baseWantURL
- wantURL.RawQuery = tt.wantQuery
-
- err := assertRequest(got, "GET", wantURL, wantHeader, nil)
- if err != nil {
- t.Errorf("#%d: unexpected error: %#v", i, err)
- }
- }
-}
-
-func TestSetAction(t *testing.T) {
- wantHeader := http.Header(map[string][]string{
- "Content-Type": {"application/x-www-form-urlencoded"},
- })
-
- tests := []struct {
- act setAction
- wantURL string
- wantBody string
- }{
- // default prefix
- {
- act: setAction{
- Prefix: defaultV2KeysPrefix,
- Key: "foo",
- },
- wantURL: "http://example.com/v2/keys/foo",
- wantBody: "value=",
- },
-
- // non-default prefix
- {
- act: setAction{
- Prefix: "/pfx",
- Key: "foo",
- },
- wantURL: "http://example.com/pfx/foo",
- wantBody: "value=",
- },
-
- // no prefix
- {
- act: setAction{
- Key: "foo",
- },
- wantURL: "http://example.com/foo",
- wantBody: "value=",
- },
-
- // Key with path separators
- {
- act: setAction{
- Prefix: defaultV2KeysPrefix,
- Key: "foo/bar/baz",
- },
- wantURL: "http://example.com/v2/keys/foo/bar/baz",
- wantBody: "value=",
- },
-
- // Key with leading slash, Prefix with trailing slash
- {
- act: setAction{
- Prefix: "/foo/",
- Key: "/bar",
- },
- wantURL: "http://example.com/foo/bar",
- wantBody: "value=",
- },
-
- // Key with trailing slash
- {
- act: setAction{
- Key: "/foo/",
- },
- wantURL: "http://example.com/foo/",
- wantBody: "value=",
- },
-
- // Value is set
- {
- act: setAction{
- Key: "foo",
- Value: "baz",
- },
- wantURL: "http://example.com/foo",
- wantBody: "value=baz",
- },
-
- // PrevExist set, but still ignored
- {
- act: setAction{
- Key: "foo",
- PrevExist: PrevIgnore,
- },
- wantURL: "http://example.com/foo",
- wantBody: "value=",
- },
-
- // PrevExist set to true
- {
- act: setAction{
- Key: "foo",
- PrevExist: PrevExist,
- },
- wantURL: "http://example.com/foo?prevExist=true",
- wantBody: "value=",
- },
-
- // PrevExist set to false
- {
- act: setAction{
- Key: "foo",
- PrevExist: PrevNoExist,
- },
- wantURL: "http://example.com/foo?prevExist=false",
- wantBody: "value=",
- },
-
- // PrevValue is urlencoded
- {
- act: setAction{
- Key: "foo",
- PrevValue: "bar baz",
- },
- wantURL: "http://example.com/foo?prevValue=bar+baz",
- wantBody: "value=",
- },
-
- // PrevIndex is set
- {
- act: setAction{
- Key: "foo",
- PrevIndex: uint64(12),
- },
- wantURL: "http://example.com/foo?prevIndex=12",
- wantBody: "value=",
- },
-
- // TTL is set
- {
- act: setAction{
- Key: "foo",
- TTL: 3 * time.Minute,
- },
- wantURL: "http://example.com/foo",
- wantBody: "ttl=180&value=",
- },
-
- // Refresh is set
- {
- act: setAction{
- Key: "foo",
- TTL: 3 * time.Minute,
- Refresh: true,
- },
- wantURL: "http://example.com/foo",
- wantBody: "refresh=true&ttl=180&value=",
- },
-
- // Dir is set
- {
- act: setAction{
- Key: "foo",
- Dir: true,
- },
- wantURL: "http://example.com/foo?dir=true",
- wantBody: "",
- },
- // Dir is set with a value
- {
- act: setAction{
- Key: "foo",
- Value: "bar",
- Dir: true,
- },
- wantURL: "http://example.com/foo?dir=true",
- wantBody: "",
- },
- // Dir is set with PrevExist set to true
- {
- act: setAction{
- Key: "foo",
- PrevExist: PrevExist,
- Dir: true,
- },
- wantURL: "http://example.com/foo?dir=true&prevExist=true",
- wantBody: "",
- },
- // Dir is set with PrevValue
- {
- act: setAction{
- Key: "foo",
- PrevValue: "bar",
- Dir: true,
- },
- wantURL: "http://example.com/foo?dir=true",
- wantBody: "",
- },
- // NoValueOnSuccess is set
- {
- act: setAction{
- Key: "foo",
- NoValueOnSuccess: true,
- },
- wantURL: "http://example.com/foo?noValueOnSuccess=true",
- wantBody: "value=",
- },
- }
-
- for i, tt := range tests {
- u, err := url.Parse(tt.wantURL)
- if err != nil {
- t.Errorf("#%d: unable to use wantURL fixture: %v", i, err)
- }
-
- got := tt.act.HTTPRequest(url.URL{Scheme: "http", Host: "example.com"})
- if err := assertRequest(*got, "PUT", u, wantHeader, []byte(tt.wantBody)); err != nil {
- t.Errorf("#%d: %v", i, err)
- }
- }
-}
-
-func TestCreateInOrderAction(t *testing.T) {
- wantHeader := http.Header(map[string][]string{
- "Content-Type": {"application/x-www-form-urlencoded"},
- })
-
- tests := []struct {
- act createInOrderAction
- wantURL string
- wantBody string
- }{
- // default prefix
- {
- act: createInOrderAction{
- Prefix: defaultV2KeysPrefix,
- Dir: "foo",
- },
- wantURL: "http://example.com/v2/keys/foo",
- wantBody: "value=",
- },
-
- // non-default prefix
- {
- act: createInOrderAction{
- Prefix: "/pfx",
- Dir: "foo",
- },
- wantURL: "http://example.com/pfx/foo",
- wantBody: "value=",
- },
-
- // no prefix
- {
- act: createInOrderAction{
- Dir: "foo",
- },
- wantURL: "http://example.com/foo",
- wantBody: "value=",
- },
-
- // Key with path separators
- {
- act: createInOrderAction{
- Prefix: defaultV2KeysPrefix,
- Dir: "foo/bar/baz",
- },
- wantURL: "http://example.com/v2/keys/foo/bar/baz",
- wantBody: "value=",
- },
-
- // Key with leading slash, Prefix with trailing slash
- {
- act: createInOrderAction{
- Prefix: "/foo/",
- Dir: "/bar",
- },
- wantURL: "http://example.com/foo/bar",
- wantBody: "value=",
- },
-
- // Key with trailing slash
- {
- act: createInOrderAction{
- Dir: "/foo/",
- },
- wantURL: "http://example.com/foo/",
- wantBody: "value=",
- },
-
- // Value is set
- {
- act: createInOrderAction{
- Dir: "foo",
- Value: "baz",
- },
- wantURL: "http://example.com/foo",
- wantBody: "value=baz",
- },
- // TTL is set
- {
- act: createInOrderAction{
- Dir: "foo",
- TTL: 3 * time.Minute,
- },
- wantURL: "http://example.com/foo",
- wantBody: "ttl=180&value=",
- },
- }
-
- for i, tt := range tests {
- u, err := url.Parse(tt.wantURL)
- if err != nil {
- t.Errorf("#%d: unable to use wantURL fixture: %v", i, err)
- }
-
- got := tt.act.HTTPRequest(url.URL{Scheme: "http", Host: "example.com"})
- if err := assertRequest(*got, "POST", u, wantHeader, []byte(tt.wantBody)); err != nil {
- t.Errorf("#%d: %v", i, err)
- }
- }
-}
-
-func TestDeleteAction(t *testing.T) {
- wantHeader := http.Header(map[string][]string{
- "Content-Type": {"application/x-www-form-urlencoded"},
- })
-
- tests := []struct {
- act deleteAction
- wantURL string
- }{
- // default prefix
- {
- act: deleteAction{
- Prefix: defaultV2KeysPrefix,
- Key: "foo",
- },
- wantURL: "http://example.com/v2/keys/foo",
- },
-
- // non-default prefix
- {
- act: deleteAction{
- Prefix: "/pfx",
- Key: "foo",
- },
- wantURL: "http://example.com/pfx/foo",
- },
-
- // no prefix
- {
- act: deleteAction{
- Key: "foo",
- },
- wantURL: "http://example.com/foo",
- },
-
- // Key with path separators
- {
- act: deleteAction{
- Prefix: defaultV2KeysPrefix,
- Key: "foo/bar/baz",
- },
- wantURL: "http://example.com/v2/keys/foo/bar/baz",
- },
-
- // Key with leading slash, Prefix with trailing slash
- {
- act: deleteAction{
- Prefix: "/foo/",
- Key: "/bar",
- },
- wantURL: "http://example.com/foo/bar",
- },
-
- // Key with trailing slash
- {
- act: deleteAction{
- Key: "/foo/",
- },
- wantURL: "http://example.com/foo/",
- },
-
- // Recursive set to true
- {
- act: deleteAction{
- Key: "foo",
- Recursive: true,
- },
- wantURL: "http://example.com/foo?recursive=true",
- },
-
- // PrevValue is urlencoded
- {
- act: deleteAction{
- Key: "foo",
- PrevValue: "bar baz",
- },
- wantURL: "http://example.com/foo?prevValue=bar+baz",
- },
-
- // PrevIndex is set
- {
- act: deleteAction{
- Key: "foo",
- PrevIndex: uint64(12),
- },
- wantURL: "http://example.com/foo?prevIndex=12",
- },
- }
-
- for i, tt := range tests {
- u, err := url.Parse(tt.wantURL)
- if err != nil {
- t.Errorf("#%d: unable to use wantURL fixture: %v", i, err)
- }
-
- got := tt.act.HTTPRequest(url.URL{Scheme: "http", Host: "example.com"})
- if err := assertRequest(*got, "DELETE", u, wantHeader, nil); err != nil {
- t.Errorf("#%d: %v", i, err)
- }
- }
-}
-
-func assertRequest(got http.Request, wantMethod string, wantURL *url.URL, wantHeader http.Header, wantBody []byte) error {
- if wantMethod != got.Method {
- return fmt.Errorf("want.Method=%#v got.Method=%#v", wantMethod, got.Method)
- }
-
- if !reflect.DeepEqual(wantURL, got.URL) {
- return fmt.Errorf("want.URL=%#v got.URL=%#v", wantURL, got.URL)
- }
-
- if !reflect.DeepEqual(wantHeader, got.Header) {
- return fmt.Errorf("want.Header=%#v got.Header=%#v", wantHeader, got.Header)
- }
-
- if got.Body == nil {
- if wantBody != nil {
- return fmt.Errorf("want.Body=%v got.Body=%v", wantBody, got.Body)
- }
- } else {
- if wantBody == nil {
- return fmt.Errorf("want.Body=%v got.Body=%s", wantBody, got.Body)
- }
- gotBytes, err := ioutil.ReadAll(got.Body)
- if err != nil {
- return err
- }
-
- if !reflect.DeepEqual(wantBody, gotBytes) {
- return fmt.Errorf("want.Body=%s got.Body=%s", wantBody, gotBytes)
- }
- }
-
- return nil
-}
-
-func TestUnmarshalSuccessfulResponse(t *testing.T) {
- var expiration time.Time
- expiration.UnmarshalText([]byte("2015-04-07T04:40:23.044979686Z"))
-
- tests := []struct {
- indexHdr string
- clusterIDHdr string
- body string
- wantRes *Response
- wantErr bool
- }{
- // Neither PrevNode or Node
- {
- indexHdr: "1",
- body: `{"action":"delete"}`,
- wantRes: &Response{Action: "delete", Index: 1},
- wantErr: false,
- },
-
- // PrevNode
- {
- indexHdr: "15",
- body: `{"action":"delete", "prevNode": {"key": "/foo", "value": "bar", "modifiedIndex": 12, "createdIndex": 10}}`,
- wantRes: &Response{
- Action: "delete",
- Index: 15,
- Node: nil,
- PrevNode: &Node{
- Key: "/foo",
- Value: "bar",
- ModifiedIndex: 12,
- CreatedIndex: 10,
- },
- },
- wantErr: false,
- },
-
- // Node
- {
- indexHdr: "15",
- body: `{"action":"get", "node": {"key": "/foo", "value": "bar", "modifiedIndex": 12, "createdIndex": 10, "ttl": 10, "expiration": "2015-04-07T04:40:23.044979686Z"}}`,
- wantRes: &Response{
- Action: "get",
- Index: 15,
- Node: &Node{
- Key: "/foo",
- Value: "bar",
- ModifiedIndex: 12,
- CreatedIndex: 10,
- TTL: 10,
- Expiration: &expiration,
- },
- PrevNode: nil,
- },
- wantErr: false,
- },
-
- // Node Dir
- {
- indexHdr: "15",
- clusterIDHdr: "abcdef",
- body: `{"action":"get", "node": {"key": "/foo", "dir": true, "modifiedIndex": 12, "createdIndex": 10}}`,
- wantRes: &Response{
- Action: "get",
- Index: 15,
- Node: &Node{
- Key: "/foo",
- Dir: true,
- ModifiedIndex: 12,
- CreatedIndex: 10,
- },
- PrevNode: nil,
- ClusterID: "abcdef",
- },
- wantErr: false,
- },
-
- // PrevNode and Node
- {
- indexHdr: "15",
- body: `{"action":"update", "prevNode": {"key": "/foo", "value": "baz", "modifiedIndex": 10, "createdIndex": 10}, "node": {"key": "/foo", "value": "bar", "modifiedIndex": 12, "createdIndex": 10}}`,
- wantRes: &Response{
- Action: "update",
- Index: 15,
- PrevNode: &Node{
- Key: "/foo",
- Value: "baz",
- ModifiedIndex: 10,
- CreatedIndex: 10,
- },
- Node: &Node{
- Key: "/foo",
- Value: "bar",
- ModifiedIndex: 12,
- CreatedIndex: 10,
- },
- },
- wantErr: false,
- },
-
- // Garbage in body
- {
- indexHdr: "",
- body: `garbage`,
- wantRes: nil,
- wantErr: true,
- },
-
- // non-integer index
- {
- indexHdr: "poo",
- body: `{}`,
- wantRes: nil,
- wantErr: true,
- },
- }
-
- for i, tt := range tests {
- h := make(http.Header)
- h.Add("X-Etcd-Index", tt.indexHdr)
- res, err := unmarshalSuccessfulKeysResponse(h, []byte(tt.body))
- if tt.wantErr != (err != nil) {
- t.Errorf("#%d: wantErr=%t, err=%v", i, tt.wantErr, err)
- }
-
- if (res == nil) != (tt.wantRes == nil) {
- t.Errorf("#%d: received res=%#v, but expected res=%#v", i, res, tt.wantRes)
- continue
- } else if tt.wantRes == nil {
- // expected and successfully got nil response
- continue
- }
-
- if res.Action != tt.wantRes.Action {
- t.Errorf("#%d: Action=%s, expected %s", i, res.Action, tt.wantRes.Action)
- }
- if res.Index != tt.wantRes.Index {
- t.Errorf("#%d: Index=%d, expected %d", i, res.Index, tt.wantRes.Index)
- }
- if !reflect.DeepEqual(res.Node, tt.wantRes.Node) {
- t.Errorf("#%d: Node=%v, expected %v", i, res.Node, tt.wantRes.Node)
- }
- }
-}
-
-func TestUnmarshalFailedKeysResponse(t *testing.T) {
- body := []byte(`{"errorCode":100,"message":"Key not found","cause":"/foo","index":18}`)
-
- wantErr := Error{
- Code: 100,
- Message: "Key not found",
- Cause: "/foo",
- Index: uint64(18),
- }
-
- gotErr := unmarshalFailedKeysResponse(body)
- if !reflect.DeepEqual(wantErr, gotErr) {
- t.Errorf("unexpected error: want=%#v got=%#v", wantErr, gotErr)
- }
-}
-
-func TestUnmarshalFailedKeysResponseBadJSON(t *testing.T) {
- err := unmarshalFailedKeysResponse([]byte(`{"er`))
- if err == nil {
- t.Errorf("got nil error")
- } else if _, ok := err.(Error); ok {
- t.Errorf("error is of incorrect type *Error: %#v", err)
- }
-}
-
-func TestHTTPWatcherNextWaitAction(t *testing.T) {
- initAction := waitAction{
- Prefix: "/pants",
- Key: "/foo/bar",
- Recursive: true,
- WaitIndex: 19,
- }
-
- client := &actionAssertingHTTPClient{
- t: t,
- act: &initAction,
- resp: http.Response{
- StatusCode: http.StatusOK,
- Header: http.Header{"X-Etcd-Index": []string{"42"}},
- },
- body: []byte(`{"action":"update","node":{"key":"/pants/foo/bar/baz","value":"snarf","modifiedIndex":21,"createdIndex":19},"prevNode":{"key":"/pants/foo/bar/baz","value":"snazz","modifiedIndex":20,"createdIndex":19}}`),
- }
-
- wantResponse := &Response{
- Action: "update",
- Node: &Node{Key: "/pants/foo/bar/baz", Value: "snarf", CreatedIndex: uint64(19), ModifiedIndex: uint64(21)},
- PrevNode: &Node{Key: "/pants/foo/bar/baz", Value: "snazz", CreatedIndex: uint64(19), ModifiedIndex: uint64(20)},
- Index: uint64(42),
- }
-
- wantNextWait := waitAction{
- Prefix: "/pants",
- Key: "/foo/bar",
- Recursive: true,
- WaitIndex: 22,
- }
-
- watcher := &httpWatcher{
- client: client,
- nextWait: initAction,
- }
-
- resp, err := watcher.Next(context.Background())
- if err != nil {
- t.Errorf("non-nil error: %#v", err)
- }
-
- if !reflect.DeepEqual(wantResponse, resp) {
- t.Errorf("received incorrect Response: want=%#v got=%#v", wantResponse, resp)
- }
-
- if !reflect.DeepEqual(wantNextWait, watcher.nextWait) {
- t.Errorf("nextWait incorrect: want=%#v got=%#v", wantNextWait, watcher.nextWait)
- }
-}
-
-func TestHTTPWatcherNextFail(t *testing.T) {
- tests := []httpClient{
- // generic HTTP client failure
- &staticHTTPClient{
- err: errors.New("fail!"),
- },
-
- // unusable status code
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
-
- // etcd Error response
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusNotFound,
- },
- body: []byte(`{"errorCode":100,"message":"Key not found","cause":"/foo","index":18}`),
- },
- }
-
- for i, tt := range tests {
- act := waitAction{
- Prefix: "/pants",
- Key: "/foo/bar",
- Recursive: true,
- WaitIndex: 19,
- }
-
- watcher := &httpWatcher{
- client: tt,
- nextWait: act,
- }
-
- resp, err := watcher.Next(context.Background())
- if err == nil {
- t.Errorf("#%d: expected non-nil error", i)
- }
- if resp != nil {
- t.Errorf("#%d: expected nil Response, got %#v", i, resp)
- }
- if !reflect.DeepEqual(act, watcher.nextWait) {
- t.Errorf("#%d: nextWait changed: want=%#v got=%#v", i, act, watcher.nextWait)
- }
- }
-}
-
-func TestHTTPKeysAPIWatcherAction(t *testing.T) {
- tests := []struct {
- key string
- opts *WatcherOptions
- want waitAction
- }{
- {
- key: "/foo",
- opts: nil,
- want: waitAction{
- Key: "/foo",
- Recursive: false,
- WaitIndex: 0,
- },
- },
-
- {
- key: "/foo",
- opts: &WatcherOptions{
- Recursive: false,
- AfterIndex: 0,
- },
- want: waitAction{
- Key: "/foo",
- Recursive: false,
- WaitIndex: 0,
- },
- },
-
- {
- key: "/foo",
- opts: &WatcherOptions{
- Recursive: true,
- AfterIndex: 0,
- },
- want: waitAction{
- Key: "/foo",
- Recursive: true,
- WaitIndex: 0,
- },
- },
-
- {
- key: "/foo",
- opts: &WatcherOptions{
- Recursive: false,
- AfterIndex: 19,
- },
- want: waitAction{
- Key: "/foo",
- Recursive: false,
- WaitIndex: 20,
- },
- },
- }
-
- for i, tt := range tests {
- testError := errors.New("fail!")
- kAPI := &httpKeysAPI{
- client: &staticHTTPClient{err: testError},
- }
-
- want := &httpWatcher{
- client: &staticHTTPClient{err: testError},
- nextWait: tt.want,
- }
-
- got := kAPI.Watcher(tt.key, tt.opts)
- if !reflect.DeepEqual(want, got) {
- t.Errorf("#%d: incorrect watcher: want=%#v got=%#v", i, want, got)
- }
- }
-}
-
-func TestHTTPKeysAPISetAction(t *testing.T) {
- tests := []struct {
- key string
- value string
- opts *SetOptions
- wantAction httpAction
- }{
- // nil SetOptions
- {
- key: "/foo",
- value: "bar",
- opts: nil,
- wantAction: &setAction{
- Key: "/foo",
- Value: "bar",
- PrevValue: "",
- PrevIndex: 0,
- PrevExist: PrevIgnore,
- TTL: 0,
- },
- },
- // empty SetOptions
- {
- key: "/foo",
- value: "bar",
- opts: &SetOptions{},
- wantAction: &setAction{
- Key: "/foo",
- Value: "bar",
- PrevValue: "",
- PrevIndex: 0,
- PrevExist: PrevIgnore,
- TTL: 0,
- },
- },
- // populated SetOptions
- {
- key: "/foo",
- value: "bar",
- opts: &SetOptions{
- PrevValue: "baz",
- PrevIndex: 13,
- PrevExist: PrevExist,
- TTL: time.Minute,
- Dir: true,
- },
- wantAction: &setAction{
- Key: "/foo",
- Value: "bar",
- PrevValue: "baz",
- PrevIndex: 13,
- PrevExist: PrevExist,
- TTL: time.Minute,
- Dir: true,
- },
- },
- }
-
- for i, tt := range tests {
- client := &actionAssertingHTTPClient{t: t, num: i, act: tt.wantAction}
- kAPI := httpKeysAPI{client: client}
- kAPI.Set(context.Background(), tt.key, tt.value, tt.opts)
- }
-}
-
-func TestHTTPKeysAPISetError(t *testing.T) {
- tests := []httpClient{
- // generic HTTP client failure
- &staticHTTPClient{
- err: errors.New("fail!"),
- },
-
- // unusable status code
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
-
- // etcd Error response
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusInternalServerError,
- },
- body: []byte(`{"errorCode":300,"message":"Raft internal error","cause":"/foo","index":18}`),
- },
- }
-
- for i, tt := range tests {
- kAPI := httpKeysAPI{client: tt}
- resp, err := kAPI.Set(context.Background(), "/foo", "bar", nil)
- if err == nil {
- t.Errorf("#%d: received nil error", i)
- }
- if resp != nil {
- t.Errorf("#%d: received non-nil Response: %#v", i, resp)
- }
- }
-}
-
-func TestHTTPKeysAPISetResponse(t *testing.T) {
- client := &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusOK,
- Header: http.Header{"X-Etcd-Index": []string{"21"}},
- },
- body: []byte(`{"action":"set","node":{"key":"/pants/foo/bar/baz","value":"snarf","modifiedIndex":21,"createdIndex":21},"prevNode":{"key":"/pants/foo/bar/baz","value":"snazz","modifiedIndex":20,"createdIndex":19}}`),
- }
-
- wantResponse := &Response{
- Action: "set",
- Node: &Node{Key: "/pants/foo/bar/baz", Value: "snarf", CreatedIndex: uint64(21), ModifiedIndex: uint64(21)},
- PrevNode: &Node{Key: "/pants/foo/bar/baz", Value: "snazz", CreatedIndex: uint64(19), ModifiedIndex: uint64(20)},
- Index: uint64(21),
- }
-
- kAPI := &httpKeysAPI{client: client, prefix: "/pants"}
- resp, err := kAPI.Set(context.Background(), "/foo/bar/baz", "snarf", nil)
- if err != nil {
- t.Errorf("non-nil error: %#v", err)
- }
- if !reflect.DeepEqual(wantResponse, resp) {
- t.Errorf("incorrect Response: want=%#v got=%#v", wantResponse, resp)
- }
-}
-
-func TestHTTPKeysAPIGetAction(t *testing.T) {
- tests := []struct {
- key string
- opts *GetOptions
- wantAction httpAction
- }{
- // nil GetOptions
- {
- key: "/foo",
- opts: nil,
- wantAction: &getAction{
- Key: "/foo",
- Sorted: false,
- Recursive: false,
- },
- },
- // empty GetOptions
- {
- key: "/foo",
- opts: &GetOptions{},
- wantAction: &getAction{
- Key: "/foo",
- Sorted: false,
- Recursive: false,
- },
- },
- // populated GetOptions
- {
- key: "/foo",
- opts: &GetOptions{
- Sort: true,
- Recursive: true,
- Quorum: true,
- },
- wantAction: &getAction{
- Key: "/foo",
- Sorted: true,
- Recursive: true,
- Quorum: true,
- },
- },
- }
-
- for i, tt := range tests {
- client := &actionAssertingHTTPClient{t: t, num: i, act: tt.wantAction}
- kAPI := httpKeysAPI{client: client}
- kAPI.Get(context.Background(), tt.key, tt.opts)
- }
-}
-
-func TestHTTPKeysAPIGetError(t *testing.T) {
- tests := []httpClient{
- // generic HTTP client failure
- &staticHTTPClient{
- err: errors.New("fail!"),
- },
-
- // unusable status code
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
-
- // etcd Error response
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusInternalServerError,
- },
- body: []byte(`{"errorCode":300,"message":"Raft internal error","cause":"/foo","index":18}`),
- },
- }
-
- for i, tt := range tests {
- kAPI := httpKeysAPI{client: tt}
- resp, err := kAPI.Get(context.Background(), "/foo", nil)
- if err == nil {
- t.Errorf("#%d: received nil error", i)
- }
- if resp != nil {
- t.Errorf("#%d: received non-nil Response: %#v", i, resp)
- }
- }
-}
-
-func TestHTTPKeysAPIGetResponse(t *testing.T) {
- client := &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusOK,
- Header: http.Header{"X-Etcd-Index": []string{"42"}},
- },
- body: []byte(`{"action":"get","node":{"key":"/pants/foo/bar","modifiedIndex":25,"createdIndex":19,"nodes":[{"key":"/pants/foo/bar/baz","value":"snarf","createdIndex":21,"modifiedIndex":25}]}}`),
- }
-
- wantResponse := &Response{
- Action: "get",
- Node: &Node{
- Key: "/pants/foo/bar",
- Nodes: []*Node{
- {Key: "/pants/foo/bar/baz", Value: "snarf", CreatedIndex: 21, ModifiedIndex: 25},
- },
- CreatedIndex: uint64(19),
- ModifiedIndex: uint64(25),
- },
- Index: uint64(42),
- }
-
- kAPI := &httpKeysAPI{client: client, prefix: "/pants"}
- resp, err := kAPI.Get(context.Background(), "/foo/bar", &GetOptions{Recursive: true})
- if err != nil {
- t.Errorf("non-nil error: %#v", err)
- }
- if !reflect.DeepEqual(wantResponse, resp) {
- t.Errorf("incorrect Response: want=%#v got=%#v", wantResponse, resp)
- }
-}
-
-func TestHTTPKeysAPIDeleteAction(t *testing.T) {
- tests := []struct {
- key string
- opts *DeleteOptions
- wantAction httpAction
- }{
- // nil DeleteOptions
- {
- key: "/foo",
- opts: nil,
- wantAction: &deleteAction{
- Key: "/foo",
- PrevValue: "",
- PrevIndex: 0,
- Recursive: false,
- },
- },
- // empty DeleteOptions
- {
- key: "/foo",
- opts: &DeleteOptions{},
- wantAction: &deleteAction{
- Key: "/foo",
- PrevValue: "",
- PrevIndex: 0,
- Recursive: false,
- },
- },
- // populated DeleteOptions
- {
- key: "/foo",
- opts: &DeleteOptions{
- PrevValue: "baz",
- PrevIndex: 13,
- Recursive: true,
- },
- wantAction: &deleteAction{
- Key: "/foo",
- PrevValue: "baz",
- PrevIndex: 13,
- Recursive: true,
- },
- },
- }
-
- for i, tt := range tests {
- client := &actionAssertingHTTPClient{t: t, num: i, act: tt.wantAction}
- kAPI := httpKeysAPI{client: client}
- kAPI.Delete(context.Background(), tt.key, tt.opts)
- }
-}
-
-func TestHTTPKeysAPIDeleteError(t *testing.T) {
- tests := []httpClient{
- // generic HTTP client failure
- &staticHTTPClient{
- err: errors.New("fail!"),
- },
-
- // unusable status code
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusTeapot,
- },
- },
-
- // etcd Error response
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusInternalServerError,
- },
- body: []byte(`{"errorCode":300,"message":"Raft internal error","cause":"/foo","index":18}`),
- },
- }
-
- for i, tt := range tests {
- kAPI := httpKeysAPI{client: tt}
- resp, err := kAPI.Delete(context.Background(), "/foo", nil)
- if err == nil {
- t.Errorf("#%d: received nil error", i)
- }
- if resp != nil {
- t.Errorf("#%d: received non-nil Response: %#v", i, resp)
- }
- }
-}
-
-func TestHTTPKeysAPIDeleteResponse(t *testing.T) {
- client := &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusOK,
- Header: http.Header{"X-Etcd-Index": []string{"22"}},
- },
- body: []byte(`{"action":"delete","node":{"key":"/pants/foo/bar/baz","value":"snarf","modifiedIndex":22,"createdIndex":19},"prevNode":{"key":"/pants/foo/bar/baz","value":"snazz","modifiedIndex":20,"createdIndex":19}}`),
- }
-
- wantResponse := &Response{
- Action: "delete",
- Node: &Node{Key: "/pants/foo/bar/baz", Value: "snarf", CreatedIndex: uint64(19), ModifiedIndex: uint64(22)},
- PrevNode: &Node{Key: "/pants/foo/bar/baz", Value: "snazz", CreatedIndex: uint64(19), ModifiedIndex: uint64(20)},
- Index: uint64(22),
- }
-
- kAPI := &httpKeysAPI{client: client, prefix: "/pants"}
- resp, err := kAPI.Delete(context.Background(), "/foo/bar/baz", nil)
- if err != nil {
- t.Errorf("non-nil error: %#v", err)
- }
- if !reflect.DeepEqual(wantResponse, resp) {
- t.Errorf("incorrect Response: want=%#v got=%#v", wantResponse, resp)
- }
-}
-
-func TestHTTPKeysAPICreateAction(t *testing.T) {
- act := &setAction{
- Key: "/foo",
- Value: "bar",
- PrevExist: PrevNoExist,
- PrevIndex: 0,
- PrevValue: "",
- TTL: 0,
- }
-
- kAPI := httpKeysAPI{client: &actionAssertingHTTPClient{t: t, act: act}}
- kAPI.Create(context.Background(), "/foo", "bar")
-}
-
-func TestHTTPKeysAPICreateInOrderAction(t *testing.T) {
- act := &createInOrderAction{
- Dir: "/foo",
- Value: "bar",
- TTL: 0,
- }
- kAPI := httpKeysAPI{client: &actionAssertingHTTPClient{t: t, act: act}}
- kAPI.CreateInOrder(context.Background(), "/foo", "bar", nil)
-}
-
-func TestHTTPKeysAPIUpdateAction(t *testing.T) {
- act := &setAction{
- Key: "/foo",
- Value: "bar",
- PrevExist: PrevExist,
- PrevIndex: 0,
- PrevValue: "",
- TTL: 0,
- }
-
- kAPI := httpKeysAPI{client: &actionAssertingHTTPClient{t: t, act: act}}
- kAPI.Update(context.Background(), "/foo", "bar")
-}
-
-func TestNodeTTLDuration(t *testing.T) {
- tests := []struct {
- node *Node
- want time.Duration
- }{
- {
- node: &Node{TTL: 0},
- want: 0,
- },
- {
- node: &Node{TTL: 97},
- want: 97 * time.Second,
- },
- }
-
- for i, tt := range tests {
- got := tt.node.TTLDuration()
- if tt.want != got {
- t.Errorf("#%d: incorrect duration: want=%v got=%v", i, tt.want, got)
- }
- }
-}
diff --git a/etcd-fix/client/v2/main_test.go b/etcd-fix/client/v2/main_test.go
deleted file mode 100644
index 929fab3..0000000
--- a/etcd-fix/client/v2/main_test.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client_test
-
-import (
- "net/http"
- "testing"
-
- "go.etcd.io/etcd/pkg/v3/testutil"
-)
-
-func exampleEndpoints() []string { return nil }
-func exampleTransport() *http.Transport { return nil }
-
-func forUnitTestsRunInMockedContext(mocking func(), example func()) {
- mocking()
- // TODO: Call 'example' when mocking() provides realistic mocking of transport.
-
- // The real testing logic of examples gets executed
- // as part of ./tests/integration/client/example/...
-}
-
-func TestMain(m *testing.M) {
- testutil.MustTestMainWithLeakDetection(m)
-}
diff --git a/etcd-fix/client/v2/members.go b/etcd-fix/client/v2/members.go
deleted file mode 100644
index 59d31ab..0000000
--- a/etcd-fix/client/v2/members.go
+++ /dev/null
@@ -1,303 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "fmt"
- "net/http"
- "net/url"
- "path"
-
- "go.etcd.io/etcd/pkg/v3/types"
-)
-
-var (
- defaultV2MembersPrefix = "/v2/members"
- defaultLeaderSuffix = "/leader"
-)
-
-type Member struct {
- // ID is the unique identifier of this Member.
- ID string `json:"id"`
-
- // Name is a human-readable, non-unique identifier of this Member.
- Name string `json:"name"`
-
- // PeerURLs represents the HTTP(S) endpoints this Member uses to
- // participate in etcd's consensus protocol.
- PeerURLs []string `json:"peerURLs"`
-
- // ClientURLs represents the HTTP(S) endpoints on which this Member
- // serves its client-facing APIs.
- ClientURLs []string `json:"clientURLs"`
-}
-
-type memberCollection []Member
-
-func (c *memberCollection) UnmarshalJSON(data []byte) error {
- d := struct {
- Members []Member
- }{}
-
- if err := json.Unmarshal(data, &d); err != nil {
- return err
- }
-
- if d.Members == nil {
- *c = make([]Member, 0)
- return nil
- }
-
- *c = d.Members
- return nil
-}
-
-type memberCreateOrUpdateRequest struct {
- PeerURLs types.URLs
-}
-
-func (m *memberCreateOrUpdateRequest) MarshalJSON() ([]byte, error) {
- s := struct {
- PeerURLs []string `json:"peerURLs"`
- }{
- PeerURLs: make([]string, len(m.PeerURLs)),
- }
-
- for i, u := range m.PeerURLs {
- s.PeerURLs[i] = u.String()
- }
-
- return json.Marshal(&s)
-}
-
-// NewMembersAPI constructs a new MembersAPI that uses HTTP to
-// interact with etcd's membership API.
-func NewMembersAPI(c Client) MembersAPI {
- return &httpMembersAPI{
- client: c,
- }
-}
-
-type MembersAPI interface {
- // List enumerates the current cluster membership.
- List(ctx context.Context) ([]Member, error)
-
- // Add instructs etcd to accept a new Member into the cluster.
- Add(ctx context.Context, peerURL string) (*Member, error)
-
- // Remove demotes an existing Member out of the cluster.
- Remove(ctx context.Context, mID string) error
-
- // Update instructs etcd to update an existing Member in the cluster.
- Update(ctx context.Context, mID string, peerURLs []string) error
-
- // Leader gets current leader of the cluster
- Leader(ctx context.Context) (*Member, error)
-}
-
-type httpMembersAPI struct {
- client httpClient
-}
-
-func (m *httpMembersAPI) List(ctx context.Context) ([]Member, error) {
- req := &membersAPIActionList{}
- resp, body, err := m.client.Do(ctx, req)
- if err != nil {
- return nil, err
- }
-
- if err := assertStatusCode(resp.StatusCode, http.StatusOK); err != nil {
- return nil, err
- }
-
- var mCollection memberCollection
- if err := json.Unmarshal(body, &mCollection); err != nil {
- return nil, err
- }
-
- return []Member(mCollection), nil
-}
-
-func (m *httpMembersAPI) Add(ctx context.Context, peerURL string) (*Member, error) {
- urls, err := types.NewURLs([]string{peerURL})
- if err != nil {
- return nil, err
- }
-
- req := &membersAPIActionAdd{peerURLs: urls}
- resp, body, err := m.client.Do(ctx, req)
- if err != nil {
- return nil, err
- }
-
- if err := assertStatusCode(resp.StatusCode, http.StatusCreated, http.StatusConflict); err != nil {
- return nil, err
- }
-
- if resp.StatusCode != http.StatusCreated {
- var merr membersError
- if err := json.Unmarshal(body, &merr); err != nil {
- return nil, err
- }
- return nil, merr
- }
-
- var memb Member
- if err := json.Unmarshal(body, &memb); err != nil {
- return nil, err
- }
-
- return &memb, nil
-}
-
-func (m *httpMembersAPI) Update(ctx context.Context, memberID string, peerURLs []string) error {
- urls, err := types.NewURLs(peerURLs)
- if err != nil {
- return err
- }
-
- req := &membersAPIActionUpdate{peerURLs: urls, memberID: memberID}
- resp, body, err := m.client.Do(ctx, req)
- if err != nil {
- return err
- }
-
- if err := assertStatusCode(resp.StatusCode, http.StatusNoContent, http.StatusNotFound, http.StatusConflict); err != nil {
- return err
- }
-
- if resp.StatusCode != http.StatusNoContent {
- var merr membersError
- if err := json.Unmarshal(body, &merr); err != nil {
- return err
- }
- return merr
- }
-
- return nil
-}
-
-func (m *httpMembersAPI) Remove(ctx context.Context, memberID string) error {
- req := &membersAPIActionRemove{memberID: memberID}
- resp, _, err := m.client.Do(ctx, req)
- if err != nil {
- return err
- }
-
- return assertStatusCode(resp.StatusCode, http.StatusNoContent, http.StatusGone)
-}
-
-func (m *httpMembersAPI) Leader(ctx context.Context) (*Member, error) {
- req := &membersAPIActionLeader{}
- resp, body, err := m.client.Do(ctx, req)
- if err != nil {
- return nil, err
- }
-
- if err := assertStatusCode(resp.StatusCode, http.StatusOK); err != nil {
- return nil, err
- }
-
- var leader Member
- if err := json.Unmarshal(body, &leader); err != nil {
- return nil, err
- }
-
- return &leader, nil
-}
-
-type membersAPIActionList struct{}
-
-func (l *membersAPIActionList) HTTPRequest(ep url.URL) *http.Request {
- u := v2MembersURL(ep)
- req, _ := http.NewRequest("GET", u.String(), nil)
- return req
-}
-
-type membersAPIActionRemove struct {
- memberID string
-}
-
-func (d *membersAPIActionRemove) HTTPRequest(ep url.URL) *http.Request {
- u := v2MembersURL(ep)
- u.Path = path.Join(u.Path, d.memberID)
- req, _ := http.NewRequest("DELETE", u.String(), nil)
- return req
-}
-
-type membersAPIActionAdd struct {
- peerURLs types.URLs
-}
-
-func (a *membersAPIActionAdd) HTTPRequest(ep url.URL) *http.Request {
- u := v2MembersURL(ep)
- m := memberCreateOrUpdateRequest{PeerURLs: a.peerURLs}
- b, _ := json.Marshal(&m)
- req, _ := http.NewRequest("POST", u.String(), bytes.NewReader(b))
- req.Header.Set("Content-Type", "application/json")
- return req
-}
-
-type membersAPIActionUpdate struct {
- memberID string
- peerURLs types.URLs
-}
-
-func (a *membersAPIActionUpdate) HTTPRequest(ep url.URL) *http.Request {
- u := v2MembersURL(ep)
- m := memberCreateOrUpdateRequest{PeerURLs: a.peerURLs}
- u.Path = path.Join(u.Path, a.memberID)
- b, _ := json.Marshal(&m)
- req, _ := http.NewRequest("PUT", u.String(), bytes.NewReader(b))
- req.Header.Set("Content-Type", "application/json")
- return req
-}
-
-func assertStatusCode(got int, want ...int) (err error) {
- for _, w := range want {
- if w == got {
- return nil
- }
- }
- return fmt.Errorf("unexpected status code %d", got)
-}
-
-type membersAPIActionLeader struct{}
-
-func (l *membersAPIActionLeader) HTTPRequest(ep url.URL) *http.Request {
- u := v2MembersURL(ep)
- u.Path = path.Join(u.Path, defaultLeaderSuffix)
- req, _ := http.NewRequest("GET", u.String(), nil)
- return req
-}
-
-// v2MembersURL add the necessary path to the provided endpoint
-// to route requests to the default v2 members API.
-func v2MembersURL(ep url.URL) *url.URL {
- ep.Path = path.Join(ep.Path, defaultV2MembersPrefix)
- return &ep
-}
-
-type membersError struct {
- Message string `json:"message"`
- Code int `json:"-"`
-}
-
-func (e membersError) Error() string {
- return e.Message
-}
diff --git a/etcd-fix/client/v2/members_test.go b/etcd-fix/client/v2/members_test.go
deleted file mode 100644
index dd47d43..0000000
--- a/etcd-fix/client/v2/members_test.go
+++ /dev/null
@@ -1,598 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "context"
- "encoding/json"
- "errors"
- "net/http"
- "net/url"
- "reflect"
- "testing"
-
- "go.etcd.io/etcd/pkg/v3/types"
-)
-
-func TestMembersAPIActionList(t *testing.T) {
- ep := url.URL{Scheme: "http", Host: "example.com"}
- act := &membersAPIActionList{}
-
- wantURL := &url.URL{
- Scheme: "http",
- Host: "example.com",
- Path: "/v2/members",
- }
-
- got := *act.HTTPRequest(ep)
- err := assertRequest(got, "GET", wantURL, http.Header{}, nil)
- if err != nil {
- t.Error(err.Error())
- }
-}
-
-func TestMembersAPIActionAdd(t *testing.T) {
- ep := url.URL{Scheme: "http", Host: "example.com"}
- act := &membersAPIActionAdd{
- peerURLs: types.URLs([]url.URL{
- {Scheme: "https", Host: "127.0.0.1:8081"},
- {Scheme: "http", Host: "127.0.0.1:8080"},
- }),
- }
-
- wantURL := &url.URL{
- Scheme: "http",
- Host: "example.com",
- Path: "/v2/members",
- }
- wantHeader := http.Header{
- "Content-Type": []string{"application/json"},
- }
- wantBody := []byte(`{"peerURLs":["https://127.0.0.1:8081","http://127.0.0.1:8080"]}`)
-
- got := *act.HTTPRequest(ep)
- err := assertRequest(got, "POST", wantURL, wantHeader, wantBody)
- if err != nil {
- t.Error(err.Error())
- }
-}
-
-func TestMembersAPIActionUpdate(t *testing.T) {
- ep := url.URL{Scheme: "http", Host: "example.com"}
- act := &membersAPIActionUpdate{
- memberID: "0xabcd",
- peerURLs: types.URLs([]url.URL{
- {Scheme: "https", Host: "127.0.0.1:8081"},
- {Scheme: "http", Host: "127.0.0.1:8080"},
- }),
- }
-
- wantURL := &url.URL{
- Scheme: "http",
- Host: "example.com",
- Path: "/v2/members/0xabcd",
- }
- wantHeader := http.Header{
- "Content-Type": []string{"application/json"},
- }
- wantBody := []byte(`{"peerURLs":["https://127.0.0.1:8081","http://127.0.0.1:8080"]}`)
-
- got := *act.HTTPRequest(ep)
- err := assertRequest(got, "PUT", wantURL, wantHeader, wantBody)
- if err != nil {
- t.Error(err.Error())
- }
-}
-
-func TestMembersAPIActionRemove(t *testing.T) {
- ep := url.URL{Scheme: "http", Host: "example.com"}
- act := &membersAPIActionRemove{memberID: "XXX"}
-
- wantURL := &url.URL{
- Scheme: "http",
- Host: "example.com",
- Path: "/v2/members/XXX",
- }
-
- got := *act.HTTPRequest(ep)
- err := assertRequest(got, "DELETE", wantURL, http.Header{}, nil)
- if err != nil {
- t.Error(err.Error())
- }
-}
-
-func TestMembersAPIActionLeader(t *testing.T) {
- ep := url.URL{Scheme: "http", Host: "example.com"}
- act := &membersAPIActionLeader{}
-
- wantURL := &url.URL{
- Scheme: "http",
- Host: "example.com",
- Path: "/v2/members/leader",
- }
-
- got := *act.HTTPRequest(ep)
- err := assertRequest(got, "GET", wantURL, http.Header{}, nil)
- if err != nil {
- t.Error(err.Error())
- }
-}
-
-func TestAssertStatusCode(t *testing.T) {
- if err := assertStatusCode(404, 400); err == nil {
- t.Errorf("assertStatusCode failed to detect conflict in 400 vs 404")
- }
-
- if err := assertStatusCode(404, 400, 404); err != nil {
- t.Errorf("assertStatusCode found conflict in (404,400) vs 400: %v", err)
- }
-}
-
-func TestV2MembersURL(t *testing.T) {
- got := v2MembersURL(url.URL{
- Scheme: "http",
- Host: "foo.example.com:4002",
- Path: "/pants",
- })
- want := &url.URL{
- Scheme: "http",
- Host: "foo.example.com:4002",
- Path: "/pants/v2/members",
- }
-
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("v2MembersURL got %#v, want %#v", got, want)
- }
-}
-
-func TestMemberUnmarshal(t *testing.T) {
- tests := []struct {
- body []byte
- wantMember Member
- wantError bool
- }{
- // no URLs, just check ID & Name
- {
- body: []byte(`{"id": "c", "name": "dungarees"}`),
- wantMember: Member{ID: "c", Name: "dungarees", PeerURLs: nil, ClientURLs: nil},
- },
-
- // both client and peer URLs
- {
- body: []byte(`{"peerURLs": ["http://127.0.0.1:2379"], "clientURLs": ["http://127.0.0.1:2379"]}`),
- wantMember: Member{
- PeerURLs: []string{
- "http://127.0.0.1:2379",
- },
- ClientURLs: []string{
- "http://127.0.0.1:2379",
- },
- },
- },
-
- // multiple peer URLs
- {
- body: []byte(`{"peerURLs": ["http://127.0.0.1:2379", "https://example.com"]}`),
- wantMember: Member{
- PeerURLs: []string{
- "http://127.0.0.1:2379",
- "https://example.com",
- },
- ClientURLs: nil,
- },
- },
-
- // multiple client URLs
- {
- body: []byte(`{"clientURLs": ["http://127.0.0.1:2379", "https://example.com"]}`),
- wantMember: Member{
- PeerURLs: nil,
- ClientURLs: []string{
- "http://127.0.0.1:2379",
- "https://example.com",
- },
- },
- },
-
- // invalid JSON
- {
- body: []byte(`{"peerU`),
- wantError: true,
- },
- }
-
- for i, tt := range tests {
- got := Member{}
- err := json.Unmarshal(tt.body, &got)
- if tt.wantError != (err != nil) {
- t.Errorf("#%d: want error %t, got %v", i, tt.wantError, err)
- continue
- }
-
- if !reflect.DeepEqual(tt.wantMember, got) {
- t.Errorf("#%d: incorrect output: want=%#v, got=%#v", i, tt.wantMember, got)
- }
- }
-}
-
-func TestMemberCollectionUnmarshalFail(t *testing.T) {
- mc := &memberCollection{}
- if err := mc.UnmarshalJSON([]byte(`{`)); err == nil {
- t.Errorf("got nil error")
- }
-}
-
-func TestMemberCollectionUnmarshal(t *testing.T) {
- tests := []struct {
- body []byte
- want memberCollection
- }{
- {
- body: []byte(`{}`),
- want: memberCollection([]Member{}),
- },
- {
- body: []byte(`{"members":[]}`),
- want: memberCollection([]Member{}),
- },
- {
- body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`),
- want: memberCollection(
- []Member{
- {
- ID: "2745e2525fce8fe",
- Name: "node3",
- PeerURLs: []string{
- "http://127.0.0.1:7003",
- },
- ClientURLs: []string{
- "http://127.0.0.1:4003",
- },
- },
- {
- ID: "42134f434382925",
- Name: "node1",
- PeerURLs: []string{
- "http://127.0.0.1:2380",
- "http://127.0.0.1:7001",
- },
- ClientURLs: []string{
- "http://127.0.0.1:2379",
- "http://127.0.0.1:4001",
- },
- },
- {
- ID: "94088180e21eb87b",
- Name: "node2",
- PeerURLs: []string{
- "http://127.0.0.1:7002",
- },
- ClientURLs: []string{
- "http://127.0.0.1:4002",
- },
- },
- },
- ),
- },
- }
-
- for i, tt := range tests {
- var got memberCollection
- err := json.Unmarshal(tt.body, &got)
- if err != nil {
- t.Errorf("#%d: unexpected error: %v", i, err)
- continue
- }
-
- if !reflect.DeepEqual(tt.want, got) {
- t.Errorf("#%d: incorrect output: want=%#v, got=%#v", i, tt.want, got)
- }
- }
-}
-
-func TestMemberCreateRequestMarshal(t *testing.T) {
- req := memberCreateOrUpdateRequest{
- PeerURLs: types.URLs([]url.URL{
- {Scheme: "http", Host: "127.0.0.1:8081"},
- {Scheme: "https", Host: "127.0.0.1:8080"},
- }),
- }
- want := []byte(`{"peerURLs":["http://127.0.0.1:8081","https://127.0.0.1:8080"]}`)
-
- got, err := json.Marshal(&req)
- if err != nil {
- t.Fatalf("Marshal returned unexpected err=%v", err)
- }
-
- if !reflect.DeepEqual(want, got) {
- t.Fatalf("Failed to marshal memberCreateRequest: want=%s, got=%s", want, got)
- }
-}
-
-func TestHTTPMembersAPIAddSuccess(t *testing.T) {
- wantAction := &membersAPIActionAdd{
- peerURLs: types.URLs([]url.URL{
- {Scheme: "http", Host: "127.0.0.1:7002"},
- }),
- }
-
- mAPI := &httpMembersAPI{
- client: &actionAssertingHTTPClient{
- t: t,
- act: wantAction,
- resp: http.Response{
- StatusCode: http.StatusCreated,
- },
- body: []byte(`{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"]}`),
- },
- }
-
- wantResponseMember := &Member{
- ID: "94088180e21eb87b",
- PeerURLs: []string{"http://127.0.0.1:7002"},
- }
-
- m, err := mAPI.Add(context.Background(), "http://127.0.0.1:7002")
- if err != nil {
- t.Errorf("got non-nil err: %#v", err)
- }
- if !reflect.DeepEqual(wantResponseMember, m) {
- t.Errorf("incorrect Member: want=%#v got=%#v", wantResponseMember, m)
- }
-}
-
-func TestHTTPMembersAPIAddError(t *testing.T) {
- okPeer := "http://example.com:2379"
- tests := []struct {
- peerURL string
- client httpClient
-
- // if wantErr == nil, assert that the returned error is non-nil
- // if wantErr != nil, assert that the returned error matches
- wantErr error
- }{
- // malformed peer URL
- {
- peerURL: ":",
- },
-
- // generic httpClient failure
- {
- peerURL: okPeer,
- client: &staticHTTPClient{err: errors.New("fail!")},
- },
-
- // unrecognized HTTP status code
- {
- peerURL: okPeer,
- client: &staticHTTPClient{
- resp: http.Response{StatusCode: http.StatusTeapot},
- },
- },
-
- // unmarshal body into membersError on StatusConflict
- {
- peerURL: okPeer,
- client: &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusConflict,
- },
- body: []byte(`{"message":"fail!"}`),
- },
- wantErr: membersError{Message: "fail!"},
- },
-
- // fail to unmarshal body on StatusConflict
- {
- peerURL: okPeer,
- client: &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusConflict,
- },
- body: []byte(`{"`),
- },
- },
-
- // fail to unmarshal body on StatusCreated
- {
- peerURL: okPeer,
- client: &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusCreated,
- },
- body: []byte(`{"id":"XX`),
- },
- },
- }
-
- for i, tt := range tests {
- mAPI := &httpMembersAPI{client: tt.client}
- m, err := mAPI.Add(context.Background(), tt.peerURL)
- if err == nil {
- t.Errorf("#%d: got nil err", i)
- }
- if tt.wantErr != nil && !reflect.DeepEqual(tt.wantErr, err) {
- t.Errorf("#%d: incorrect error: want=%#v got=%#v", i, tt.wantErr, err)
- }
- if m != nil {
- t.Errorf("#%d: got non-nil Member", i)
- }
- }
-}
-
-func TestHTTPMembersAPIRemoveSuccess(t *testing.T) {
- wantAction := &membersAPIActionRemove{
- memberID: "94088180e21eb87b",
- }
-
- mAPI := &httpMembersAPI{
- client: &actionAssertingHTTPClient{
- t: t,
- act: wantAction,
- resp: http.Response{
- StatusCode: http.StatusNoContent,
- },
- },
- }
-
- if err := mAPI.Remove(context.Background(), "94088180e21eb87b"); err != nil {
- t.Errorf("got non-nil err: %#v", err)
- }
-}
-
-func TestHTTPMembersAPIRemoveFail(t *testing.T) {
- tests := []httpClient{
- // generic error
- &staticHTTPClient{
- err: errors.New("fail!"),
- },
-
- // unexpected HTTP status code
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusInternalServerError,
- },
- },
- }
-
- for i, tt := range tests {
- mAPI := &httpMembersAPI{client: tt}
- if err := mAPI.Remove(context.Background(), "94088180e21eb87b"); err == nil {
- t.Errorf("#%d: got nil err", i)
- }
- }
-}
-
-func TestHTTPMembersAPIListSuccess(t *testing.T) {
- wantAction := &membersAPIActionList{}
- mAPI := &httpMembersAPI{
- client: &actionAssertingHTTPClient{
- t: t,
- act: wantAction,
- resp: http.Response{
- StatusCode: http.StatusOK,
- },
- body: []byte(`{"members":[{"id":"94088180e21eb87b","name":"node2","peerURLs":["http://127.0.0.1:7002"],"clientURLs":["http://127.0.0.1:4002"]}]}`),
- },
- }
-
- wantResponseMembers := []Member{
- {
- ID: "94088180e21eb87b",
- Name: "node2",
- PeerURLs: []string{"http://127.0.0.1:7002"},
- ClientURLs: []string{"http://127.0.0.1:4002"},
- },
- }
-
- m, err := mAPI.List(context.Background())
- if err != nil {
- t.Errorf("got non-nil err: %#v", err)
- }
- if !reflect.DeepEqual(wantResponseMembers, m) {
- t.Errorf("incorrect Members: want=%#v got=%#v", wantResponseMembers, m)
- }
-}
-
-func TestHTTPMembersAPIListError(t *testing.T) {
- tests := []httpClient{
- // generic httpClient failure
- &staticHTTPClient{err: errors.New("fail!")},
-
- // unrecognized HTTP status code
- &staticHTTPClient{
- resp: http.Response{StatusCode: http.StatusTeapot},
- },
-
- // fail to unmarshal body on StatusOK
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusOK,
- },
- body: []byte(`[{"id":"XX`),
- },
- }
-
- for i, tt := range tests {
- mAPI := &httpMembersAPI{client: tt}
- ms, err := mAPI.List(context.Background())
- if err == nil {
- t.Errorf("#%d: got nil err", i)
- }
- if ms != nil {
- t.Errorf("#%d: got non-nil Member slice", i)
- }
- }
-}
-
-func TestHTTPMembersAPILeaderSuccess(t *testing.T) {
- wantAction := &membersAPIActionLeader{}
- mAPI := &httpMembersAPI{
- client: &actionAssertingHTTPClient{
- t: t,
- act: wantAction,
- resp: http.Response{
- StatusCode: http.StatusOK,
- },
- body: []byte(`{"id":"94088180e21eb87b","name":"node2","peerURLs":["http://127.0.0.1:7002"],"clientURLs":["http://127.0.0.1:4002"]}`),
- },
- }
-
- wantResponseMember := &Member{
- ID: "94088180e21eb87b",
- Name: "node2",
- PeerURLs: []string{"http://127.0.0.1:7002"},
- ClientURLs: []string{"http://127.0.0.1:4002"},
- }
-
- m, err := mAPI.Leader(context.Background())
- if err != nil {
- t.Errorf("err = %v, want %v", err, nil)
- }
- if !reflect.DeepEqual(wantResponseMember, m) {
- t.Errorf("incorrect member: member = %v, want %v", wantResponseMember, m)
- }
-}
-
-func TestHTTPMembersAPILeaderError(t *testing.T) {
- tests := []httpClient{
- // generic httpClient failure
- &staticHTTPClient{err: errors.New("fail!")},
-
- // unrecognized HTTP status code
- &staticHTTPClient{
- resp: http.Response{StatusCode: http.StatusTeapot},
- },
-
- // fail to unmarshal body on StatusOK
- &staticHTTPClient{
- resp: http.Response{
- StatusCode: http.StatusOK,
- },
- body: []byte(`[{"id":"XX`),
- },
- }
-
- for i, tt := range tests {
- mAPI := &httpMembersAPI{client: tt}
- m, err := mAPI.Leader(context.Background())
- if err == nil {
- t.Errorf("#%d: err = nil, want not nil", i)
- }
- if m != nil {
- t.Errorf("member slice = %v, want nil", m)
- }
- }
-}
diff --git a/etcd-fix/client/v2/util.go b/etcd-fix/client/v2/util.go
deleted file mode 100644
index 15a8bab..0000000
--- a/etcd-fix/client/v2/util.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package client
-
-import (
- "regexp"
-)
-
-var (
- roleNotFoundRegExp *regexp.Regexp
- userNotFoundRegExp *regexp.Regexp
-)
-
-func init() {
- roleNotFoundRegExp = regexp.MustCompile("auth: Role .* does not exist.")
- userNotFoundRegExp = regexp.MustCompile("auth: User .* does not exist.")
-}
-
-// IsKeyNotFound returns true if the error code is ErrorCodeKeyNotFound.
-func IsKeyNotFound(err error) bool {
- if cErr, ok := err.(Error); ok {
- return cErr.Code == ErrorCodeKeyNotFound
- }
- return false
-}
-
-// IsRoleNotFound returns true if the error means role not found of v2 API.
-func IsRoleNotFound(err error) bool {
- if ae, ok := err.(authError); ok {
- return roleNotFoundRegExp.MatchString(ae.Message)
- }
- return false
-}
-
-// IsUserNotFound returns true if the error means user not found of v2 API.
-func IsUserNotFound(err error) bool {
- if ae, ok := err.(authError); ok {
- return userNotFoundRegExp.MatchString(ae.Message)
- }
- return false
-}
diff --git a/etcd-fix/client/v3/LICENSE b/etcd-fix/client/v3/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/etcd-fix/client/v3/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/etcd-fix/client/v3/README.md b/etcd-fix/client/v3/README.md
deleted file mode 100644
index d64d346..0000000
--- a/etcd-fix/client/v3/README.md
+++ /dev/null
@@ -1,92 +0,0 @@
-# etcd/clientv3
-
-[![Docs](https://img.shields.io/badge/docs-latest-green.svg)](https://etcd.io/docs)
-[![Godoc](https://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](https://godoc.org/go.etcd.io/etcd/clientv3)
-
-`etcd/clientv3` is the official Go etcd client for v3.
-
-## Install
-
-```bash
-go get go.etcd.io/etcd/client/v3
-```
-
-Warning: As etcd 3.5.0 was not yet released, the command above does not work.
-After first pre-release of 3.5.0 [#12498](https://github.com/etcd-io/etcd/issues/12498),
-etcd can be referenced using:
-```
-go get go.etcd.io/etcd/client/v3@v3.5.0-pre
-```
-
-## Get started
-
-Create client using `clientv3.New`:
-
-```go
-cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
- DialTimeout: 5 * time.Second,
-})
-if err != nil {
- // handle error!
-}
-defer cli.Close()
-```
-
-etcd v3 uses [`gRPC`](https://www.grpc.io) for remote procedure calls. And `clientv3` uses
-[`grpc-go`](https://github.com/grpc/grpc-go) to connect to etcd. Make sure to close the client after using it.
-If the client is not closed, the connection will have leaky goroutines. To specify client request timeout,
-pass `context.WithTimeout` to APIs:
-
-```go
-ctx, cancel := context.WithTimeout(context.Background(), timeout)
-resp, err := cli.Put(ctx, "sample_key", "sample_value")
-cancel()
-if err != nil {
- // handle error!
-}
-// use the response
-```
-
-For full compatibility, it is recommended to install released versions of clients using go modules.
-
-## Error Handling
-
-etcd client returns 2 types of errors:
-
-1. context error: canceled or deadline exceeded.
-2. gRPC error: see [api/v3rpc/rpctypes](https://godoc.org/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes).
-
-Here is the example code to handle client errors:
-
-```go
-resp, err := cli.Put(ctx, "", "")
-if err != nil {
- switch err {
- case context.Canceled:
- log.Fatalf("ctx is canceled by another routine: %v", err)
- case context.DeadlineExceeded:
- log.Fatalf("ctx is attached with a deadline is exceeded: %v", err)
- case rpctypes.ErrEmptyKey:
- log.Fatalf("client-side error: %v", err)
- default:
- log.Fatalf("bad cluster endpoints, which are not etcd servers: %v", err)
- }
-}
-```
-
-## Metrics
-
-The etcd client optionally exposes RPC metrics through [go-grpc-prometheus](https://github.com/grpc-ecosystem/go-grpc-prometheus). See the [examples](https://github.com/etcd-io/etcd/blob/master/clientv3/example_metrics_test.go).
-
-## Namespacing
-
-The [namespace](https://godoc.org/go.etcd.io/etcd/clientv3/namespace) package provides `clientv3` interface wrappers to transparently isolate client requests to a user-defined prefix.
-
-## Request size limit
-
-Client request size limit is configurable via `clientv3.Config.MaxCallSendMsgSize` and `MaxCallRecvMsgSize` in bytes. If none given, client request send limit defaults to 2 MiB including gRPC overhead bytes. And receive limit defaults to `math.MaxInt32`.
-
-## Examples
-
-More code examples can be found at [GoDoc](https://godoc.org/go.etcd.io/etcd/clientv3).
diff --git a/etcd-fix/client/v3/auth.go b/etcd-fix/client/v3/auth.go
deleted file mode 100644
index a6f75d3..0000000
--- a/etcd-fix/client/v3/auth.go
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "fmt"
- "strings"
-
- "go.etcd.io/etcd/api/v3/authpb"
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "google.golang.org/grpc"
-)
-
-type (
- AuthEnableResponse pb.AuthEnableResponse
- AuthDisableResponse pb.AuthDisableResponse
- AuthStatusResponse pb.AuthStatusResponse
- AuthenticateResponse pb.AuthenticateResponse
- AuthUserAddResponse pb.AuthUserAddResponse
- AuthUserDeleteResponse pb.AuthUserDeleteResponse
- AuthUserChangePasswordResponse pb.AuthUserChangePasswordResponse
- AuthUserGrantRoleResponse pb.AuthUserGrantRoleResponse
- AuthUserGetResponse pb.AuthUserGetResponse
- AuthUserRevokeRoleResponse pb.AuthUserRevokeRoleResponse
- AuthRoleAddResponse pb.AuthRoleAddResponse
- AuthRoleGrantPermissionResponse pb.AuthRoleGrantPermissionResponse
- AuthRoleGetResponse pb.AuthRoleGetResponse
- AuthRoleRevokePermissionResponse pb.AuthRoleRevokePermissionResponse
- AuthRoleDeleteResponse pb.AuthRoleDeleteResponse
- AuthUserListResponse pb.AuthUserListResponse
- AuthRoleListResponse pb.AuthRoleListResponse
-
- PermissionType authpb.Permission_Type
- Permission authpb.Permission
-)
-
-const (
- PermRead = authpb.READ
- PermWrite = authpb.WRITE
- PermReadWrite = authpb.READWRITE
-)
-
-type UserAddOptions authpb.UserAddOptions
-
-type Auth interface {
- // Authenticate login and get token
- Authenticate(ctx context.Context, name string, password string) (*AuthenticateResponse, error)
-
- // AuthEnable enables auth of an etcd cluster.
- AuthEnable(ctx context.Context) (*AuthEnableResponse, error)
-
- // AuthDisable disables auth of an etcd cluster.
- AuthDisable(ctx context.Context) (*AuthDisableResponse, error)
-
- // AuthStatus returns the status of auth of an etcd cluster.
- AuthStatus(ctx context.Context) (*AuthStatusResponse, error)
-
- // UserAdd adds a new user to an etcd cluster.
- UserAdd(ctx context.Context, name string, password string) (*AuthUserAddResponse, error)
-
- // UserAddWithOptions adds a new user to an etcd cluster with some options.
- UserAddWithOptions(ctx context.Context, name string, password string, opt *UserAddOptions) (*AuthUserAddResponse, error)
-
- // UserDelete deletes a user from an etcd cluster.
- UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error)
-
- // UserChangePassword changes a password of a user.
- UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error)
-
- // UserGrantRole grants a role to a user.
- UserGrantRole(ctx context.Context, user string, role string) (*AuthUserGrantRoleResponse, error)
-
- // UserGet gets a detailed information of a user.
- UserGet(ctx context.Context, name string) (*AuthUserGetResponse, error)
-
- // UserList gets a list of all users.
- UserList(ctx context.Context) (*AuthUserListResponse, error)
-
- // UserRevokeRole revokes a role of a user.
- UserRevokeRole(ctx context.Context, name string, role string) (*AuthUserRevokeRoleResponse, error)
-
- // RoleAdd adds a new role to an etcd cluster.
- RoleAdd(ctx context.Context, name string) (*AuthRoleAddResponse, error)
-
- // RoleGrantPermission grants a permission to a role.
- RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType PermissionType) (*AuthRoleGrantPermissionResponse, error)
-
- // RoleGet gets a detailed information of a role.
- RoleGet(ctx context.Context, role string) (*AuthRoleGetResponse, error)
-
- // RoleList gets a list of all roles.
- RoleList(ctx context.Context) (*AuthRoleListResponse, error)
-
- // RoleRevokePermission revokes a permission from a role.
- RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*AuthRoleRevokePermissionResponse, error)
-
- // RoleDelete deletes a role.
- RoleDelete(ctx context.Context, role string) (*AuthRoleDeleteResponse, error)
-}
-
-type authClient struct {
- remote pb.AuthClient
- callOpts []grpc.CallOption
-}
-
-func NewAuth(c *Client) Auth {
- api := &authClient{remote: RetryAuthClient(c)}
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func NewAuthFromAuthClient(remote pb.AuthClient, c *Client) Auth {
- api := &authClient{remote: remote}
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func (auth *authClient) Authenticate(ctx context.Context, name string, password string) (*AuthenticateResponse, error) {
- resp, err := auth.remote.Authenticate(ctx, &pb.AuthenticateRequest{Name: name, Password: password}, auth.callOpts...)
- return (*AuthenticateResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) AuthEnable(ctx context.Context) (*AuthEnableResponse, error) {
- resp, err := auth.remote.AuthEnable(ctx, &pb.AuthEnableRequest{}, auth.callOpts...)
- return (*AuthEnableResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) AuthDisable(ctx context.Context) (*AuthDisableResponse, error) {
- resp, err := auth.remote.AuthDisable(ctx, &pb.AuthDisableRequest{}, auth.callOpts...)
- return (*AuthDisableResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) AuthStatus(ctx context.Context) (*AuthStatusResponse, error) {
- resp, err := auth.remote.AuthStatus(ctx, &pb.AuthStatusRequest{}, auth.callOpts...)
- return (*AuthStatusResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserAdd(ctx context.Context, name string, password string) (*AuthUserAddResponse, error) {
- resp, err := auth.remote.UserAdd(ctx, &pb.AuthUserAddRequest{Name: name, Password: password, Options: &authpb.UserAddOptions{NoPassword: false}}, auth.callOpts...)
- return (*AuthUserAddResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserAddWithOptions(ctx context.Context, name string, password string, options *UserAddOptions) (*AuthUserAddResponse, error) {
- resp, err := auth.remote.UserAdd(ctx, &pb.AuthUserAddRequest{Name: name, Password: password, Options: (*authpb.UserAddOptions)(options)}, auth.callOpts...)
- return (*AuthUserAddResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error) {
- resp, err := auth.remote.UserDelete(ctx, &pb.AuthUserDeleteRequest{Name: name}, auth.callOpts...)
- return (*AuthUserDeleteResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error) {
- resp, err := auth.remote.UserChangePassword(ctx, &pb.AuthUserChangePasswordRequest{Name: name, Password: password}, auth.callOpts...)
- return (*AuthUserChangePasswordResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserGrantRole(ctx context.Context, user string, role string) (*AuthUserGrantRoleResponse, error) {
- resp, err := auth.remote.UserGrantRole(ctx, &pb.AuthUserGrantRoleRequest{User: user, Role: role}, auth.callOpts...)
- return (*AuthUserGrantRoleResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserGet(ctx context.Context, name string) (*AuthUserGetResponse, error) {
- resp, err := auth.remote.UserGet(ctx, &pb.AuthUserGetRequest{Name: name}, auth.callOpts...)
- return (*AuthUserGetResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserList(ctx context.Context) (*AuthUserListResponse, error) {
- resp, err := auth.remote.UserList(ctx, &pb.AuthUserListRequest{}, auth.callOpts...)
- return (*AuthUserListResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) UserRevokeRole(ctx context.Context, name string, role string) (*AuthUserRevokeRoleResponse, error) {
- resp, err := auth.remote.UserRevokeRole(ctx, &pb.AuthUserRevokeRoleRequest{Name: name, Role: role}, auth.callOpts...)
- return (*AuthUserRevokeRoleResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) RoleAdd(ctx context.Context, name string) (*AuthRoleAddResponse, error) {
- resp, err := auth.remote.RoleAdd(ctx, &pb.AuthRoleAddRequest{Name: name}, auth.callOpts...)
- return (*AuthRoleAddResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType PermissionType) (*AuthRoleGrantPermissionResponse, error) {
- perm := &authpb.Permission{
- Key: []byte(key),
- RangeEnd: []byte(rangeEnd),
- PermType: authpb.Permission_Type(permType),
- }
- resp, err := auth.remote.RoleGrantPermission(ctx, &pb.AuthRoleGrantPermissionRequest{Name: name, Perm: perm}, auth.callOpts...)
- return (*AuthRoleGrantPermissionResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) RoleGet(ctx context.Context, role string) (*AuthRoleGetResponse, error) {
- resp, err := auth.remote.RoleGet(ctx, &pb.AuthRoleGetRequest{Role: role}, auth.callOpts...)
- return (*AuthRoleGetResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) RoleList(ctx context.Context) (*AuthRoleListResponse, error) {
- resp, err := auth.remote.RoleList(ctx, &pb.AuthRoleListRequest{}, auth.callOpts...)
- return (*AuthRoleListResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*AuthRoleRevokePermissionResponse, error) {
- resp, err := auth.remote.RoleRevokePermission(ctx, &pb.AuthRoleRevokePermissionRequest{Role: role, Key: []byte(key), RangeEnd: []byte(rangeEnd)}, auth.callOpts...)
- return (*AuthRoleRevokePermissionResponse)(resp), toErr(ctx, err)
-}
-
-func (auth *authClient) RoleDelete(ctx context.Context, role string) (*AuthRoleDeleteResponse, error) {
- resp, err := auth.remote.RoleDelete(ctx, &pb.AuthRoleDeleteRequest{Role: role}, auth.callOpts...)
- return (*AuthRoleDeleteResponse)(resp), toErr(ctx, err)
-}
-
-func StrToPermissionType(s string) (PermissionType, error) {
- val, ok := authpb.Permission_Type_value[strings.ToUpper(s)]
- if ok {
- return PermissionType(val), nil
- }
- return PermissionType(-1), fmt.Errorf("invalid permission type: %s", s)
-}
diff --git a/etcd-fix/client/v3/balancer/balancer.go b/etcd-fix/client/v3/balancer/balancer.go
deleted file mode 100644
index 6e536dc..0000000
--- a/etcd-fix/client/v3/balancer/balancer.go
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package balancer implements client balancer.
-package balancer
-
-import (
- "strconv"
- "sync"
- "time"
-
- "go.etcd.io/etcd/client/v3/balancer/connectivity"
- "go.etcd.io/etcd/client/v3/balancer/picker"
-
- "go.uber.org/zap"
- "google.golang.org/grpc/balancer"
- grpcconnectivity "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/resolver"
- _ "google.golang.org/grpc/resolver/dns" // register DNS resolver
- _ "google.golang.org/grpc/resolver/passthrough" // register passthrough resolver
-)
-
-// Config defines balancer configurations.
-type Config struct {
- // Policy configures balancer policy.
- Policy picker.Policy
-
- // Picker implements gRPC picker.
- // Leave empty if "Policy" field is not custom.
- // TODO: currently custom policy is not supported.
- // Picker picker.Picker
-
- // Name defines an additional name for balancer.
- // Useful for balancer testing to avoid register conflicts.
- // If empty, defaults to policy name.
- Name string
-
- // Logger configures balancer logging.
- // If nil, logs are discarded.
- Logger *zap.Logger
-}
-
-// RegisterBuilder creates and registers a builder. Since this function calls balancer.Register, it
-// must be invoked at initialization time.
-func RegisterBuilder(cfg Config) {
- bb := &builder{cfg}
- balancer.Register(bb)
-
- bb.cfg.Logger.Debug(
- "registered balancer",
- zap.String("policy", bb.cfg.Policy.String()),
- zap.String("name", bb.cfg.Name),
- )
-}
-
-type builder struct {
- cfg Config
-}
-
-// Build is called initially when creating "ccBalancerWrapper".
-// "grpc.Dial" is called to this client connection.
-// Then, resolved addresses will be handled via "HandleResolvedAddrs".
-func (b *builder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer {
- bb := &baseBalancer{
- id: strconv.FormatInt(time.Now().UnixNano(), 36),
- policy: b.cfg.Policy,
- name: b.cfg.Name,
- lg: b.cfg.Logger,
-
- addrToSc: make(map[resolver.Address]balancer.SubConn),
- scToAddr: make(map[balancer.SubConn]resolver.Address),
- scToSt: make(map[balancer.SubConn]grpcconnectivity.State),
-
- currentConn: nil,
- connectivityRecorder: connectivity.New(b.cfg.Logger),
-
- // initialize picker always returns "ErrNoSubConnAvailable"
- picker: picker.NewErr(balancer.ErrNoSubConnAvailable),
- }
-
- // TODO: support multiple connections
- bb.mu.Lock()
- bb.currentConn = cc
- bb.mu.Unlock()
-
- bb.lg.Info(
- "built balancer",
- zap.String("balancer-id", bb.id),
- zap.String("policy", bb.policy.String()),
- zap.String("resolver-target", cc.Target()),
- )
- return bb
-}
-
-// Name implements "grpc/balancer.Builder" interface.
-func (b *builder) Name() string { return b.cfg.Name }
-
-// Balancer defines client balancer interface.
-type Balancer interface {
- // Balancer is called on specified client connection. Client initiates gRPC
- // connection with "grpc.Dial(addr, grpc.WithBalancerName)", and then those resolved
- // addresses are passed to "grpc/balancer.Balancer.HandleResolvedAddrs".
- // For each resolved address, balancer calls "balancer.ClientConn.NewSubConn".
- // "grpc/balancer.Balancer.HandleSubConnStateChange" is called when connectivity state
- // changes, thus requires failover logic in this method.
- balancer.Balancer
-
- // Picker calls "Pick" for every client request.
- picker.Picker
-}
-
-type baseBalancer struct {
- id string
- policy picker.Policy
- name string
- lg *zap.Logger
-
- mu sync.RWMutex
-
- addrToSc map[resolver.Address]balancer.SubConn
- scToAddr map[balancer.SubConn]resolver.Address
- scToSt map[balancer.SubConn]grpcconnectivity.State
-
- currentConn balancer.ClientConn
- connectivityRecorder connectivity.Recorder
-
- picker picker.Picker
-}
-
-// HandleResolvedAddrs implements "grpc/balancer.Balancer" interface.
-// gRPC sends initial or updated resolved addresses from "Build".
-func (bb *baseBalancer) HandleResolvedAddrs(addrs []resolver.Address, err error) {
- if err != nil {
- bb.lg.Warn("HandleResolvedAddrs called with error", zap.String("balancer-id", bb.id), zap.Error(err))
- return
- }
- bb.lg.Info("resolved",
- zap.String("picker", bb.picker.String()),
- zap.String("balancer-id", bb.id),
- zap.Strings("addresses", addrsToStrings(addrs)),
- )
-
- bb.mu.Lock()
- defer bb.mu.Unlock()
-
- resolved := make(map[resolver.Address]struct{})
- for _, addr := range addrs {
- resolved[addr] = struct{}{}
- if _, ok := bb.addrToSc[addr]; !ok {
- sc, err := bb.currentConn.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{})
- if err != nil {
- bb.lg.Warn("NewSubConn failed", zap.String("picker", bb.picker.String()), zap.String("balancer-id", bb.id), zap.Error(err), zap.String("address", addr.Addr))
- continue
- }
- bb.lg.Info("created subconn", zap.String("address", addr.Addr))
- bb.addrToSc[addr] = sc
- bb.scToAddr[sc] = addr
- bb.scToSt[sc] = grpcconnectivity.Idle
- sc.Connect()
- }
- }
-
- for addr, sc := range bb.addrToSc {
- if _, ok := resolved[addr]; !ok {
- // was removed by resolver or failed to create subconn
- bb.currentConn.RemoveSubConn(sc)
- delete(bb.addrToSc, addr)
-
- bb.lg.Info(
- "removed subconn",
- zap.String("picker", bb.picker.String()),
- zap.String("balancer-id", bb.id),
- zap.String("address", addr.Addr),
- zap.String("subconn", scToString(sc)),
- )
-
- // Keep the state of this sc in bb.scToSt until sc's state becomes Shutdown.
- // The entry will be deleted in HandleSubConnStateChange.
- // (DO NOT) delete(bb.scToAddr, sc)
- // (DO NOT) delete(bb.scToSt, sc)
- }
- }
-}
-
-// HandleSubConnStateChange implements "grpc/balancer.Balancer" interface.
-func (bb *baseBalancer) UpdateSubConnState(sc balancer.SubConn, scs balancer.SubConnState) {
- bb.mu.Lock()
- defer bb.mu.Unlock()
-
- s := scs.ConnectivityState
-
- old, ok := bb.scToSt[sc]
- if !ok {
- bb.lg.Warn(
- "state change for an unknown subconn",
- zap.String("picker", bb.picker.String()),
- zap.String("balancer-id", bb.id),
- zap.String("subconn", scToString(sc)),
- zap.Int("subconn-size", len(bb.scToAddr)),
- zap.String("state", s.String()),
- )
- return
- }
-
- bb.lg.Info(
- "state changed",
- zap.String("picker", bb.picker.String()),
- zap.String("balancer-id", bb.id),
- zap.Bool("connected", s == grpcconnectivity.Ready),
- zap.String("subconn", scToString(sc)),
- zap.Int("subconn-size", len(bb.scToAddr)),
- zap.String("address", bb.scToAddr[sc].Addr),
- zap.String("old-state", old.String()),
- zap.String("new-state", s.String()),
- )
-
- bb.scToSt[sc] = s
- switch s {
- case grpcconnectivity.Idle:
- sc.Connect()
- case grpcconnectivity.Shutdown:
- // When an address was removed by resolver, b called RemoveSubConn but
- // kept the sc's state in scToSt. Remove state for this sc here.
- delete(bb.scToAddr, sc)
- delete(bb.scToSt, sc)
- }
-
- oldAggrState := bb.connectivityRecorder.GetCurrentState()
- bb.connectivityRecorder.RecordTransition(old, s)
-
- // Update balancer picker when one of the following happens:
- // - this sc became ready from not-ready
- // - this sc became not-ready from ready
- // - the aggregated state of balancer became TransientFailure from non-TransientFailure
- // - the aggregated state of balancer became non-TransientFailure from TransientFailure
- if (s == grpcconnectivity.Ready) != (old == grpcconnectivity.Ready) ||
- (bb.connectivityRecorder.GetCurrentState() == grpcconnectivity.TransientFailure) != (oldAggrState == grpcconnectivity.TransientFailure) {
- bb.updatePicker()
- }
-
- bb.currentConn.UpdateState(balancer.State{
- ConnectivityState: bb.connectivityRecorder.GetCurrentState(),
- Picker: bb.picker,
- })
-}
-
-func (bb *baseBalancer) updatePicker() {
- if bb.connectivityRecorder.GetCurrentState() == grpcconnectivity.TransientFailure {
- bb.picker = picker.NewErr(balancer.ErrTransientFailure)
- bb.lg.Info(
- "updated picker to transient error picker",
- zap.String("picker", bb.picker.String()),
- zap.String("balancer-id", bb.id),
- zap.String("policy", bb.policy.String()),
- )
- return
- }
-
- // only pass ready subconns to picker
- scToAddr := make(map[balancer.SubConn]resolver.Address)
- for addr, sc := range bb.addrToSc {
- if st, ok := bb.scToSt[sc]; ok && st == grpcconnectivity.Ready {
- scToAddr[sc] = addr
- }
- }
-
- bb.picker = picker.New(picker.Config{
- Policy: bb.policy,
- Logger: bb.lg,
- SubConnToResolverAddress: scToAddr,
- })
- bb.lg.Info(
- "updated picker",
- zap.String("picker", bb.picker.String()),
- zap.String("balancer-id", bb.id),
- zap.String("policy", bb.policy.String()),
- zap.Strings("subconn-ready", scsToStrings(scToAddr)),
- zap.Int("subconn-size", len(scToAddr)),
- )
-}
-
-// Close implements "grpc/balancer.Balancer" interface.
-// Close is a nop because base balancer doesn't have internal state to clean up,
-// and it doesn't need to call RemoveSubConn for the SubConns.
-func (bb *baseBalancer) Close() {
- // TODO
-}
-
-func (bb *baseBalancer) ResolverError(err error) {
- // TODO
-}
-
-func (bb *baseBalancer) UpdateClientConnState(_ balancer.ClientConnState) error {
- // TODO
- return nil
-}
diff --git a/etcd-fix/client/v3/balancer/balancer_test.go b/etcd-fix/client/v3/balancer/balancer_test.go
deleted file mode 100644
index 5a70b35..0000000
--- a/etcd-fix/client/v3/balancer/balancer_test.go
+++ /dev/null
@@ -1,310 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package balancer
-
-import (
- "context"
- "fmt"
- "strings"
- "testing"
- "time"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/client/v3/balancer/picker"
- "go.etcd.io/etcd/client/v3/balancer/resolver/endpoint"
- "go.etcd.io/etcd/client/v3/mock/mockserver"
-
- "go.uber.org/zap"
- "google.golang.org/grpc"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/status"
-)
-
-// TestRoundRobinBalancedResolvableNoFailover ensures that
-// requests to a resolvable endpoint can be balanced between
-// multiple, if any, nodes. And there needs be no failover.
-func TestRoundRobinBalancedResolvableNoFailover(t *testing.T) {
- testCases := []struct {
- name string
- serverCount int
- reqN int
- network string
- }{
- {name: "rrBalanced_1", serverCount: 1, reqN: 5, network: "tcp"},
- {name: "rrBalanced_1_unix_sockets", serverCount: 1, reqN: 5, network: "unix"},
- {name: "rrBalanced_3", serverCount: 3, reqN: 7, network: "tcp"},
- {name: "rrBalanced_5", serverCount: 5, reqN: 10, network: "tcp"},
- }
-
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- ms, err := mockserver.StartMockServersOnNetwork(tc.serverCount, tc.network)
- if err != nil {
- t.Fatalf("failed to start mock servers: %v", err)
- }
- defer ms.Stop()
-
- var eps []string
- for _, svr := range ms.Servers {
- eps = append(eps, svr.ResolverAddress().Addr)
- }
-
- rsv, err := endpoint.NewResolverGroup("nofailover")
- if err != nil {
- t.Fatal(err)
- }
- defer rsv.Close()
- rsv.SetEndpoints(eps)
-
- name := genName()
- cfg := Config{
- Policy: picker.RoundrobinBalanced,
- Name: name,
- Logger: zap.NewExample(),
- }
- RegisterBuilder(cfg)
- conn, err := grpc.Dial(fmt.Sprintf("endpoint://nofailover/*"), grpc.WithInsecure(), grpc.WithBalancerName(name))
- if err != nil {
- t.Fatalf("failed to dial mock server: %v", err)
- }
- defer conn.Close()
- cli := pb.NewKVClient(conn)
-
- reqFunc := func(ctx context.Context) (picked string, err error) {
- var p peer.Peer
- _, err = cli.Range(ctx, &pb.RangeRequest{Key: []byte("/x")}, grpc.Peer(&p))
- if p.Addr != nil {
- picked = p.Addr.String()
- }
- return picked, err
- }
-
- prev, switches := "", 0
- for i := 0; i < tc.reqN; i++ {
- picked, err := reqFunc(context.Background())
- if err != nil {
- t.Fatalf("#%d: unexpected failure %v", i, err)
- }
- if prev == "" {
- prev = picked
- continue
- }
- if prev != picked {
- switches++
- }
- prev = picked
- }
- if tc.serverCount > 1 && switches < tc.reqN-3 { // -3 for initial resolutions
- // TODO: FIX ME
- t.Skipf("expected balanced loads for %d requests, got switches %d", tc.reqN, switches)
- }
- })
- }
-}
-
-// TestRoundRobinBalancedResolvableFailoverFromServerFail ensures that
-// loads be rebalanced while one server goes down and comes back.
-func TestRoundRobinBalancedResolvableFailoverFromServerFail(t *testing.T) {
- serverCount := 5
- ms, err := mockserver.StartMockServers(serverCount)
- if err != nil {
- t.Fatalf("failed to start mock servers: %s", err)
- }
- defer ms.Stop()
- var eps []string
- for _, svr := range ms.Servers {
- eps = append(eps, svr.ResolverAddress().Addr)
- }
-
- rsv, err := endpoint.NewResolverGroup("serverfail")
- if err != nil {
- t.Fatal(err)
- }
- defer rsv.Close()
- rsv.SetEndpoints(eps)
-
- name := genName()
- cfg := Config{
- Policy: picker.RoundrobinBalanced,
- Name: name,
- Logger: zap.NewExample(),
- }
- RegisterBuilder(cfg)
- conn, err := grpc.Dial(fmt.Sprintf("endpoint://serverfail/mock.server"), grpc.WithInsecure(), grpc.WithBalancerName(name))
- if err != nil {
- t.Fatalf("failed to dial mock server: %s", err)
- }
- defer conn.Close()
- cli := pb.NewKVClient(conn)
-
- reqFunc := func(ctx context.Context) (picked string, err error) {
- var p peer.Peer
- _, err = cli.Range(ctx, &pb.RangeRequest{Key: []byte("/x")}, grpc.Peer(&p))
- if p.Addr != nil {
- picked = p.Addr.String()
- }
- return picked, err
- }
-
- // stop first server, loads should be redistributed
- // stopped server should never be picked
- ms.StopAt(0)
- available := make(map[string]struct{})
- for i := 1; i < serverCount; i++ {
- available[eps[i]] = struct{}{}
- }
-
- reqN := 10
- prev, switches := "", 0
- for i := 0; i < reqN; i++ {
- picked, err := reqFunc(context.Background())
- if err != nil && strings.Contains(err.Error(), "transport is closing") {
- continue
- }
- if prev == "" { // first failover
- if eps[0] == picked {
- t.Fatalf("expected failover from %q, picked %q", eps[0], picked)
- }
- prev = picked
- continue
- }
- if _, ok := available[picked]; !ok {
- t.Fatalf("picked unavailable address %q (available %v)", picked, available)
- }
- if prev != picked {
- switches++
- }
- prev = picked
- }
- if switches < reqN-3 { // -3 for initial resolutions + failover
- // TODO: FIX ME!
- t.Skipf("expected balanced loads for %d requests, got switches %d", reqN, switches)
- }
-
- // now failed server comes back
- ms.StartAt(0)
-
- // enough time for reconnecting to recovered server
- time.Sleep(time.Second)
-
- prev, switches = "", 0
- recoveredAddr, recovered := eps[0], 0
- available[recoveredAddr] = struct{}{}
-
- for i := 0; i < 2*reqN; i++ {
- picked, err := reqFunc(context.Background())
- if err != nil {
- t.Fatalf("#%d: unexpected failure %v", i, err)
- }
- if prev == "" {
- prev = picked
- continue
- }
- if _, ok := available[picked]; !ok {
- t.Fatalf("#%d: picked unavailable address %q (available %v)", i, picked, available)
- }
- if prev != picked {
- switches++
- }
- if picked == recoveredAddr {
- recovered++
- }
- prev = picked
- }
- if switches < reqN-3 { // -3 for initial resolutions
- t.Fatalf("expected balanced loads for %d requests, got switches %d", reqN, switches)
- }
- if recovered < reqN/serverCount {
- t.Fatalf("recovered server %q got only %d requests", recoveredAddr, recovered)
- }
-}
-
-// TestRoundRobinBalancedResolvableFailoverFromRequestFail ensures that
-// loads be rebalanced while some requests are failed.
-func TestRoundRobinBalancedResolvableFailoverFromRequestFail(t *testing.T) {
- serverCount := 5
- ms, err := mockserver.StartMockServers(serverCount)
- if err != nil {
- t.Fatalf("failed to start mock servers: %s", err)
- }
- defer ms.Stop()
- var eps []string
- available := make(map[string]struct{})
- for _, svr := range ms.Servers {
- eps = append(eps, svr.ResolverAddress().Addr)
- available[svr.Address] = struct{}{}
- }
- rsv, err := endpoint.NewResolverGroup("requestfail")
- if err != nil {
- t.Fatal(err)
- }
- defer rsv.Close()
- rsv.SetEndpoints(eps)
-
- name := genName()
- cfg := Config{
- Policy: picker.RoundrobinBalanced,
- Name: name,
- Logger: zap.NewExample(),
- }
- RegisterBuilder(cfg)
- conn, err := grpc.Dial(fmt.Sprintf("endpoint://requestfail/mock.server"), grpc.WithInsecure(), grpc.WithBalancerName(name))
- if err != nil {
- t.Fatalf("failed to dial mock server: %s", err)
- }
- defer conn.Close()
- cli := pb.NewKVClient(conn)
-
- reqFunc := func(ctx context.Context) (picked string, err error) {
- var p peer.Peer
- _, err = cli.Range(ctx, &pb.RangeRequest{Key: []byte("/x")}, grpc.Peer(&p))
- if p.Addr != nil {
- picked = p.Addr.String()
- }
- return picked, err
- }
-
- reqN := 20
- prev, switches := "", 0
- for i := 0; i < reqN; i++ {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
- if i%2 == 0 {
- cancel()
- }
- picked, err := reqFunc(ctx)
- if i%2 == 0 {
- if s, ok := status.FromError(err); ok && s.Code() != codes.Canceled || picked != "" {
- t.Fatalf("#%d: expected %v, got %v", i, context.Canceled, err)
- }
- continue
- }
- if prev == "" && picked != "" {
- prev = picked
- continue
- }
- if _, ok := available[picked]; !ok {
- t.Fatalf("#%d: picked unavailable address %q (available %v)", i, picked, available)
- }
- if prev != picked {
- switches++
- }
- prev = picked
- }
- if switches < reqN/2-3 { // -3 for initial resolutions + failover
- t.Fatalf("expected balanced loads for %d requests, got switches %d", reqN, switches)
- }
-}
diff --git a/etcd-fix/client/v3/balancer/connectivity/connectivity.go b/etcd-fix/client/v3/balancer/connectivity/connectivity.go
deleted file mode 100644
index 4c4ad36..0000000
--- a/etcd-fix/client/v3/balancer/connectivity/connectivity.go
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2019 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package connectivity implements client connectivity operations.
-package connectivity
-
-import (
- "sync"
-
- "go.uber.org/zap"
- "google.golang.org/grpc/connectivity"
-)
-
-// Recorder records gRPC connectivity.
-type Recorder interface {
- GetCurrentState() connectivity.State
- RecordTransition(oldState, newState connectivity.State)
-}
-
-// New returns a new Recorder.
-func New(lg *zap.Logger) Recorder {
- return &recorder{lg: lg}
-}
-
-// recorder takes the connectivity states of multiple SubConns
-// and returns one aggregated connectivity state.
-// ref. https://github.com/grpc/grpc-go/blob/master/balancer/balancer.go
-type recorder struct {
- lg *zap.Logger
-
- mu sync.RWMutex
-
- cur connectivity.State
-
- numReady uint64 // Number of addrConns in ready state.
- numConnecting uint64 // Number of addrConns in connecting state.
- numTransientFailure uint64 // Number of addrConns in transientFailure.
-}
-
-func (rc *recorder) GetCurrentState() (state connectivity.State) {
- rc.mu.RLock()
- defer rc.mu.RUnlock()
- return rc.cur
-}
-
-// RecordTransition records state change happening in subConn and based on that
-// it evaluates what aggregated state should be.
-//
-// - If at least one SubConn in Ready, the aggregated state is Ready;
-// - Else if at least one SubConn in Connecting, the aggregated state is Connecting;
-// - Else the aggregated state is TransientFailure.
-//
-// Idle and Shutdown are not considered.
-//
-// ref. https://github.com/grpc/grpc-go/blob/master/balancer/balancer.go
-func (rc *recorder) RecordTransition(oldState, newState connectivity.State) {
- rc.mu.Lock()
- defer rc.mu.Unlock()
-
- for idx, state := range []connectivity.State{oldState, newState} {
- updateVal := 2*uint64(idx) - 1 // -1 for oldState and +1 for new.
- switch state {
- case connectivity.Ready:
- rc.numReady += updateVal
- case connectivity.Connecting:
- rc.numConnecting += updateVal
- case connectivity.TransientFailure:
- rc.numTransientFailure += updateVal
- default:
- rc.lg.Warn("connectivity recorder received unknown state", zap.String("connectivity-state", state.String()))
- }
- }
-
- switch { // must be exclusive, no overlap
- case rc.numReady > 0:
- rc.cur = connectivity.Ready
- case rc.numConnecting > 0:
- rc.cur = connectivity.Connecting
- default:
- rc.cur = connectivity.TransientFailure
- }
-}
diff --git a/etcd-fix/client/v3/balancer/picker/doc.go b/etcd-fix/client/v3/balancer/picker/doc.go
deleted file mode 100644
index 35dabf5..0000000
--- a/etcd-fix/client/v3/balancer/picker/doc.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package picker defines/implements client balancer picker policy.
-package picker
diff --git a/etcd-fix/client/v3/balancer/picker/err.go b/etcd-fix/client/v3/balancer/picker/err.go
deleted file mode 100644
index a37baa7..0000000
--- a/etcd-fix/client/v3/balancer/picker/err.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package picker
-
-import (
- "google.golang.org/grpc/balancer"
-)
-
-// NewErr returns a picker that always returns err on "Pick".
-func NewErr(err error) Picker {
- return &errPicker{p: Error, err: err}
-}
-
-type errPicker struct {
- p Policy
- err error
-}
-
-func (ep *errPicker) String() string {
- return ep.p.String()
-}
-
-func (ep *errPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
- return balancer.PickResult{}, ep.err
-}
diff --git a/etcd-fix/client/v3/balancer/picker/picker.go b/etcd-fix/client/v3/balancer/picker/picker.go
deleted file mode 100644
index bd1a5d2..0000000
--- a/etcd-fix/client/v3/balancer/picker/picker.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package picker
-
-import (
- "fmt"
-
- "go.uber.org/zap"
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/resolver"
-)
-
-// Picker defines balancer Picker methods.
-type Picker interface {
- balancer.Picker
- String() string
-}
-
-// Config defines picker configuration.
-type Config struct {
- // Policy specifies etcd clientv3's built in balancer policy.
- Policy Policy
-
- // Logger defines picker logging object.
- Logger *zap.Logger
-
- // SubConnToResolverAddress maps each gRPC sub-connection to an address.
- // Basically, it is a list of addresses that the Picker can pick from.
- SubConnToResolverAddress map[balancer.SubConn]resolver.Address
-}
-
-// Policy defines balancer picker policy.
-type Policy uint8
-
-const (
- // Error is error picker policy.
- Error Policy = iota
-
- // RoundrobinBalanced balances loads over multiple endpoints
- // and implements failover in roundrobin fashion.
- RoundrobinBalanced
-
- // Custom defines custom balancer picker.
- // TODO: custom picker is not supported yet.
- Custom
-)
-
-func (p Policy) String() string {
- switch p {
- case Error:
- return "picker-error"
-
- case RoundrobinBalanced:
- return "picker-roundrobin-balanced"
-
- case Custom:
- panic("'custom' picker policy is not supported yet")
-
- default:
- panic(fmt.Errorf("invalid balancer picker policy (%d)", p))
- }
-}
-
-// New creates a new Picker.
-func New(cfg Config) Picker {
- switch cfg.Policy {
- case Error:
- panic("'error' picker policy is not supported here; use 'picker.NewErr'")
-
- case RoundrobinBalanced:
- return newRoundrobinBalanced(cfg)
-
- case Custom:
- panic("'custom' picker policy is not supported yet")
-
- default:
- panic(fmt.Errorf("invalid balancer picker policy (%d)", cfg.Policy))
- }
-}
diff --git a/etcd-fix/client/v3/balancer/picker/roundrobin_balanced.go b/etcd-fix/client/v3/balancer/picker/roundrobin_balanced.go
deleted file mode 100644
index 80781fa..0000000
--- a/etcd-fix/client/v3/balancer/picker/roundrobin_balanced.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package picker
-
-import (
- "sync"
-
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/resolver"
-)
-
-// newRoundrobinBalanced returns a new roundrobin balanced picker.
-func newRoundrobinBalanced(cfg Config) Picker {
- scs := make([]balancer.SubConn, 0, len(cfg.SubConnToResolverAddress))
- for sc := range cfg.SubConnToResolverAddress {
- scs = append(scs, sc)
- }
- return &rrBalanced{
- p: RoundrobinBalanced,
- lg: cfg.Logger,
- scs: scs,
- scToAddr: cfg.SubConnToResolverAddress,
- }
-}
-
-type rrBalanced struct {
- p Policy
-
- lg *zap.Logger
-
- mu sync.RWMutex
- next int
- scs []balancer.SubConn
- scToAddr map[balancer.SubConn]resolver.Address
-}
-
-func (rb *rrBalanced) String() string { return rb.p.String() }
-
-// Pick is called for every client request.
-func (rb *rrBalanced) Pick(opts balancer.PickInfo) (balancer.PickResult, error) {
- rb.mu.RLock()
- n := len(rb.scs)
- rb.mu.RUnlock()
- if n == 0 {
- return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
- }
-
- rb.mu.Lock()
- cur := rb.next
- sc := rb.scs[cur]
- picked := rb.scToAddr[sc].Addr
- rb.next = (rb.next + 1) % len(rb.scs)
- rb.mu.Unlock()
-
- rb.lg.Debug(
- "picked",
- zap.String("picker", rb.p.String()),
- zap.String("address", picked),
- zap.Int("subconn-index", cur),
- zap.Int("subconn-size", n),
- )
-
- doneFunc := func(info balancer.DoneInfo) {
- // TODO: error handling?
- fss := []zapcore.Field{
- zap.Error(info.Err),
- zap.String("picker", rb.p.String()),
- zap.String("address", picked),
- zap.Bool("success", info.Err == nil),
- zap.Bool("bytes-sent", info.BytesSent),
- zap.Bool("bytes-received", info.BytesReceived),
- }
- if info.Err == nil {
- rb.lg.Debug("balancer done", fss...)
- } else {
- rb.lg.Warn("balancer failed", fss...)
- }
- }
- return balancer.PickResult{
- SubConn: sc,
- Done: doneFunc,
- }, nil
-}
diff --git a/etcd-fix/client/v3/balancer/resolver/endpoint/endpoint.go b/etcd-fix/client/v3/balancer/resolver/endpoint/endpoint.go
deleted file mode 100644
index 86992cb..0000000
--- a/etcd-fix/client/v3/balancer/resolver/endpoint/endpoint.go
+++ /dev/null
@@ -1,248 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package endpoint resolves etcd entpoints using grpc targets of the form 'endpoint:///'.
-package endpoint
-
-import (
- "context"
- "fmt"
- "net"
- "net/url"
- "strings"
- "sync"
-
- "google.golang.org/grpc/resolver"
-)
-
-const scheme = "endpoint"
-
-var (
- targetPrefix = fmt.Sprintf("%s://", scheme)
-
- bldr *builder
-)
-
-func init() {
- bldr = &builder{
- resolverGroups: make(map[string]*ResolverGroup),
- }
- resolver.Register(bldr)
-}
-
-type builder struct {
- mu sync.RWMutex
- resolverGroups map[string]*ResolverGroup
-}
-
-// NewResolverGroup creates a new ResolverGroup with the given id.
-func NewResolverGroup(id string) (*ResolverGroup, error) {
- return bldr.newResolverGroup(id)
-}
-
-// ResolverGroup keeps all endpoints of resolvers using a common endpoint:/// target
-// up-to-date.
-type ResolverGroup struct {
- mu sync.RWMutex
- id string
- endpoints []string
- resolvers []*Resolver
-}
-
-func (e *ResolverGroup) addResolver(r *Resolver) {
- e.mu.Lock()
- addrs := epsToAddrs(e.endpoints...)
- e.resolvers = append(e.resolvers, r)
- e.mu.Unlock()
- r.cc.NewAddress(addrs)
-}
-
-func (e *ResolverGroup) removeResolver(r *Resolver) {
- e.mu.Lock()
- for i, er := range e.resolvers {
- if er == r {
- e.resolvers = append(e.resolvers[:i], e.resolvers[i+1:]...)
- break
- }
- }
- e.mu.Unlock()
-}
-
-// SetEndpoints updates the endpoints for ResolverGroup. All registered resolver are updated
-// immediately with the new endpoints.
-func (e *ResolverGroup) SetEndpoints(endpoints []string) {
- addrs := epsToAddrs(endpoints...)
- e.mu.Lock()
- e.endpoints = endpoints
- for _, r := range e.resolvers {
- r.cc.NewAddress(addrs)
- }
- e.mu.Unlock()
-}
-
-// Target constructs a endpoint target using the endpoint id of the ResolverGroup.
-func (e *ResolverGroup) Target(endpoint string) string {
- return Target(e.id, endpoint)
-}
-
-// Target constructs a endpoint resolver target.
-func Target(id, endpoint string) string {
- return fmt.Sprintf("%s://%s/%s", scheme, id, endpoint)
-}
-
-// IsTarget checks if a given target string in an endpoint resolver target.
-func IsTarget(target string) bool {
- return strings.HasPrefix(target, "endpoint://")
-}
-
-func (e *ResolverGroup) Close() {
- bldr.close(e.id)
-}
-
-// Build creates or reuses an etcd resolver for the etcd cluster name identified by the authority part of the target.
-func (b *builder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
- if len(target.Authority) < 1 {
- return nil, fmt.Errorf("'etcd' target scheme requires non-empty authority identifying etcd cluster being routed to")
- }
- id := target.Authority
- es, err := b.getResolverGroup(id)
- if err != nil {
- return nil, fmt.Errorf("failed to build resolver: %v", err)
- }
- r := &Resolver{
- endpointID: id,
- cc: cc,
- }
- es.addResolver(r)
- return r, nil
-}
-
-func (b *builder) newResolverGroup(id string) (*ResolverGroup, error) {
- b.mu.RLock()
- _, ok := b.resolverGroups[id]
- b.mu.RUnlock()
- if ok {
- return nil, fmt.Errorf("Endpoint already exists for id: %s", id)
- }
-
- es := &ResolverGroup{id: id}
- b.mu.Lock()
- b.resolverGroups[id] = es
- b.mu.Unlock()
- return es, nil
-}
-
-func (b *builder) getResolverGroup(id string) (*ResolverGroup, error) {
- b.mu.RLock()
- es, ok := b.resolverGroups[id]
- b.mu.RUnlock()
- if !ok {
- return nil, fmt.Errorf("ResolverGroup not found for id: %s", id)
- }
- return es, nil
-}
-
-func (b *builder) close(id string) {
- b.mu.Lock()
- delete(b.resolverGroups, id)
- b.mu.Unlock()
-}
-
-func (b *builder) Scheme() string {
- return scheme
-}
-
-// Resolver provides a resolver for a single etcd cluster, identified by name.
-type Resolver struct {
- endpointID string
- cc resolver.ClientConn
- sync.RWMutex
-}
-
-// TODO: use balancer.epsToAddrs
-func epsToAddrs(eps ...string) (addrs []resolver.Address) {
- addrs = make([]resolver.Address, 0, len(eps))
- for _, ep := range eps {
- _, host, _ := ParseEndpoint(ep)
- addrs = append(addrs, resolver.Address{Addr: ep, ServerName: host})
- }
- return addrs
-}
-
-func (*Resolver) ResolveNow(o resolver.ResolveNowOptions) {}
-
-func (r *Resolver) Close() {
- es, err := bldr.getResolverGroup(r.endpointID)
- if err != nil {
- return
- }
- es.removeResolver(r)
-}
-
-// ParseEndpoint endpoint parses an endpoint of the form
-// (http|https)://*|(unix|unixs)://)
-// and returns a protocol ('tcp' or 'unix'),
-// host (or filepath if a unix socket),
-// scheme (http, https, unix, unixs).
-func ParseEndpoint(endpoint string) (proto string, host string, scheme string) {
- proto = "tcp"
- host = endpoint
- url, uerr := url.Parse(endpoint)
- if uerr != nil || !strings.Contains(endpoint, "://") {
- return proto, host, scheme
- }
- scheme = url.Scheme
-
- // strip scheme:// prefix since grpc dials by host
- host = url.Host
- switch url.Scheme {
- case "http", "https":
- case "unix", "unixs":
- proto = "unix"
- host = url.Host + url.Path
- default:
- proto, host = "", ""
- }
- return proto, host, scheme
-}
-
-// ParseTarget parses a endpoint:/// string and returns the parsed id and endpoint.
-// If the target is malformed, an error is returned.
-func ParseTarget(target string) (string, string, error) {
- noPrefix := strings.TrimPrefix(target, targetPrefix)
- if noPrefix == target {
- return "", "", fmt.Errorf("malformed target, %s prefix is required: %s", targetPrefix, target)
- }
- parts := strings.SplitN(noPrefix, "/", 2)
- if len(parts) != 2 {
- return "", "", fmt.Errorf("malformed target, expected %s:///, but got %s", scheme, target)
- }
- return parts[0], parts[1], nil
-}
-
-// Dialer dials a endpoint using net.Dialer.
-// Context cancelation and timeout are supported.
-func Dialer(ctx context.Context, dialEp string) (net.Conn, error) {
- proto, host, _ := ParseEndpoint(dialEp)
- select {
- case <-ctx.Done():
- return nil, ctx.Err()
- default:
- }
- dialer := &net.Dialer{}
- if deadline, ok := ctx.Deadline(); ok {
- dialer.Deadline = deadline
- }
- return dialer.DialContext(ctx, proto, host)
-}
diff --git a/etcd-fix/client/v3/balancer/utils.go b/etcd-fix/client/v3/balancer/utils.go
deleted file mode 100644
index 48eb875..0000000
--- a/etcd-fix/client/v3/balancer/utils.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package balancer
-
-import (
- "fmt"
- "net/url"
- "sort"
- "sync/atomic"
- "time"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/resolver"
-)
-
-func scToString(sc balancer.SubConn) string {
- return fmt.Sprintf("%p", sc)
-}
-
-func scsToStrings(scs map[balancer.SubConn]resolver.Address) (ss []string) {
- ss = make([]string, 0, len(scs))
- for sc, a := range scs {
- ss = append(ss, fmt.Sprintf("%s (%s)", a.Addr, scToString(sc)))
- }
- sort.Strings(ss)
- return ss
-}
-
-func addrsToStrings(addrs []resolver.Address) (ss []string) {
- ss = make([]string, len(addrs))
- for i := range addrs {
- ss[i] = addrs[i].Addr
- }
- sort.Strings(ss)
- return ss
-}
-
-func epsToAddrs(eps ...string) (addrs []resolver.Address) {
- addrs = make([]resolver.Address, 0, len(eps))
- for _, ep := range eps {
- u, err := url.Parse(ep)
- if err != nil {
- addrs = append(addrs, resolver.Address{Addr: ep, Type: resolver.Backend})
- continue
- }
- addrs = append(addrs, resolver.Address{Addr: u.Host, Type: resolver.Backend})
- }
- return addrs
-}
-
-var genN = new(uint32)
-
-func genName() string {
- now := time.Now().UnixNano()
- return fmt.Sprintf("%X%X", now, atomic.AddUint32(genN, 1))
-}
diff --git a/etcd-fix/client/v3/balancer/utils_test.go b/etcd-fix/client/v3/balancer/utils_test.go
deleted file mode 100644
index e58cd34..0000000
--- a/etcd-fix/client/v3/balancer/utils_test.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package balancer
-
-import (
- "reflect"
- "testing"
-
- "google.golang.org/grpc/resolver"
-)
-
-func Test_epsToAddrs(t *testing.T) {
- eps := []string{"https://example.com:2379", "127.0.0.1:2379"}
- exp := []resolver.Address{
- {Addr: "example.com:2379", Type: resolver.Backend},
- {Addr: "127.0.0.1:2379", Type: resolver.Backend},
- }
- rs := epsToAddrs(eps...)
- if !reflect.DeepEqual(rs, exp) {
- t.Fatalf("expected %v, got %v", exp, rs)
- }
-}
diff --git a/etcd-fix/client/v3/client.go b/etcd-fix/client/v3/client.go
deleted file mode 100644
index 9a037d7..0000000
--- a/etcd-fix/client/v3/client.go
+++ /dev/null
@@ -1,634 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "errors"
- "fmt"
- "net"
- "os"
- "strconv"
- "strings"
- "sync"
- "time"
-
- "github.com/google/uuid"
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- "go.etcd.io/etcd/client/v3/balancer"
- "go.etcd.io/etcd/client/v3/balancer/picker"
- "go.etcd.io/etcd/client/v3/balancer/resolver/endpoint"
- "go.etcd.io/etcd/client/v3/credentials"
- "go.etcd.io/etcd/pkg/v3/logutil"
- "go.uber.org/zap"
- "google.golang.org/grpc"
- "google.golang.org/grpc/codes"
- grpccredentials "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/keepalive"
- "google.golang.org/grpc/status"
-)
-
-var (
- ErrNoAvailableEndpoints = errors.New("etcdclient: no available endpoints")
- ErrOldCluster = errors.New("etcdclient: old cluster version")
-
- roundRobinBalancerName = fmt.Sprintf("etcd-%s", picker.RoundrobinBalanced.String())
-)
-
-func init() {
- lg := zap.NewNop()
- if os.Getenv("ETCD_CLIENT_DEBUG") != "" {
- lcfg := logutil.DefaultZapLoggerConfig
- lcfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
-
- var err error
- lg, err = lcfg.Build() // info level logging
- if err != nil {
- panic(err)
- }
- }
-
- // TODO: support custom balancer
- balancer.RegisterBuilder(balancer.Config{
- Policy: picker.RoundrobinBalanced,
- Name: roundRobinBalancerName,
- Logger: lg,
- })
-}
-
-// Client provides and manages an etcd v3 client session.
-type Client struct {
- Cluster
- KV
- Lease
- Watcher
- Auth
- Maintenance
-
- conn *grpc.ClientConn
-
- cfg Config
- creds grpccredentials.TransportCredentials
- resolverGroup *endpoint.ResolverGroup
- mu *sync.RWMutex
-
- ctx context.Context
- cancel context.CancelFunc
-
- // Username is a user name for authentication.
- Username string
- // Password is a password for authentication.
- Password string
- authTokenBundle credentials.Bundle
-
- callOpts []grpc.CallOption
-
- lg *zap.Logger
-}
-
-// New creates a new etcdv3 client from a given configuration.
-func New(cfg Config) (*Client, error) {
- if len(cfg.Endpoints) == 0 {
- return nil, ErrNoAvailableEndpoints
- }
-
- return newClient(&cfg)
-}
-
-// NewCtxClient creates a client with a context but no underlying grpc
-// connection. This is useful for embedded cases that override the
-// service interface implementations and do not need connection management.
-func NewCtxClient(ctx context.Context) *Client {
- cctx, cancel := context.WithCancel(ctx)
- return &Client{ctx: cctx, cancel: cancel, lg: zap.NewNop()}
-}
-
-// NewFromURL creates a new etcdv3 client from a URL.
-func NewFromURL(url string) (*Client, error) {
- return New(Config{Endpoints: []string{url}})
-}
-
-// NewFromURLs creates a new etcdv3 client from URLs.
-func NewFromURLs(urls []string) (*Client, error) {
- return New(Config{Endpoints: urls})
-}
-
-// WithLogger sets a logger
-func (c *Client) WithLogger(lg *zap.Logger) *Client {
- c.lg = lg
- return c
-}
-
-// Close shuts down the client's etcd connections.
-func (c *Client) Close() error {
- c.cancel()
- if c.Watcher != nil {
- c.Watcher.Close()
- }
- if c.Lease != nil {
- c.Lease.Close()
- }
- if c.resolverGroup != nil {
- c.resolverGroup.Close()
- }
- if c.conn != nil {
- return toErr(c.ctx, c.conn.Close())
- }
- return c.ctx.Err()
-}
-
-// Ctx is a context for "out of band" messages (e.g., for sending
-// "clean up" message when another context is canceled). It is
-// canceled on client Close().
-func (c *Client) Ctx() context.Context { return c.ctx }
-
-// Endpoints lists the registered endpoints for the client.
-func (c *Client) Endpoints() []string {
- // copy the slice; protect original endpoints from being changed
- c.mu.RLock()
- defer c.mu.RUnlock()
- eps := make([]string, len(c.cfg.Endpoints))
- copy(eps, c.cfg.Endpoints)
- return eps
-}
-
-// SetEndpoints updates client's endpoints.
-func (c *Client) SetEndpoints(eps ...string) {
- c.mu.Lock()
- defer c.mu.Unlock()
- c.cfg.Endpoints = eps
- c.resolverGroup.SetEndpoints(eps)
-}
-
-// Sync synchronizes client's endpoints with the known endpoints from the etcd membership.
-func (c *Client) Sync(ctx context.Context) error {
- mresp, err := c.MemberList(ctx)
- if err != nil {
- return err
- }
- var eps []string
- for _, m := range mresp.Members {
- eps = append(eps, m.ClientURLs...)
- }
- c.SetEndpoints(eps...)
- return nil
-}
-
-func (c *Client) autoSync() {
- if c.cfg.AutoSyncInterval == time.Duration(0) {
- return
- }
-
- for {
- select {
- case <-c.ctx.Done():
- return
- case <-time.After(c.cfg.AutoSyncInterval):
- ctx, cancel := context.WithTimeout(c.ctx, 5*time.Second)
- err := c.Sync(ctx)
- cancel()
- if err != nil && err != c.ctx.Err() {
- lg.Lvl(4).Infof("Auto sync endpoints failed: %v", err)
- }
- }
- }
-}
-
-func (c *Client) processCreds(scheme string) (creds grpccredentials.TransportCredentials) {
- creds = c.creds
- switch scheme {
- case "unix":
- case "http":
- creds = nil
- case "https", "unixs":
- if creds != nil {
- break
- }
- creds = credentials.NewBundle(credentials.Config{}).TransportCredentials()
- default:
- creds = nil
- }
- return creds
-}
-
-// dialSetupOpts gives the dial opts prior to any authentication.
-func (c *Client) dialSetupOpts(creds grpccredentials.TransportCredentials, dopts ...grpc.DialOption) (opts []grpc.DialOption, err error) {
- if c.cfg.DialKeepAliveTime > 0 {
- params := keepalive.ClientParameters{
- Time: c.cfg.DialKeepAliveTime,
- Timeout: c.cfg.DialKeepAliveTimeout,
- PermitWithoutStream: c.cfg.PermitWithoutStream,
- }
- opts = append(opts, grpc.WithKeepaliveParams(params))
- }
- opts = append(opts, dopts...)
-
- dialer := endpoint.Dialer
- if creds != nil {
- opts = append(opts, grpc.WithTransportCredentials(creds))
- } else {
- opts = append(opts, grpc.WithInsecure())
- }
- opts = append(opts, grpc.WithContextDialer(dialer))
-
- // Interceptor retry and backoff.
- // TODO: Replace all of clientv3/retry.go with interceptor based retry, or with
- // https://github.com/grpc/proposal/blob/master/A6-client-retries.md#retry-policy
- // once it is available.
- rrBackoff := withBackoff(c.roundRobinQuorumBackoff(defaultBackoffWaitBetween, defaultBackoffJitterFraction))
- opts = append(opts,
- // Disable stream retry by default since go-grpc-middleware/retry does not support client streams.
- // Streams that are safe to retry are enabled individually.
- grpc.WithStreamInterceptor(c.streamClientInterceptor(c.lg, withMax(0), rrBackoff)),
- grpc.WithUnaryInterceptor(c.unaryClientInterceptor(c.lg, withMax(defaultUnaryMaxRetries), rrBackoff)),
- )
-
- return opts, nil
-}
-
-// Dial connects to a single endpoint using the client's config.
-func (c *Client) Dial(ep string) (*grpc.ClientConn, error) {
- creds, err := c.directDialCreds(ep)
- if err != nil {
- return nil, err
- }
- // Use the grpc passthrough resolver to directly dial a single endpoint.
- // This resolver passes through the 'unix' and 'unixs' endpoints schemes used
- // by etcd without modification, allowing us to directly dial endpoints and
- // using the same dial functions that we use for load balancer dialing.
- return c.dial(fmt.Sprintf("passthrough:///%s", ep), creds)
-}
-
-func (c *Client) getToken(ctx context.Context) error {
- var err error // return last error in a case of fail
-
- if c.Username == "" || c.Password == "" {
- return nil
- }
-
- resp, err := c.Auth.Authenticate(ctx, c.Username, c.Password)
- if err != nil {
- if err == rpctypes.ErrAuthNotEnabled {
- return nil
- }
- return err
- }
- c.authTokenBundle.UpdateAuthToken(resp.Token)
- return nil
-}
-
-// dialWithBalancer dials the client's current load balanced resolver group. The scheme of the host
-// of the provided endpoint determines the scheme used for all endpoints of the client connection.
-func (c *Client) dialWithBalancer(ep string, dopts ...grpc.DialOption) (*grpc.ClientConn, error) {
- _, host, _ := endpoint.ParseEndpoint(ep)
- target := c.resolverGroup.Target(host)
- creds := c.dialWithBalancerCreds(ep)
- return c.dial(target, creds, dopts...)
-}
-
-// dial configures and dials any grpc balancer target.
-func (c *Client) dial(target string, creds grpccredentials.TransportCredentials, dopts ...grpc.DialOption) (*grpc.ClientConn, error) {
- opts, err := c.dialSetupOpts(creds, dopts...)
- if err != nil {
- return nil, fmt.Errorf("failed to configure dialer: %v", err)
- }
-
- if c.Username != "" && c.Password != "" {
- c.authTokenBundle = credentials.NewBundle(credentials.Config{})
- opts = append(opts, grpc.WithPerRPCCredentials(c.authTokenBundle.PerRPCCredentials()))
- }
-
- opts = append(opts, c.cfg.DialOptions...)
-
- dctx := c.ctx
- if c.cfg.DialTimeout > 0 {
- var cancel context.CancelFunc
- dctx, cancel = context.WithTimeout(c.ctx, c.cfg.DialTimeout)
- defer cancel() // TODO: Is this right for cases where grpc.WithBlock() is not set on the dial options?
- }
-
- conn, err := grpc.DialContext(dctx, target, opts...)
- if err != nil {
- return nil, err
- }
- return conn, nil
-}
-
-func (c *Client) directDialCreds(ep string) (grpccredentials.TransportCredentials, error) {
- _, host, scheme := endpoint.ParseEndpoint(ep)
- creds := c.creds
- if len(scheme) != 0 {
- creds = c.processCreds(scheme)
- if creds != nil {
- clone := creds.Clone()
- // Set the server name must to the endpoint hostname without port since grpc
- // otherwise attempts to check if x509 cert is valid for the full endpoint
- // including the scheme and port, which fails.
- overrideServerName, _, err := net.SplitHostPort(host)
- if err != nil {
- // Either the host didn't have a port or the host could not be parsed. Either way, continue with the
- // original host string.
- overrideServerName = host
- }
- clone.OverrideServerName(overrideServerName)
- creds = clone
- }
- }
- return creds, nil
-}
-
-func (c *Client) dialWithBalancerCreds(ep string) grpccredentials.TransportCredentials {
- _, _, scheme := endpoint.ParseEndpoint(ep)
- creds := c.creds
- if len(scheme) != 0 {
- creds = c.processCreds(scheme)
- }
- return creds
-}
-
-func newClient(cfg *Config) (*Client, error) {
- if cfg == nil {
- cfg = &Config{}
- }
- var creds grpccredentials.TransportCredentials
- if cfg.TLS != nil {
- creds = credentials.NewBundle(credentials.Config{TLSConfig: cfg.TLS}).TransportCredentials()
- }
-
- // use a temporary skeleton client to bootstrap first connection
- baseCtx := context.TODO()
- if cfg.Context != nil {
- baseCtx = cfg.Context
- }
-
- ctx, cancel := context.WithCancel(baseCtx)
- client := &Client{
- conn: nil,
- cfg: *cfg,
- creds: creds,
- ctx: ctx,
- cancel: cancel,
- mu: new(sync.RWMutex),
- callOpts: defaultCallOpts,
- }
-
- lcfg := logutil.DefaultZapLoggerConfig
- if cfg.LogConfig != nil {
- lcfg = *cfg.LogConfig
- }
- var err error
- client.lg, err = lcfg.Build()
- if err != nil {
- return nil, err
- }
-
- if cfg.Username != "" && cfg.Password != "" {
- client.Username = cfg.Username
- client.Password = cfg.Password
- }
- if cfg.MaxCallSendMsgSize > 0 || cfg.MaxCallRecvMsgSize > 0 {
- if cfg.MaxCallRecvMsgSize > 0 && cfg.MaxCallSendMsgSize > cfg.MaxCallRecvMsgSize {
- return nil, fmt.Errorf("gRPC message recv limit (%d bytes) must be greater than send limit (%d bytes)", cfg.MaxCallRecvMsgSize, cfg.MaxCallSendMsgSize)
- }
- callOpts := []grpc.CallOption{
- defaultFailFast,
- defaultMaxCallSendMsgSize,
- defaultMaxCallRecvMsgSize,
- }
- if cfg.MaxCallSendMsgSize > 0 {
- callOpts[1] = grpc.MaxCallSendMsgSize(cfg.MaxCallSendMsgSize)
- }
- if cfg.MaxCallRecvMsgSize > 0 {
- callOpts[2] = grpc.MaxCallRecvMsgSize(cfg.MaxCallRecvMsgSize)
- }
- client.callOpts = callOpts
- }
-
- // Prepare a 'endpoint:///' resolver for the client and create a endpoint target to pass
- // to dial so the client knows to use this resolver.
- client.resolverGroup, err = endpoint.NewResolverGroup(fmt.Sprintf("client-%s", uuid.New().String()))
- if err != nil {
- client.cancel()
- return nil, err
- }
- client.resolverGroup.SetEndpoints(cfg.Endpoints)
-
- if len(cfg.Endpoints) < 1 {
- client.cancel()
- return nil, fmt.Errorf("at least one Endpoint is required in client config")
- }
- dialEndpoint := cfg.Endpoints[0]
-
- // Use a provided endpoint target so that for https:// without any tls config given, then
- // grpc will assume the certificate server name is the endpoint host.
- conn, err := client.dialWithBalancer(dialEndpoint, grpc.WithBalancerName(roundRobinBalancerName))
- if err != nil {
- client.cancel()
- client.resolverGroup.Close()
- return nil, err
- }
- // TODO: With the old grpc balancer interface, we waited until the dial timeout
- // for the balancer to be ready. Is there an equivalent wait we should do with the new grpc balancer interface?
- client.conn = conn
-
- client.Cluster = NewCluster(client)
- client.KV = NewKV(client)
- client.Lease = NewLease(client)
- client.Watcher = NewWatcher(client)
- client.Auth = NewAuth(client)
- client.Maintenance = NewMaintenance(client)
-
- //get token with established connection
- ctx, cancel = client.ctx, func() {}
- if client.cfg.DialTimeout > 0 {
- ctx, cancel = context.WithTimeout(ctx, client.cfg.DialTimeout)
- }
- err = client.getToken(ctx)
- if err != nil {
- client.Close()
- cancel()
- return nil, err
- }
- cancel()
-
- if cfg.RejectOldCluster {
- if err := client.checkVersion(); err != nil {
- client.Close()
- return nil, err
- }
- }
-
- go client.autoSync()
- return client, nil
-}
-
-// roundRobinQuorumBackoff retries against quorum between each backoff.
-// This is intended for use with a round robin load balancer.
-func (c *Client) roundRobinQuorumBackoff(waitBetween time.Duration, jitterFraction float64) backoffFunc {
- return func(attempt uint) time.Duration {
- // after each round robin across quorum, backoff for our wait between duration
- n := uint(len(c.Endpoints()))
- quorum := (n/2 + 1)
- if attempt%quorum == 0 {
- c.lg.Debug("backoff", zap.Uint("attempt", attempt), zap.Uint("quorum", quorum), zap.Duration("waitBetween", waitBetween), zap.Float64("jitterFraction", jitterFraction))
- return jitterUp(waitBetween, jitterFraction)
- }
- c.lg.Debug("backoff skipped", zap.Uint("attempt", attempt), zap.Uint("quorum", quorum))
- return 0
- }
-}
-
-func (c *Client) checkVersion() (err error) {
- var wg sync.WaitGroup
-
- eps := c.Endpoints()
- errc := make(chan error, len(eps))
- ctx, cancel := context.WithCancel(c.ctx)
- if c.cfg.DialTimeout > 0 {
- cancel()
- ctx, cancel = context.WithTimeout(c.ctx, c.cfg.DialTimeout)
- }
-
- wg.Add(len(eps))
- for _, ep := range eps {
- // if cluster is current, any endpoint gives a recent version
- go func(e string) {
- defer wg.Done()
- resp, rerr := c.Status(ctx, e)
- if rerr != nil {
- errc <- rerr
- return
- }
- vs := strings.Split(resp.Version, ".")
- maj, min := 0, 0
- if len(vs) >= 2 {
- var serr error
- if maj, serr = strconv.Atoi(vs[0]); serr != nil {
- errc <- serr
- return
- }
- if min, serr = strconv.Atoi(vs[1]); serr != nil {
- errc <- serr
- return
- }
- }
- if maj < 3 || (maj == 3 && min < 2) {
- rerr = ErrOldCluster
- }
- errc <- rerr
- }(ep)
- }
- // wait for success
- for range eps {
- if err = <-errc; err == nil {
- break
- }
- }
- cancel()
- wg.Wait()
- return err
-}
-
-// ActiveConnection returns the current in-use connection
-func (c *Client) ActiveConnection() *grpc.ClientConn { return c.conn }
-
-// isHaltErr returns true if the given error and context indicate no forward
-// progress can be made, even after reconnecting.
-func isHaltErr(ctx context.Context, err error) bool {
- if ctx != nil && ctx.Err() != nil {
- return true
- }
- if err == nil {
- return false
- }
- ev, _ := status.FromError(err)
- // Unavailable codes mean the system will be right back.
- // (e.g., can't connect, lost leader)
- // Treat Internal codes as if something failed, leaving the
- // system in an inconsistent state, but retrying could make progress.
- // (e.g., failed in middle of send, corrupted frame)
- // TODO: are permanent Internal errors possible from grpc?
- return ev.Code() != codes.Unavailable && ev.Code() != codes.Internal
-}
-
-// isUnavailableErr returns true if the given error is an unavailable error
-func isUnavailableErr(ctx context.Context, err error) bool {
- if ctx != nil && ctx.Err() != nil {
- return false
- }
- if err == nil {
- return false
- }
- ev, ok := status.FromError(err)
- if ok {
- // Unavailable codes mean the system will be right back.
- // (e.g., can't connect, lost leader)
- return ev.Code() == codes.Unavailable
- }
- return false
-}
-
-func toErr(ctx context.Context, err error) error {
- if err == nil {
- return nil
- }
- err = rpctypes.Error(err)
- if _, ok := err.(rpctypes.EtcdError); ok {
- return err
- }
- if ev, ok := status.FromError(err); ok {
- code := ev.Code()
- switch code {
- case codes.DeadlineExceeded:
- fallthrough
- case codes.Canceled:
- if ctx.Err() != nil {
- err = ctx.Err()
- }
- }
- }
- return err
-}
-
-func canceledByCaller(stopCtx context.Context, err error) bool {
- if stopCtx.Err() == nil || err == nil {
- return false
- }
-
- return err == context.Canceled || err == context.DeadlineExceeded
-}
-
-// IsConnCanceled returns true, if error is from a closed gRPC connection.
-// ref. https://github.com/grpc/grpc-go/pull/1854
-func IsConnCanceled(err error) bool {
- if err == nil {
- return false
- }
-
- // >= gRPC v1.23.x
- s, ok := status.FromError(err)
- if ok {
- // connection is canceled or server has already closed the connection
- return s.Code() == codes.Canceled || s.Message() == "transport is closing"
- }
-
- // >= gRPC v1.10.x
- if err == context.Canceled {
- return true
- }
-
- // <= gRPC v1.7.x returns 'errors.New("grpc: the client connection is closing")'
- return strings.Contains(err.Error(), "grpc: the client connection is closing")
-}
diff --git a/etcd-fix/client/v3/client_test.go b/etcd-fix/client/v3/client_test.go
deleted file mode 100644
index e6918f1..0000000
--- a/etcd-fix/client/v3/client_test.go
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "fmt"
- "net"
- "testing"
- "time"
-
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- "go.etcd.io/etcd/pkg/v3/testutil"
-
- "google.golang.org/grpc"
-)
-
-func TestDialCancel(t *testing.T) {
- defer testutil.AfterTest(t)
-
- // accept first connection so client is created with dial timeout
- ln, err := net.Listen("unix", "dialcancel:12345")
- if err != nil {
- t.Fatal(err)
- }
- defer ln.Close()
-
- ep := "unix://dialcancel:12345"
- cfg := Config{
- Endpoints: []string{ep},
- DialTimeout: 30 * time.Second}
- c, err := New(cfg)
- if err != nil {
- t.Fatal(err)
- }
-
- // connect to ipv4 black hole so dial blocks
- c.SetEndpoints("http://254.0.0.1:12345")
-
- // issue Get to force redial attempts
- getc := make(chan struct{})
- go func() {
- defer close(getc)
- // Get may hang forever on grpc's Stream.Header() if its
- // context is never canceled.
- c.Get(c.Ctx(), "abc")
- }()
-
- // wait a little bit so client close is after dial starts
- time.Sleep(100 * time.Millisecond)
-
- donec := make(chan struct{})
- go func() {
- defer close(donec)
- c.Close()
- }()
-
- select {
- case <-time.After(5 * time.Second):
- t.Fatalf("failed to close")
- case <-donec:
- }
- select {
- case <-time.After(5 * time.Second):
- t.Fatalf("get failed to exit")
- case <-getc:
- }
-}
-
-func TestDialTimeout(t *testing.T) {
- defer testutil.AfterTest(t)
-
- // grpc.WithBlock to block until connection up or timeout
- testCfgs := []Config{
- {
- Endpoints: []string{"http://254.0.0.1:12345"},
- DialTimeout: 2 * time.Second,
- DialOptions: []grpc.DialOption{grpc.WithBlock()},
- },
- {
- Endpoints: []string{"http://254.0.0.1:12345"},
- DialTimeout: time.Second,
- DialOptions: []grpc.DialOption{grpc.WithBlock()},
- Username: "abc",
- Password: "def",
- },
- }
-
- for i, cfg := range testCfgs {
- donec := make(chan error, 1)
- go func(cfg Config) {
- // without timeout, dial continues forever on ipv4 black hole
- c, err := New(cfg)
- if c != nil || err == nil {
- t.Errorf("#%d: new client should fail", i)
- }
- donec <- err
- }(cfg)
-
- time.Sleep(10 * time.Millisecond)
-
- select {
- case err := <-donec:
- t.Errorf("#%d: dial didn't wait (%v)", i, err)
- default:
- }
-
- select {
- case <-time.After(5 * time.Second):
- t.Errorf("#%d: failed to timeout dial on time", i)
- case err := <-donec:
- if err != context.DeadlineExceeded {
- t.Errorf("#%d: unexpected error %v, want %v", i, err, context.DeadlineExceeded)
- }
- }
- }
-}
-
-func TestDialNoTimeout(t *testing.T) {
- cfg := Config{Endpoints: []string{"127.0.0.1:12345"}}
- c, err := New(cfg)
- if c == nil || err != nil {
- t.Fatalf("new client with DialNoWait should succeed, got %v", err)
- }
- c.Close()
-}
-
-func TestIsHaltErr(t *testing.T) {
- if !isHaltErr(nil, fmt.Errorf("etcdserver: some etcdserver error")) {
- t.Errorf(`error prefixed with "etcdserver: " should be Halted by default`)
- }
- if isHaltErr(nil, rpctypes.ErrGRPCStopped) {
- t.Errorf("error %v should not halt", rpctypes.ErrGRPCStopped)
- }
- if isHaltErr(nil, rpctypes.ErrGRPCNoLeader) {
- t.Errorf("error %v should not halt", rpctypes.ErrGRPCNoLeader)
- }
- ctx, cancel := context.WithCancel(context.TODO())
- if isHaltErr(ctx, nil) {
- t.Errorf("no error and active context should not be Halted")
- }
- cancel()
- if !isHaltErr(ctx, nil) {
- t.Errorf("cancel on context should be Halted")
- }
-}
-
-func TestCloseCtxClient(t *testing.T) {
- ctx := context.Background()
- c := NewCtxClient(ctx)
- err := c.Close()
- // Close returns ctx.toErr, a nil error means an open Done channel
- if err == nil {
- t.Errorf("failed to Close the client. %v", err)
- }
-}
-
-func TestWithLogger(t *testing.T) {
- ctx := context.Background()
- c := NewCtxClient(ctx)
- if c.lg == nil {
- t.Errorf("unexpected nil in *zap.Logger")
- }
-
- c.WithLogger(nil)
- if c.lg != nil {
- t.Errorf("WithLogger should modify *zap.Logger")
- }
-}
diff --git a/etcd-fix/client/v3/clientv3util/example_key_test.go b/etcd-fix/client/v3/clientv3util/example_key_test.go
deleted file mode 100644
index 0d7cd3d..0000000
--- a/etcd-fix/client/v3/clientv3util/example_key_test.go
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3util_test
-
-import (
- "context"
- "log"
-
- "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/client/v3/clientv3util"
-)
-
-func ExampleKeyMissing() {
- cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"127.0.0.1:2379"},
- })
- if err != nil {
- log.Fatal(err)
- }
- defer cli.Close()
- kvc := clientv3.NewKV(cli)
-
- // perform a put only if key is missing
- // It is useful to do the check atomically to avoid overwriting
- // the existing key which would generate potentially unwanted events,
- // unless of course you wanted to do an overwrite no matter what.
- _, err = kvc.Txn(context.Background()).
- If(clientv3util.KeyMissing("purpleidea")).
- Then(clientv3.OpPut("purpleidea", "hello world")).
- Commit()
- if err != nil {
- log.Fatal(err)
- }
-}
-
-func ExampleKeyExists() {
- cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{"127.0.0.1:2379"},
- })
- if err != nil {
- log.Fatal(err)
- }
- defer cli.Close()
- kvc := clientv3.NewKV(cli)
-
- // perform a delete only if key already exists
- _, err = kvc.Txn(context.Background()).
- If(clientv3util.KeyExists("purpleidea")).
- Then(clientv3.OpDelete("purpleidea")).
- Commit()
- if err != nil {
- log.Fatal(err)
- }
-}
diff --git a/etcd-fix/client/v3/clientv3util/util.go b/etcd-fix/client/v3/clientv3util/util.go
deleted file mode 100644
index c8d5098..0000000
--- a/etcd-fix/client/v3/clientv3util/util.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package clientv3util contains utility functions derived from clientv3.
-package clientv3util
-
-import (
- "go.etcd.io/etcd/client/v3"
-)
-
-// KeyExists returns a comparison operation that evaluates to true iff the given
-// key exists. It does this by checking if the key `Version` is greater than 0.
-// It is a useful guard in transaction delete operations.
-func KeyExists(key string) clientv3.Cmp {
- return clientv3.Compare(clientv3.Version(key), ">", 0)
-}
-
-// KeyMissing returns a comparison operation that evaluates to true iff the
-// given key does not exist.
-func KeyMissing(key string) clientv3.Cmp {
- return clientv3.Compare(clientv3.Version(key), "=", 0)
-}
diff --git a/etcd-fix/client/v3/cluster.go b/etcd-fix/client/v3/cluster.go
deleted file mode 100644
index dd38e3d..0000000
--- a/etcd-fix/client/v3/cluster.go
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/pkg/v3/types"
-
- "google.golang.org/grpc"
-)
-
-type (
- Member pb.Member
- MemberListResponse pb.MemberListResponse
- MemberAddResponse pb.MemberAddResponse
- MemberRemoveResponse pb.MemberRemoveResponse
- MemberUpdateResponse pb.MemberUpdateResponse
- MemberPromoteResponse pb.MemberPromoteResponse
-)
-
-type Cluster interface {
- // MemberList lists the current cluster membership.
- MemberList(ctx context.Context) (*MemberListResponse, error)
-
- // MemberAdd adds a new member into the cluster.
- MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
-
- // MemberAddAsLearner adds a new learner member into the cluster.
- MemberAddAsLearner(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
-
- // MemberRemove removes an existing member from the cluster.
- MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error)
-
- // MemberUpdate updates the peer addresses of the member.
- MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error)
-
- // MemberPromote promotes a member from raft learner (non-voting) to raft voting member.
- MemberPromote(ctx context.Context, id uint64) (*MemberPromoteResponse, error)
-}
-
-type cluster struct {
- remote pb.ClusterClient
- callOpts []grpc.CallOption
-}
-
-func NewCluster(c *Client) Cluster {
- api := &cluster{remote: RetryClusterClient(c)}
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func NewClusterFromClusterClient(remote pb.ClusterClient, c *Client) Cluster {
- api := &cluster{remote: remote}
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func (c *cluster) MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) {
- return c.memberAdd(ctx, peerAddrs, false)
-}
-
-func (c *cluster) MemberAddAsLearner(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) {
- return c.memberAdd(ctx, peerAddrs, true)
-}
-
-func (c *cluster) memberAdd(ctx context.Context, peerAddrs []string, isLearner bool) (*MemberAddResponse, error) {
- // fail-fast before panic in rafthttp
- if _, err := types.NewURLs(peerAddrs); err != nil {
- return nil, err
- }
-
- r := &pb.MemberAddRequest{
- PeerURLs: peerAddrs,
- IsLearner: isLearner,
- }
- resp, err := c.remote.MemberAdd(ctx, r, c.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- return (*MemberAddResponse)(resp), nil
-}
-
-func (c *cluster) MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error) {
- r := &pb.MemberRemoveRequest{ID: id}
- resp, err := c.remote.MemberRemove(ctx, r, c.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- return (*MemberRemoveResponse)(resp), nil
-}
-
-func (c *cluster) MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error) {
- // fail-fast before panic in rafthttp
- if _, err := types.NewURLs(peerAddrs); err != nil {
- return nil, err
- }
-
- // it is safe to retry on update.
- r := &pb.MemberUpdateRequest{ID: id, PeerURLs: peerAddrs}
- resp, err := c.remote.MemberUpdate(ctx, r, c.callOpts...)
- if err == nil {
- return (*MemberUpdateResponse)(resp), nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (c *cluster) MemberList(ctx context.Context) (*MemberListResponse, error) {
- // it is safe to retry on list.
- resp, err := c.remote.MemberList(ctx, &pb.MemberListRequest{Linearizable: true}, c.callOpts...)
- if err == nil {
- return (*MemberListResponse)(resp), nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (c *cluster) MemberPromote(ctx context.Context, id uint64) (*MemberPromoteResponse, error) {
- r := &pb.MemberPromoteRequest{ID: id}
- resp, err := c.remote.MemberPromote(ctx, r, c.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- return (*MemberPromoteResponse)(resp), nil
-}
diff --git a/etcd-fix/client/v3/compact_op.go b/etcd-fix/client/v3/compact_op.go
deleted file mode 100644
index a6e660a..0000000
--- a/etcd-fix/client/v3/compact_op.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-)
-
-// CompactOp represents a compact operation.
-type CompactOp struct {
- revision int64
- physical bool
-}
-
-// CompactOption configures compact operation.
-type CompactOption func(*CompactOp)
-
-func (op *CompactOp) applyCompactOpts(opts []CompactOption) {
- for _, opt := range opts {
- opt(op)
- }
-}
-
-// OpCompact wraps slice CompactOption to create a CompactOp.
-func OpCompact(rev int64, opts ...CompactOption) CompactOp {
- ret := CompactOp{revision: rev}
- ret.applyCompactOpts(opts)
- return ret
-}
-
-func (op CompactOp) toRequest() *pb.CompactionRequest {
- return &pb.CompactionRequest{Revision: op.revision, Physical: op.physical}
-}
-
-// WithCompactPhysical makes Compact wait until all compacted entries are
-// removed from the etcd server's storage.
-func WithCompactPhysical() CompactOption {
- return func(op *CompactOp) { op.physical = true }
-}
diff --git a/etcd-fix/client/v3/compact_op_test.go b/etcd-fix/client/v3/compact_op_test.go
deleted file mode 100644
index f483322..0000000
--- a/etcd-fix/client/v3/compact_op_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "reflect"
- "testing"
-
- "go.etcd.io/etcd/api/v3/etcdserverpb"
-)
-
-func TestCompactOp(t *testing.T) {
- req1 := OpCompact(100, WithCompactPhysical()).toRequest()
- req2 := &etcdserverpb.CompactionRequest{Revision: 100, Physical: true}
- if !reflect.DeepEqual(req1, req2) {
- t.Fatalf("expected %+v, got %+v", req2, req1)
- }
-}
diff --git a/etcd-fix/client/v3/compare.go b/etcd-fix/client/v3/compare.go
deleted file mode 100644
index e2967cf..0000000
--- a/etcd-fix/client/v3/compare.go
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-)
-
-type CompareTarget int
-type CompareResult int
-
-const (
- CompareVersion CompareTarget = iota
- CompareCreated
- CompareModified
- CompareValue
-)
-
-type Cmp pb.Compare
-
-func Compare(cmp Cmp, result string, v interface{}) Cmp {
- var r pb.Compare_CompareResult
-
- switch result {
- case "=":
- r = pb.Compare_EQUAL
- case "!=":
- r = pb.Compare_NOT_EQUAL
- case ">":
- r = pb.Compare_GREATER
- case "<":
- r = pb.Compare_LESS
- default:
- panic("Unknown result op")
- }
-
- cmp.Result = r
- switch cmp.Target {
- case pb.Compare_VALUE:
- val, ok := v.(string)
- if !ok {
- panic("bad compare value")
- }
- cmp.TargetUnion = &pb.Compare_Value{Value: []byte(val)}
- case pb.Compare_VERSION:
- cmp.TargetUnion = &pb.Compare_Version{Version: mustInt64(v)}
- case pb.Compare_CREATE:
- cmp.TargetUnion = &pb.Compare_CreateRevision{CreateRevision: mustInt64(v)}
- case pb.Compare_MOD:
- cmp.TargetUnion = &pb.Compare_ModRevision{ModRevision: mustInt64(v)}
- case pb.Compare_LEASE:
- cmp.TargetUnion = &pb.Compare_Lease{Lease: mustInt64orLeaseID(v)}
- default:
- panic("Unknown compare type")
- }
- return cmp
-}
-
-func Value(key string) Cmp {
- return Cmp{Key: []byte(key), Target: pb.Compare_VALUE}
-}
-
-func Version(key string) Cmp {
- return Cmp{Key: []byte(key), Target: pb.Compare_VERSION}
-}
-
-func CreateRevision(key string) Cmp {
- return Cmp{Key: []byte(key), Target: pb.Compare_CREATE}
-}
-
-func ModRevision(key string) Cmp {
- return Cmp{Key: []byte(key), Target: pb.Compare_MOD}
-}
-
-// LeaseValue compares a key's LeaseID to a value of your choosing. The empty
-// LeaseID is 0, otherwise known as `NoLease`.
-func LeaseValue(key string) Cmp {
- return Cmp{Key: []byte(key), Target: pb.Compare_LEASE}
-}
-
-// KeyBytes returns the byte slice holding with the comparison key.
-func (cmp *Cmp) KeyBytes() []byte { return cmp.Key }
-
-// WithKeyBytes sets the byte slice for the comparison key.
-func (cmp *Cmp) WithKeyBytes(key []byte) { cmp.Key = key }
-
-// ValueBytes returns the byte slice holding the comparison value, if any.
-func (cmp *Cmp) ValueBytes() []byte {
- if tu, ok := cmp.TargetUnion.(*pb.Compare_Value); ok {
- return tu.Value
- }
- return nil
-}
-
-// WithValueBytes sets the byte slice for the comparison's value.
-func (cmp *Cmp) WithValueBytes(v []byte) { cmp.TargetUnion.(*pb.Compare_Value).Value = v }
-
-// WithRange sets the comparison to scan the range [key, end).
-func (cmp Cmp) WithRange(end string) Cmp {
- cmp.RangeEnd = []byte(end)
- return cmp
-}
-
-// WithPrefix sets the comparison to scan all keys prefixed by the key.
-func (cmp Cmp) WithPrefix() Cmp {
- cmp.RangeEnd = getPrefix(cmp.Key)
- return cmp
-}
-
-// mustInt64 panics if val isn't an int or int64. It returns an int64 otherwise.
-func mustInt64(val interface{}) int64 {
- if v, ok := val.(int64); ok {
- return v
- }
- if v, ok := val.(int); ok {
- return int64(v)
- }
- panic("bad value")
-}
-
-// mustInt64orLeaseID panics if val isn't a LeaseID, int or int64. It returns an
-// int64 otherwise.
-func mustInt64orLeaseID(val interface{}) int64 {
- if v, ok := val.(LeaseID); ok {
- return int64(v)
- }
- return mustInt64(val)
-}
diff --git a/etcd-fix/client/v3/concurrency/doc.go b/etcd-fix/client/v3/concurrency/doc.go
deleted file mode 100644
index dcdbf51..0000000
--- a/etcd-fix/client/v3/concurrency/doc.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package concurrency implements concurrency operations on top of
-// etcd such as distributed locks, barriers, and elections.
-package concurrency
diff --git a/etcd-fix/client/v3/concurrency/election.go b/etcd-fix/client/v3/concurrency/election.go
deleted file mode 100644
index 31e93d2..0000000
--- a/etcd-fix/client/v3/concurrency/election.go
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package concurrency
-
-import (
- "context"
- "errors"
- "fmt"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-var (
- ErrElectionNotLeader = errors.New("election: not leader")
- ErrElectionNoLeader = errors.New("election: no leader")
-)
-
-type Election struct {
- session *Session
-
- keyPrefix string
-
- leaderKey string
- leaderRev int64
- leaderSession *Session
- hdr *pb.ResponseHeader
-}
-
-// NewElection returns a new election on a given key prefix.
-func NewElection(s *Session, pfx string) *Election {
- return &Election{session: s, keyPrefix: pfx + "/"}
-}
-
-// ResumeElection initializes an election with a known leader.
-func ResumeElection(s *Session, pfx string, leaderKey string, leaderRev int64) *Election {
- return &Election{
- keyPrefix: pfx,
- session: s,
- leaderKey: leaderKey,
- leaderRev: leaderRev,
- leaderSession: s,
- }
-}
-
-// Campaign puts a value as eligible for the election on the prefix
-// key.
-// Multiple sessions can participate in the election for the
-// same prefix, but only one can be the leader at a time.
-//
-// If the context is 'context.TODO()/context.Background()', the Campaign
-// will continue to be blocked for other keys to be deleted, unless server
-// returns a non-recoverable error (e.g. ErrCompacted).
-// Otherwise, until the context is not cancelled or timed-out, Campaign will
-// continue to be blocked until it becomes the leader.
-func (e *Election) Campaign(ctx context.Context, val string) error {
- s := e.session
- client := e.session.Client()
-
- k := fmt.Sprintf("%s%x", e.keyPrefix, s.Lease())
- txn := client.Txn(ctx).If(v3.Compare(v3.CreateRevision(k), "=", 0))
- txn = txn.Then(v3.OpPut(k, val, v3.WithLease(s.Lease())))
- txn = txn.Else(v3.OpGet(k))
- resp, err := txn.Commit()
- if err != nil {
- return err
- }
- e.leaderKey, e.leaderRev, e.leaderSession = k, resp.Header.Revision, s
- if !resp.Succeeded {
- kv := resp.Responses[0].GetResponseRange().Kvs[0]
- e.leaderRev = kv.CreateRevision
- if string(kv.Value) != val {
- if err = e.Proclaim(ctx, val); err != nil {
- e.Resign(ctx)
- return err
- }
- }
- }
-
- _, err = waitDeletes(ctx, client, e.keyPrefix, e.leaderRev-1)
- if err != nil {
- // clean up in case of context cancel
- select {
- case <-ctx.Done():
- e.Resign(client.Ctx())
- default:
- e.leaderSession = nil
- }
- return err
- }
- e.hdr = resp.Header
-
- return nil
-}
-
-// Proclaim lets the leader announce a new value without another election.
-func (e *Election) Proclaim(ctx context.Context, val string) error {
- if e.leaderSession == nil {
- return ErrElectionNotLeader
- }
- client := e.session.Client()
- cmp := v3.Compare(v3.CreateRevision(e.leaderKey), "=", e.leaderRev)
- txn := client.Txn(ctx).If(cmp)
- txn = txn.Then(v3.OpPut(e.leaderKey, val, v3.WithLease(e.leaderSession.Lease())))
- tresp, terr := txn.Commit()
- if terr != nil {
- return terr
- }
- if !tresp.Succeeded {
- e.leaderKey = ""
- return ErrElectionNotLeader
- }
-
- e.hdr = tresp.Header
- return nil
-}
-
-// Resign lets a leader start a new election.
-func (e *Election) Resign(ctx context.Context) (err error) {
- if e.leaderSession == nil {
- return nil
- }
- client := e.session.Client()
- cmp := v3.Compare(v3.CreateRevision(e.leaderKey), "=", e.leaderRev)
- resp, err := client.Txn(ctx).If(cmp).Then(v3.OpDelete(e.leaderKey)).Commit()
- if err == nil {
- e.hdr = resp.Header
- }
- e.leaderKey = ""
- e.leaderSession = nil
- return err
-}
-
-// Leader returns the leader value for the current election.
-func (e *Election) Leader(ctx context.Context) (*v3.GetResponse, error) {
- client := e.session.Client()
- resp, err := client.Get(ctx, e.keyPrefix, v3.WithFirstCreate()...)
- if err != nil {
- return nil, err
- } else if len(resp.Kvs) == 0 {
- // no leader currently elected
- return nil, ErrElectionNoLeader
- }
- return resp, nil
-}
-
-// Observe returns a channel that reliably observes ordered leader proposals
-// as GetResponse values on every current elected leader key. It will not
-// necessarily fetch all historical leader updates, but will always post the
-// most recent leader value.
-//
-// The channel closes when the context is canceled or the underlying watcher
-// is otherwise disrupted.
-func (e *Election) Observe(ctx context.Context) <-chan v3.GetResponse {
- retc := make(chan v3.GetResponse)
- go e.observe(ctx, retc)
- return retc
-}
-
-func (e *Election) observe(ctx context.Context, ch chan<- v3.GetResponse) {
- client := e.session.Client()
-
- defer close(ch)
- for {
- resp, err := client.Get(ctx, e.keyPrefix, v3.WithFirstCreate()...)
- if err != nil {
- return
- }
-
- var kv *mvccpb.KeyValue
- var hdr *pb.ResponseHeader
-
- if len(resp.Kvs) == 0 {
- cctx, cancel := context.WithCancel(ctx)
- // wait for first key put on prefix
- opts := []v3.OpOption{v3.WithRev(resp.Header.Revision), v3.WithPrefix()}
- wch := client.Watch(cctx, e.keyPrefix, opts...)
- for kv == nil {
- wr, ok := <-wch
- if !ok || wr.Err() != nil {
- cancel()
- return
- }
- // only accept puts; a delete will make observe() spin
- for _, ev := range wr.Events {
- if ev.Type == mvccpb.PUT {
- hdr, kv = &wr.Header, ev.Kv
- // may have multiple revs; hdr.rev = the last rev
- // set to kv's rev in case batch has multiple Puts
- hdr.Revision = kv.ModRevision
- break
- }
- }
- }
- cancel()
- } else {
- hdr, kv = resp.Header, resp.Kvs[0]
- }
-
- select {
- case ch <- v3.GetResponse{Header: hdr, Kvs: []*mvccpb.KeyValue{kv}}:
- case <-ctx.Done():
- return
- }
-
- cctx, cancel := context.WithCancel(ctx)
- wch := client.Watch(cctx, string(kv.Key), v3.WithRev(hdr.Revision+1))
- keyDeleted := false
- for !keyDeleted {
- wr, ok := <-wch
- if !ok {
- cancel()
- return
- }
- for _, ev := range wr.Events {
- if ev.Type == mvccpb.DELETE {
- keyDeleted = true
- break
- }
- resp.Header = &wr.Header
- resp.Kvs = []*mvccpb.KeyValue{ev.Kv}
- select {
- case ch <- *resp:
- case <-cctx.Done():
- cancel()
- return
- }
- }
- }
- cancel()
- }
-}
-
-// Key returns the leader key if elected, empty string otherwise.
-func (e *Election) Key() string { return e.leaderKey }
-
-// Rev returns the leader key's creation revision, if elected.
-func (e *Election) Rev() int64 { return e.leaderRev }
-
-// Header is the response header from the last successful election proposal.
-func (e *Election) Header() *pb.ResponseHeader { return e.hdr }
diff --git a/etcd-fix/client/v3/concurrency/example_election_test.go b/etcd-fix/client/v3/concurrency/example_election_test.go
deleted file mode 120000
index a76f0a7..0000000
--- a/etcd-fix/client/v3/concurrency/example_election_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../../tests/integration/clientv3/concurrency/example_election_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/concurrency/example_mutex_test.go b/etcd-fix/client/v3/concurrency/example_mutex_test.go
deleted file mode 120000
index 053eb74..0000000
--- a/etcd-fix/client/v3/concurrency/example_mutex_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../../tests/integration/clientv3/concurrency/example_mutex_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/concurrency/example_stm_test.go b/etcd-fix/client/v3/concurrency/example_stm_test.go
deleted file mode 120000
index d63639e..0000000
--- a/etcd-fix/client/v3/concurrency/example_stm_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../../tests/integration/clientv3/concurrency/example_stm_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/concurrency/key.go b/etcd-fix/client/v3/concurrency/key.go
deleted file mode 100644
index 2082595..0000000
--- a/etcd-fix/client/v3/concurrency/key.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package concurrency
-
-import (
- "context"
- "fmt"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-func waitDelete(ctx context.Context, client *v3.Client, key string, rev int64) error {
- cctx, cancel := context.WithCancel(ctx)
- defer cancel()
-
- var wr v3.WatchResponse
- wch := client.Watch(cctx, key, v3.WithRev(rev))
- for wr = range wch {
- for _, ev := range wr.Events {
- if ev.Type == mvccpb.DELETE {
- return nil
- }
- }
- }
- if err := wr.Err(); err != nil {
- return err
- }
- if err := ctx.Err(); err != nil {
- return err
- }
- return fmt.Errorf("lost watcher waiting for delete")
-}
-
-// waitDeletes efficiently waits until all keys matching the prefix and no greater
-// than the create revision.
-func waitDeletes(ctx context.Context, client *v3.Client, pfx string, maxCreateRev int64) (*pb.ResponseHeader, error) {
- getOpts := append(v3.WithLastCreate(), v3.WithMaxCreateRev(maxCreateRev))
- for {
- resp, err := client.Get(ctx, pfx, getOpts...)
- if err != nil {
- return nil, err
- }
- if len(resp.Kvs) == 0 {
- return resp.Header, nil
- }
- lastKey := string(resp.Kvs[0].Key)
- if err = waitDelete(ctx, client, lastKey, resp.Header.Revision); err != nil {
- return nil, err
- }
- }
-}
diff --git a/etcd-fix/client/v3/concurrency/main_test.go b/etcd-fix/client/v3/concurrency/main_test.go
deleted file mode 100644
index 168b018..0000000
--- a/etcd-fix/client/v3/concurrency/main_test.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package concurrency_test
-
-import (
- "testing"
-
- "go.etcd.io/etcd/pkg/v3/testutil"
-)
-
-func exampleEndpoints() []string { return nil }
-
-func forUnitTestsRunInMockedContext(mocking func(), example func()) {
- mocking()
- // TODO: Call 'example' when mocking() provides realistic mocking of transport.
-
- // The real testing logic of examples gets executed
- // as part of ./tests/integration/clientv3/integration/...
-}
-
-func TestMain(m *testing.M) {
- testutil.MustTestMainWithLeakDetection(m)
-}
diff --git a/etcd-fix/client/v3/concurrency/mutex.go b/etcd-fix/client/v3/concurrency/mutex.go
deleted file mode 100644
index c3800d6..0000000
--- a/etcd-fix/client/v3/concurrency/mutex.go
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package concurrency
-
-import (
- "context"
- "errors"
- "fmt"
- "sync"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-// ErrLocked is returned by TryLock when Mutex is already locked by another session.
-var ErrLocked = errors.New("mutex: Locked by another session")
-var ErrSessionExpired = errors.New("mutex: session is expired")
-
-// Mutex implements the sync Locker interface with etcd
-type Mutex struct {
- s *Session
-
- pfx string
- myKey string
- myRev int64
- hdr *pb.ResponseHeader
-}
-
-func NewMutex(s *Session, pfx string) *Mutex {
- return &Mutex{s, pfx + "/", "", -1, nil}
-}
-
-// TryLock locks the mutex if not already locked by another session.
-// If lock is held by another session, return immediately after attempting necessary cleanup
-// The ctx argument is used for the sending/receiving Txn RPC.
-func (m *Mutex) TryLock(ctx context.Context) error {
- resp, err := m.tryAcquire(ctx)
- if err != nil {
- return err
- }
- // if no key on prefix / the minimum rev is key, already hold the lock
- ownerKey := resp.Responses[1].GetResponseRange().Kvs
- if len(ownerKey) == 0 || ownerKey[0].CreateRevision == m.myRev {
- m.hdr = resp.Header
- return nil
- }
- client := m.s.Client()
- // Cannot lock, so delete the key
- if _, err := client.Delete(ctx, m.myKey); err != nil {
- return err
- }
- m.myKey = "\x00"
- m.myRev = -1
- return ErrLocked
-}
-
-// Lock locks the mutex with a cancelable context. If the context is canceled
-// while trying to acquire the lock, the mutex tries to clean its stale lock entry.
-func (m *Mutex) Lock(ctx context.Context) error {
- resp, err := m.tryAcquire(ctx)
- if err != nil {
- return err
- }
- // if no key on prefix / the minimum rev is key, already hold the lock
- ownerKey := resp.Responses[1].GetResponseRange().Kvs
- if len(ownerKey) == 0 || ownerKey[0].CreateRevision == m.myRev {
- m.hdr = resp.Header
- return nil
- }
- client := m.s.Client()
- // wait for deletion revisions prior to myKey
- // TODO: early termination if the session key is deleted before other session keys with smaller revisions.
- _, werr := waitDeletes(ctx, client, m.pfx, m.myRev-1)
- // release lock key if wait failed
- if werr != nil {
- m.Unlock(client.Ctx())
- return werr
- }
-
- // make sure the session is not expired, and the owner key still exists.
- gresp, werr := client.Get(ctx, m.myKey)
- if werr != nil {
- m.Unlock(client.Ctx())
- return werr
- }
-
- if len(gresp.Kvs) == 0 { // is the session key lost?
- return ErrSessionExpired
- }
- m.hdr = gresp.Header
-
- return nil
-}
-
-func (m *Mutex) tryAcquire(ctx context.Context) (*v3.TxnResponse, error) {
- s := m.s
- client := m.s.Client()
-
- m.myKey = fmt.Sprintf("%s%x", m.pfx, s.Lease())
- cmp := v3.Compare(v3.CreateRevision(m.myKey), "=", 0)
- // put self in lock waiters via myKey; oldest waiter holds lock
- put := v3.OpPut(m.myKey, "", v3.WithLease(s.Lease()))
- // reuse key in case this session already holds the lock
- get := v3.OpGet(m.myKey)
- // fetch current holder to complete uncontended path with only one RPC
- getOwner := v3.OpGet(m.pfx, v3.WithFirstCreate()...)
- resp, err := client.Txn(ctx).If(cmp).Then(put, getOwner).Else(get, getOwner).Commit()
- if err != nil {
- return nil, err
- }
- m.myRev = resp.Header.Revision
- if !resp.Succeeded {
- m.myRev = resp.Responses[0].GetResponseRange().Kvs[0].CreateRevision
- }
- return resp, nil
-}
-
-func (m *Mutex) Unlock(ctx context.Context) error {
- client := m.s.Client()
- if _, err := client.Delete(ctx, m.myKey); err != nil {
- return err
- }
- m.myKey = "\x00"
- m.myRev = -1
- return nil
-}
-
-func (m *Mutex) IsOwner() v3.Cmp {
- return v3.Compare(v3.CreateRevision(m.myKey), "=", m.myRev)
-}
-
-func (m *Mutex) Key() string { return m.myKey }
-
-// Header is the response header received from etcd on acquiring the lock.
-func (m *Mutex) Header() *pb.ResponseHeader { return m.hdr }
-
-type lockerMutex struct{ *Mutex }
-
-func (lm *lockerMutex) Lock() {
- client := lm.s.Client()
- if err := lm.Mutex.Lock(client.Ctx()); err != nil {
- panic(err)
- }
-}
-func (lm *lockerMutex) Unlock() {
- client := lm.s.Client()
- if err := lm.Mutex.Unlock(client.Ctx()); err != nil {
- panic(err)
- }
-}
-
-// NewLocker creates a sync.Locker backed by an etcd mutex.
-func NewLocker(s *Session, pfx string) sync.Locker {
- return &lockerMutex{NewMutex(s, pfx)}
-}
diff --git a/etcd-fix/client/v3/concurrency/session.go b/etcd-fix/client/v3/concurrency/session.go
deleted file mode 100644
index 7143cc4..0000000
--- a/etcd-fix/client/v3/concurrency/session.go
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package concurrency
-
-import (
- "context"
- "time"
-
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-const defaultSessionTTL = 60
-
-// Session represents a lease kept alive for the lifetime of a client.
-// Fault-tolerant applications may use sessions to reason about liveness.
-type Session struct {
- client *v3.Client
- opts *sessionOptions
- id v3.LeaseID
-
- cancel context.CancelFunc
- donec <-chan struct{}
-}
-
-// NewSession gets the leased session for a client.
-func NewSession(client *v3.Client, opts ...SessionOption) (*Session, error) {
- ops := &sessionOptions{ttl: defaultSessionTTL, ctx: client.Ctx()}
- for _, opt := range opts {
- opt(ops)
- }
-
- id := ops.leaseID
- if id == v3.NoLease {
- resp, err := client.Grant(ops.ctx, int64(ops.ttl))
- if err != nil {
- return nil, err
- }
- id = resp.ID
- }
-
- ctx, cancel := context.WithCancel(ops.ctx)
- keepAlive, err := client.KeepAlive(ctx, id)
- if err != nil || keepAlive == nil {
- cancel()
- return nil, err
- }
-
- donec := make(chan struct{})
- s := &Session{client: client, opts: ops, id: id, cancel: cancel, donec: donec}
-
- // keep the lease alive until client error or cancelled context
- go func() {
- defer close(donec)
- for range keepAlive {
- // eat messages until keep alive channel closes
- }
- }()
-
- return s, nil
-}
-
-// Client is the etcd client that is attached to the session.
-func (s *Session) Client() *v3.Client {
- return s.client
-}
-
-// Lease is the lease ID for keys bound to the session.
-func (s *Session) Lease() v3.LeaseID { return s.id }
-
-// Done returns a channel that closes when the lease is orphaned, expires, or
-// is otherwise no longer being refreshed.
-func (s *Session) Done() <-chan struct{} { return s.donec }
-
-// Orphan ends the refresh for the session lease. This is useful
-// in case the state of the client connection is indeterminate (revoke
-// would fail) or when transferring lease ownership.
-func (s *Session) Orphan() {
- s.cancel()
- <-s.donec
-}
-
-// Close orphans the session and revokes the session lease.
-func (s *Session) Close() error {
- s.Orphan()
- // if revoke takes longer than the ttl, lease is expired anyway
- ctx, cancel := context.WithTimeout(s.opts.ctx, time.Duration(s.opts.ttl)*time.Second)
- _, err := s.client.Revoke(ctx, s.id)
- cancel()
- return err
-}
-
-type sessionOptions struct {
- ttl int
- leaseID v3.LeaseID
- ctx context.Context
-}
-
-// SessionOption configures Session.
-type SessionOption func(*sessionOptions)
-
-// WithTTL configures the session's TTL in seconds.
-// If TTL is <= 0, the default 60 seconds TTL will be used.
-func WithTTL(ttl int) SessionOption {
- return func(so *sessionOptions) {
- if ttl > 0 {
- so.ttl = ttl
- }
- }
-}
-
-// WithLease specifies the existing leaseID to be used for the session.
-// This is useful in process restart scenario, for example, to reclaim
-// leadership from an election prior to restart.
-func WithLease(leaseID v3.LeaseID) SessionOption {
- return func(so *sessionOptions) {
- so.leaseID = leaseID
- }
-}
-
-// WithContext assigns a context to the session instead of defaulting to
-// using the client context. This is useful for canceling NewSession and
-// Close operations immediately without having to close the client. If the
-// context is canceled before Close() completes, the session's lease will be
-// abandoned and left to expire instead of being revoked.
-func WithContext(ctx context.Context) SessionOption {
- return func(so *sessionOptions) {
- so.ctx = ctx
- }
-}
diff --git a/etcd-fix/client/v3/concurrency/stm.go b/etcd-fix/client/v3/concurrency/stm.go
deleted file mode 100644
index ba7303d..0000000
--- a/etcd-fix/client/v3/concurrency/stm.go
+++ /dev/null
@@ -1,387 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package concurrency
-
-import (
- "context"
- "math"
-
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-// STM is an interface for software transactional memory.
-type STM interface {
- // Get returns the value for a key and inserts the key in the txn's read set.
- // If Get fails, it aborts the transaction with an error, never returning.
- Get(key ...string) string
- // Put adds a value for a key to the write set.
- Put(key, val string, opts ...v3.OpOption)
- // Rev returns the revision of a key in the read set.
- Rev(key string) int64
- // Del deletes a key.
- Del(key string)
-
- // commit attempts to apply the txn's changes to the server.
- commit() *v3.TxnResponse
- reset()
-}
-
-// Isolation is an enumeration of transactional isolation levels which
-// describes how transactions should interfere and conflict.
-type Isolation int
-
-const (
- // SerializableSnapshot provides serializable isolation and also checks
- // for write conflicts.
- SerializableSnapshot Isolation = iota
- // Serializable reads within the same transaction attempt return data
- // from the at the revision of the first read.
- Serializable
- // RepeatableReads reads within the same transaction attempt always
- // return the same data.
- RepeatableReads
- // ReadCommitted reads keys from any committed revision.
- ReadCommitted
-)
-
-// stmError safely passes STM errors through panic to the STM error channel.
-type stmError struct{ err error }
-
-type stmOptions struct {
- iso Isolation
- ctx context.Context
- prefetch []string
-}
-
-type stmOption func(*stmOptions)
-
-// WithIsolation specifies the transaction isolation level.
-func WithIsolation(lvl Isolation) stmOption {
- return func(so *stmOptions) { so.iso = lvl }
-}
-
-// WithAbortContext specifies the context for permanently aborting the transaction.
-func WithAbortContext(ctx context.Context) stmOption {
- return func(so *stmOptions) { so.ctx = ctx }
-}
-
-// WithPrefetch is a hint to prefetch a list of keys before trying to apply.
-// If an STM transaction will unconditionally fetch a set of keys, prefetching
-// those keys will save the round-trip cost from requesting each key one by one
-// with Get().
-func WithPrefetch(keys ...string) stmOption {
- return func(so *stmOptions) { so.prefetch = append(so.prefetch, keys...) }
-}
-
-// NewSTM initiates a new STM instance, using serializable snapshot isolation by default.
-func NewSTM(c *v3.Client, apply func(STM) error, so ...stmOption) (*v3.TxnResponse, error) {
- opts := &stmOptions{ctx: c.Ctx()}
- for _, f := range so {
- f(opts)
- }
- if len(opts.prefetch) != 0 {
- f := apply
- apply = func(s STM) error {
- s.Get(opts.prefetch...)
- return f(s)
- }
- }
- return runSTM(mkSTM(c, opts), apply)
-}
-
-func mkSTM(c *v3.Client, opts *stmOptions) STM {
- switch opts.iso {
- case SerializableSnapshot:
- s := &stmSerializable{
- stm: stm{client: c, ctx: opts.ctx},
- prefetch: make(map[string]*v3.GetResponse),
- }
- s.conflicts = func() []v3.Cmp {
- return append(s.rset.cmps(), s.wset.cmps(s.rset.first()+1)...)
- }
- return s
- case Serializable:
- s := &stmSerializable{
- stm: stm{client: c, ctx: opts.ctx},
- prefetch: make(map[string]*v3.GetResponse),
- }
- s.conflicts = func() []v3.Cmp { return s.rset.cmps() }
- return s
- case RepeatableReads:
- s := &stm{client: c, ctx: opts.ctx, getOpts: []v3.OpOption{v3.WithSerializable()}}
- s.conflicts = func() []v3.Cmp { return s.rset.cmps() }
- return s
- case ReadCommitted:
- s := &stm{client: c, ctx: opts.ctx, getOpts: []v3.OpOption{v3.WithSerializable()}}
- s.conflicts = func() []v3.Cmp { return nil }
- return s
- default:
- panic("unsupported stm")
- }
-}
-
-type stmResponse struct {
- resp *v3.TxnResponse
- err error
-}
-
-func runSTM(s STM, apply func(STM) error) (*v3.TxnResponse, error) {
- outc := make(chan stmResponse, 1)
- go func() {
- defer func() {
- if r := recover(); r != nil {
- e, ok := r.(stmError)
- if !ok {
- // client apply panicked
- panic(r)
- }
- outc <- stmResponse{nil, e.err}
- }
- }()
- var out stmResponse
- for {
- s.reset()
- if out.err = apply(s); out.err != nil {
- break
- }
- if out.resp = s.commit(); out.resp != nil {
- break
- }
- }
- outc <- out
- }()
- r := <-outc
- return r.resp, r.err
-}
-
-// stm implements repeatable-read software transactional memory over etcd
-type stm struct {
- client *v3.Client
- ctx context.Context
- // rset holds read key values and revisions
- rset readSet
- // wset holds overwritten keys and their values
- wset writeSet
- // getOpts are the opts used for gets
- getOpts []v3.OpOption
- // conflicts computes the current conflicts on the txn
- conflicts func() []v3.Cmp
-}
-
-type stmPut struct {
- val string
- op v3.Op
-}
-
-type readSet map[string]*v3.GetResponse
-
-func (rs readSet) add(keys []string, txnresp *v3.TxnResponse) {
- for i, resp := range txnresp.Responses {
- rs[keys[i]] = (*v3.GetResponse)(resp.GetResponseRange())
- }
-}
-
-// first returns the store revision from the first fetch
-func (rs readSet) first() int64 {
- ret := int64(math.MaxInt64 - 1)
- for _, resp := range rs {
- if rev := resp.Header.Revision; rev < ret {
- ret = rev
- }
- }
- return ret
-}
-
-// cmps guards the txn from updates to read set
-func (rs readSet) cmps() []v3.Cmp {
- cmps := make([]v3.Cmp, 0, len(rs))
- for k, rk := range rs {
- cmps = append(cmps, isKeyCurrent(k, rk))
- }
- return cmps
-}
-
-type writeSet map[string]stmPut
-
-func (ws writeSet) get(keys ...string) *stmPut {
- for _, key := range keys {
- if wv, ok := ws[key]; ok {
- return &wv
- }
- }
- return nil
-}
-
-// cmps returns a cmp list testing no writes have happened past rev
-func (ws writeSet) cmps(rev int64) []v3.Cmp {
- cmps := make([]v3.Cmp, 0, len(ws))
- for key := range ws {
- cmps = append(cmps, v3.Compare(v3.ModRevision(key), "<", rev))
- }
- return cmps
-}
-
-// puts is the list of ops for all pending writes
-func (ws writeSet) puts() []v3.Op {
- puts := make([]v3.Op, 0, len(ws))
- for _, v := range ws {
- puts = append(puts, v.op)
- }
- return puts
-}
-
-func (s *stm) Get(keys ...string) string {
- if wv := s.wset.get(keys...); wv != nil {
- return wv.val
- }
- return respToValue(s.fetch(keys...))
-}
-
-func (s *stm) Put(key, val string, opts ...v3.OpOption) {
- s.wset[key] = stmPut{val, v3.OpPut(key, val, opts...)}
-}
-
-func (s *stm) Del(key string) { s.wset[key] = stmPut{"", v3.OpDelete(key)} }
-
-func (s *stm) Rev(key string) int64 {
- if resp := s.fetch(key); resp != nil && len(resp.Kvs) != 0 {
- return resp.Kvs[0].ModRevision
- }
- return 0
-}
-
-func (s *stm) commit() *v3.TxnResponse {
- txnresp, err := s.client.Txn(s.ctx).If(s.conflicts()...).Then(s.wset.puts()...).Commit()
- if err != nil {
- panic(stmError{err})
- }
- if txnresp.Succeeded {
- return txnresp
- }
- return nil
-}
-
-func (s *stm) fetch(keys ...string) *v3.GetResponse {
- if len(keys) == 0 {
- return nil
- }
- ops := make([]v3.Op, len(keys))
- for i, key := range keys {
- if resp, ok := s.rset[key]; ok {
- return resp
- }
- ops[i] = v3.OpGet(key, s.getOpts...)
- }
- txnresp, err := s.client.Txn(s.ctx).Then(ops...).Commit()
- if err != nil {
- panic(stmError{err})
- }
- s.rset.add(keys, txnresp)
- return (*v3.GetResponse)(txnresp.Responses[0].GetResponseRange())
-}
-
-func (s *stm) reset() {
- s.rset = make(map[string]*v3.GetResponse)
- s.wset = make(map[string]stmPut)
-}
-
-type stmSerializable struct {
- stm
- prefetch map[string]*v3.GetResponse
-}
-
-func (s *stmSerializable) Get(keys ...string) string {
- if wv := s.wset.get(keys...); wv != nil {
- return wv.val
- }
- firstRead := len(s.rset) == 0
- for _, key := range keys {
- if resp, ok := s.prefetch[key]; ok {
- delete(s.prefetch, key)
- s.rset[key] = resp
- }
- }
- resp := s.stm.fetch(keys...)
- if firstRead {
- // txn's base revision is defined by the first read
- s.getOpts = []v3.OpOption{
- v3.WithRev(resp.Header.Revision),
- v3.WithSerializable(),
- }
- }
- return respToValue(resp)
-}
-
-func (s *stmSerializable) Rev(key string) int64 {
- s.Get(key)
- return s.stm.Rev(key)
-}
-
-func (s *stmSerializable) gets() ([]string, []v3.Op) {
- keys := make([]string, 0, len(s.rset))
- ops := make([]v3.Op, 0, len(s.rset))
- for k := range s.rset {
- keys = append(keys, k)
- ops = append(ops, v3.OpGet(k))
- }
- return keys, ops
-}
-
-func (s *stmSerializable) commit() *v3.TxnResponse {
- keys, getops := s.gets()
- txn := s.client.Txn(s.ctx).If(s.conflicts()...).Then(s.wset.puts()...)
- // use Else to prefetch keys in case of conflict to save a round trip
- txnresp, err := txn.Else(getops...).Commit()
- if err != nil {
- panic(stmError{err})
- }
- if txnresp.Succeeded {
- return txnresp
- }
- // load prefetch with Else data
- s.rset.add(keys, txnresp)
- s.prefetch = s.rset
- s.getOpts = nil
- return nil
-}
-
-func isKeyCurrent(k string, r *v3.GetResponse) v3.Cmp {
- if len(r.Kvs) != 0 {
- return v3.Compare(v3.ModRevision(k), "=", r.Kvs[0].ModRevision)
- }
- return v3.Compare(v3.ModRevision(k), "=", 0)
-}
-
-func respToValue(resp *v3.GetResponse) string {
- if resp == nil || len(resp.Kvs) == 0 {
- return ""
- }
- return string(resp.Kvs[0].Value)
-}
-
-// NewSTMRepeatable is deprecated.
-func NewSTMRepeatable(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error) {
- return NewSTM(c, apply, WithAbortContext(ctx), WithIsolation(RepeatableReads))
-}
-
-// NewSTMSerializable is deprecated.
-func NewSTMSerializable(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error) {
- return NewSTM(c, apply, WithAbortContext(ctx), WithIsolation(Serializable))
-}
-
-// NewSTMReadCommitted is deprecated.
-func NewSTMReadCommitted(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error) {
- return NewSTM(c, apply, WithAbortContext(ctx), WithIsolation(ReadCommitted))
-}
diff --git a/etcd-fix/client/v3/config.go b/etcd-fix/client/v3/config.go
deleted file mode 100644
index 11d447d..0000000
--- a/etcd-fix/client/v3/config.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "crypto/tls"
- "time"
-
- "go.uber.org/zap"
- "google.golang.org/grpc"
-)
-
-type Config struct {
- // Endpoints is a list of URLs.
- Endpoints []string `json:"endpoints"`
-
- // AutoSyncInterval is the interval to update endpoints with its latest members.
- // 0 disables auto-sync. By default auto-sync is disabled.
- AutoSyncInterval time.Duration `json:"auto-sync-interval"`
-
- // DialTimeout is the timeout for failing to establish a connection.
- DialTimeout time.Duration `json:"dial-timeout"`
-
- // DialKeepAliveTime is the time after which client pings the server to see if
- // transport is alive.
- DialKeepAliveTime time.Duration `json:"dial-keep-alive-time"`
-
- // DialKeepAliveTimeout is the time that the client waits for a response for the
- // keep-alive probe. If the response is not received in this time, the connection is closed.
- DialKeepAliveTimeout time.Duration `json:"dial-keep-alive-timeout"`
-
- // MaxCallSendMsgSize is the client-side request send limit in bytes.
- // If 0, it defaults to 2.0 MiB (2 * 1024 * 1024).
- // Make sure that "MaxCallSendMsgSize" < server-side default send/recv limit.
- // ("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes").
- MaxCallSendMsgSize int
-
- // MaxCallRecvMsgSize is the client-side response receive limit.
- // If 0, it defaults to "math.MaxInt32", because range response can
- // easily exceed request send limits.
- // Make sure that "MaxCallRecvMsgSize" >= server-side default send/recv limit.
- // ("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes").
- MaxCallRecvMsgSize int
-
- // TLS holds the client secure credentials, if any.
- TLS *tls.Config
-
- // Username is a user name for authentication.
- Username string `json:"username"`
-
- // Password is a password for authentication.
- Password string `json:"password"`
-
- // RejectOldCluster when set will refuse to create a client against an outdated cluster.
- RejectOldCluster bool `json:"reject-old-cluster"`
-
- // DialOptions is a list of dial options for the grpc client (e.g., for interceptors).
- // For example, pass "grpc.WithBlock()" to block until the underlying connection is up.
- // Without this, Dial returns immediately and connecting the server happens in background.
- DialOptions []grpc.DialOption
-
- // Context is the default client context; it can be used to cancel grpc dial out and
- // other operations that do not have an explicit context.
- Context context.Context
-
- // LogConfig configures client-side logger.
- // If nil, use the default logger.
- // TODO: configure gRPC logger
- LogConfig *zap.Config
-
- // PermitWithoutStream when set will allow client to send keepalive pings to server without any active streams(RPCs).
- PermitWithoutStream bool `json:"permit-without-stream"`
-
- // TODO: support custom balancer picker
-}
diff --git a/etcd-fix/client/v3/credentials/credentials.go b/etcd-fix/client/v3/credentials/credentials.go
deleted file mode 100644
index 42f688e..0000000
--- a/etcd-fix/client/v3/credentials/credentials.go
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2019 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package credentials implements gRPC credential interface with etcd specific logic.
-// e.g., client handshake with custom authority parameter
-package credentials
-
-import (
- "context"
- "crypto/tls"
- "net"
- "sync"
-
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- grpccredentials "google.golang.org/grpc/credentials"
-)
-
-// Config defines gRPC credential configuration.
-type Config struct {
- TLSConfig *tls.Config
-}
-
-// Bundle defines gRPC credential interface.
-type Bundle interface {
- grpccredentials.Bundle
- UpdateAuthToken(token string)
-}
-
-// NewBundle constructs a new gRPC credential bundle.
-func NewBundle(cfg Config) Bundle {
- return &bundle{
- tc: newTransportCredential(cfg.TLSConfig),
- rc: newPerRPCCredential(),
- }
-}
-
-// bundle implements "grpccredentials.Bundle" interface.
-type bundle struct {
- tc *transportCredential
- rc *perRPCCredential
-}
-
-func (b *bundle) TransportCredentials() grpccredentials.TransportCredentials {
- return b.tc
-}
-
-func (b *bundle) PerRPCCredentials() grpccredentials.PerRPCCredentials {
- return b.rc
-}
-
-func (b *bundle) NewWithMode(mode string) (grpccredentials.Bundle, error) {
- // no-op
- return nil, nil
-}
-
-// transportCredential implements "grpccredentials.TransportCredentials" interface.
-type transportCredential struct {
- gtc grpccredentials.TransportCredentials
-}
-
-func newTransportCredential(cfg *tls.Config) *transportCredential {
- return &transportCredential{
- gtc: grpccredentials.NewTLS(cfg),
- }
-}
-
-func (tc *transportCredential) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (net.Conn, grpccredentials.AuthInfo, error) {
- return tc.gtc.ClientHandshake(ctx, authority, rawConn)
-}
-
-func (tc *transportCredential) ServerHandshake(rawConn net.Conn) (net.Conn, grpccredentials.AuthInfo, error) {
- return tc.gtc.ServerHandshake(rawConn)
-}
-
-func (tc *transportCredential) Info() grpccredentials.ProtocolInfo {
- return tc.gtc.Info()
-}
-
-func (tc *transportCredential) Clone() grpccredentials.TransportCredentials {
- return &transportCredential{
- gtc: tc.gtc.Clone(),
- }
-}
-
-func (tc *transportCredential) OverrideServerName(serverNameOverride string) error {
- return tc.gtc.OverrideServerName(serverNameOverride)
-}
-
-// perRPCCredential implements "grpccredentials.PerRPCCredentials" interface.
-type perRPCCredential struct {
- authToken string
- authTokenMu sync.RWMutex
-}
-
-func newPerRPCCredential() *perRPCCredential { return &perRPCCredential{} }
-
-func (rc *perRPCCredential) RequireTransportSecurity() bool { return false }
-
-func (rc *perRPCCredential) GetRequestMetadata(ctx context.Context, s ...string) (map[string]string, error) {
- rc.authTokenMu.RLock()
- authToken := rc.authToken
- rc.authTokenMu.RUnlock()
- if authToken == "" {
- return nil, nil
- }
- return map[string]string{rpctypes.TokenFieldNameGRPC: authToken}, nil
-}
-
-func (b *bundle) UpdateAuthToken(token string) {
- if b.rc == nil {
- return
- }
- b.rc.UpdateAuthToken(token)
-}
-
-func (rc *perRPCCredential) UpdateAuthToken(token string) {
- rc.authTokenMu.Lock()
- rc.authToken = token
- rc.authTokenMu.Unlock()
-}
diff --git a/etcd-fix/client/v3/ctx.go b/etcd-fix/client/v3/ctx.go
deleted file mode 100644
index 56b69cf..0000000
--- a/etcd-fix/client/v3/ctx.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2020 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
-
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- "go.etcd.io/etcd/api/v3/version"
- "google.golang.org/grpc/metadata"
-)
-
-// WithRequireLeader requires client requests to only succeed
-// when the cluster has a leader.
-func WithRequireLeader(ctx context.Context) context.Context {
- md, ok := metadata.FromOutgoingContext(ctx)
- if !ok { // no outgoing metadata ctx key, create one
- md = metadata.Pairs(rpctypes.MetadataRequireLeaderKey, rpctypes.MetadataHasLeader)
- return metadata.NewOutgoingContext(ctx, md)
- }
- copied := md.Copy() // avoid racey updates
- // overwrite/add 'hasleader' key/value
- copied.Set(rpctypes.MetadataRequireLeaderKey, rpctypes.MetadataHasLeader)
- return metadata.NewOutgoingContext(ctx, copied)
-}
-
-// embeds client version
-func withVersion(ctx context.Context) context.Context {
- md, ok := metadata.FromOutgoingContext(ctx)
- if !ok { // no outgoing metadata ctx key, create one
- md = metadata.Pairs(rpctypes.MetadataClientAPIVersionKey, version.APIVersion)
- return metadata.NewOutgoingContext(ctx, md)
- }
- copied := md.Copy() // avoid racey updates
- // overwrite/add version key/value
- copied.Set(rpctypes.MetadataClientAPIVersionKey, version.APIVersion)
- return metadata.NewOutgoingContext(ctx, copied)
-}
diff --git a/etcd-fix/client/v3/ctx_test.go b/etcd-fix/client/v3/ctx_test.go
deleted file mode 100644
index c0e0543..0000000
--- a/etcd-fix/client/v3/ctx_test.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2020 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "reflect"
- "testing"
-
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- "go.etcd.io/etcd/api/v3/version"
- "google.golang.org/grpc/metadata"
-)
-
-func TestMetadataWithRequireLeader(t *testing.T) {
- ctx := context.TODO()
- md, ok := metadata.FromOutgoingContext(ctx)
- if ok {
- t.Fatal("expected no outgoing metadata ctx key")
- }
-
- // add a conflicting key with some other value
- md = metadata.Pairs(rpctypes.MetadataRequireLeaderKey, "invalid")
- // add a key, and expect not be overwritten
- md.Set("hello", "1", "2")
- ctx = metadata.NewOutgoingContext(ctx, md)
-
- // expect overwrites but still keep other keys
- ctx = WithRequireLeader(ctx)
- md, ok = metadata.FromOutgoingContext(ctx)
- if !ok {
- t.Fatal("expected outgoing metadata ctx key")
- }
- if ss := md.Get(rpctypes.MetadataRequireLeaderKey); !reflect.DeepEqual(ss, []string{rpctypes.MetadataHasLeader}) {
- t.Fatalf("unexpected metadata for %q %v", rpctypes.MetadataRequireLeaderKey, ss)
- }
- if ss := md.Get("hello"); !reflect.DeepEqual(ss, []string{"1", "2"}) {
- t.Fatalf("unexpected metadata for 'hello' %v", ss)
- }
-}
-
-func TestMetadataWithClientAPIVersion(t *testing.T) {
- ctx := withVersion(WithRequireLeader(context.TODO()))
-
- md, ok := metadata.FromOutgoingContext(ctx)
- if !ok {
- t.Fatal("expected outgoing metadata ctx key")
- }
- if ss := md.Get(rpctypes.MetadataRequireLeaderKey); !reflect.DeepEqual(ss, []string{rpctypes.MetadataHasLeader}) {
- t.Fatalf("unexpected metadata for %q %v", rpctypes.MetadataRequireLeaderKey, ss)
- }
- if ss := md.Get(rpctypes.MetadataClientAPIVersionKey); !reflect.DeepEqual(ss, []string{version.APIVersion}) {
- t.Fatalf("unexpected metadata for %q %v", rpctypes.MetadataClientAPIVersionKey, ss)
- }
-}
diff --git a/etcd-fix/client/v3/doc.go b/etcd-fix/client/v3/doc.go
deleted file mode 100644
index 913cd28..0000000
--- a/etcd-fix/client/v3/doc.go
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package clientv3 implements the official Go etcd client for v3.
-//
-// Create client using `clientv3.New`:
-//
-// // expect dial time-out on ipv4 blackhole
-// _, err := clientv3.New(clientv3.Config{
-// Endpoints: []string{"http://254.0.0.1:12345"},
-// DialTimeout: 2 * time.Second,
-// })
-//
-// // etcd clientv3 >= v3.2.10, grpc/grpc-go >= v1.7.3
-// if err == context.DeadlineExceeded {
-// // handle errors
-// }
-//
-// // etcd clientv3 <= v3.2.9, grpc/grpc-go <= v1.2.1
-// if err == grpc.ErrClientConnTimeout {
-// // handle errors
-// }
-//
-// cli, err := clientv3.New(clientv3.Config{
-// Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
-// DialTimeout: 5 * time.Second,
-// })
-// if err != nil {
-// // handle error!
-// }
-// defer cli.Close()
-//
-// Make sure to close the client after using it. If the client is not closed, the
-// connection will have leaky goroutines.
-//
-// To specify a client request timeout, wrap the context with context.WithTimeout:
-//
-// ctx, cancel := context.WithTimeout(context.Background(), timeout)
-// resp, err := kvc.Put(ctx, "sample_key", "sample_value")
-// cancel()
-// if err != nil {
-// // handle error!
-// }
-// // use the response
-//
-// The Client has internal state (watchers and leases), so Clients should be reused instead of created as needed.
-// Clients are safe for concurrent use by multiple goroutines.
-//
-// etcd client returns 3 types of errors:
-//
-// 1. context error: canceled or deadline exceeded.
-// 2. gRPC status error: e.g. when clock drifts in server-side before client's context deadline exceeded.
-// 3. gRPC error: see https://github.com/etcd-io/etcd/blob/master/etcdserver/api/v3rpc/rpctypes/error.go
-//
-// Here is the example code to handle client errors:
-//
-// resp, err := kvc.Put(ctx, "", "")
-// if err != nil {
-// if err == context.Canceled {
-// // ctx is canceled by another routine
-// } else if err == context.DeadlineExceeded {
-// // ctx is attached with a deadline and it exceeded
-// } else if err == rpctypes.ErrEmptyKey {
-// // client-side error: key is not provided
-// } else if ev, ok := status.FromError(err); ok {
-// code := ev.Code()
-// if code == codes.DeadlineExceeded {
-// // server-side context might have timed-out first (due to clock skew)
-// // while original client-side context is not timed-out yet
-// }
-// } else {
-// // bad cluster endpoints, which are not etcd servers
-// }
-// }
-//
-// go func() { cli.Close() }()
-// _, err := kvc.Get(ctx, "a")
-// if err != nil {
-// // with etcd clientv3 <= v3.3
-// if err == context.Canceled {
-// // grpc balancer calls 'Get' with an inflight client.Close
-// } else if err == grpc.ErrClientConnClosing { // <= gRCP v1.7.x
-// // grpc balancer calls 'Get' after client.Close.
-// }
-// // with etcd clientv3 >= v3.4
-// if clientv3.IsConnCanceled(err) {
-// // gRPC client connection is closed
-// }
-// }
-//
-// The grpc load balancer is registered statically and is shared across etcd clients.
-// To enable detailed load balancer logging, set the ETCD_CLIENT_DEBUG environment
-// variable. E.g. "ETCD_CLIENT_DEBUG=1".
-//
-package clientv3
diff --git a/etcd-fix/client/v3/example_auth_test.go b/etcd-fix/client/v3/example_auth_test.go
deleted file mode 120000
index 7a25cc2..0000000
--- a/etcd-fix/client/v3/example_auth_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_auth_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/example_cluster_test.go b/etcd-fix/client/v3/example_cluster_test.go
deleted file mode 120000
index 302451f..0000000
--- a/etcd-fix/client/v3/example_cluster_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_cluster_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/example_kv_test.go b/etcd-fix/client/v3/example_kv_test.go
deleted file mode 120000
index 0b3bd87..0000000
--- a/etcd-fix/client/v3/example_kv_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_kv_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/example_lease_test.go b/etcd-fix/client/v3/example_lease_test.go
deleted file mode 120000
index d1cf744..0000000
--- a/etcd-fix/client/v3/example_lease_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_lease_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/example_maintenance_test.go b/etcd-fix/client/v3/example_maintenance_test.go
deleted file mode 120000
index d8bcb64..0000000
--- a/etcd-fix/client/v3/example_maintenance_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_maintenance_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/example_metrics_test.go b/etcd-fix/client/v3/example_metrics_test.go
deleted file mode 120000
index a363c3c..0000000
--- a/etcd-fix/client/v3/example_metrics_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_metrics_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/example_test.go b/etcd-fix/client/v3/example_test.go
deleted file mode 120000
index ddacab0..0000000
--- a/etcd-fix/client/v3/example_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/example_watch_test.go b/etcd-fix/client/v3/example_watch_test.go
deleted file mode 120000
index fb748be..0000000
--- a/etcd-fix/client/v3/example_watch_test.go
+++ /dev/null
@@ -1 +0,0 @@
-../../tests/integration/clientv3/examples/example_watch_test.go
\ No newline at end of file
diff --git a/etcd-fix/client/v3/experimental/recipes/barrier.go b/etcd-fix/client/v3/experimental/recipes/barrier.go
deleted file mode 100644
index 7e950a3..0000000
--- a/etcd-fix/client/v3/experimental/recipes/barrier.go
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
-
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-// Barrier creates a key in etcd to block processes, then deletes the key to
-// release all blocked processes.
-type Barrier struct {
- client *v3.Client
- ctx context.Context
-
- key string
-}
-
-func NewBarrier(client *v3.Client, key string) *Barrier {
- return &Barrier{client, context.TODO(), key}
-}
-
-// Hold creates the barrier key causing processes to block on Wait.
-func (b *Barrier) Hold() error {
- _, err := newKey(b.client, b.key, v3.NoLease)
- return err
-}
-
-// Release deletes the barrier key to unblock all waiting processes.
-func (b *Barrier) Release() error {
- _, err := b.client.Delete(b.ctx, b.key)
- return err
-}
-
-// Wait blocks on the barrier key until it is deleted. If there is no key, Wait
-// assumes Release has already been called and returns immediately.
-func (b *Barrier) Wait() error {
- resp, err := b.client.Get(b.ctx, b.key, v3.WithFirstKey()...)
- if err != nil {
- return err
- }
- if len(resp.Kvs) == 0 {
- // key already removed
- return nil
- }
- _, err = WaitEvents(
- b.client,
- b.key,
- resp.Header.Revision,
- []mvccpb.Event_EventType{mvccpb.PUT, mvccpb.DELETE})
- return err
-}
diff --git a/etcd-fix/client/v3/experimental/recipes/client.go b/etcd-fix/client/v3/experimental/recipes/client.go
deleted file mode 100644
index 6dd5b13..0000000
--- a/etcd-fix/client/v3/experimental/recipes/client.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
- "errors"
-
- spb "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-var (
- ErrKeyExists = errors.New("key already exists")
- ErrWaitMismatch = errors.New("unexpected wait result")
- ErrTooManyClients = errors.New("too many clients")
- ErrNoWatcher = errors.New("no watcher channel")
-)
-
-// deleteRevKey deletes a key by revision, returning false if key is missing
-func deleteRevKey(kv v3.KV, key string, rev int64) (bool, error) {
- cmp := v3.Compare(v3.ModRevision(key), "=", rev)
- req := v3.OpDelete(key)
- txnresp, err := kv.Txn(context.TODO()).If(cmp).Then(req).Commit()
- if err != nil {
- return false, err
- } else if !txnresp.Succeeded {
- return false, nil
- }
- return true, nil
-}
-
-func claimFirstKey(kv v3.KV, kvs []*spb.KeyValue) (*spb.KeyValue, error) {
- for _, k := range kvs {
- ok, err := deleteRevKey(kv, string(k.Key), k.ModRevision)
- if err != nil {
- return nil, err
- } else if ok {
- return k, nil
- }
- }
- return nil, nil
-}
diff --git a/etcd-fix/client/v3/experimental/recipes/doc.go b/etcd-fix/client/v3/experimental/recipes/doc.go
deleted file mode 100644
index 386be97..0000000
--- a/etcd-fix/client/v3/experimental/recipes/doc.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package recipe contains experimental client-side distributed
-// synchronization primitives.
-package recipe
diff --git a/etcd-fix/client/v3/experimental/recipes/double_barrier.go b/etcd-fix/client/v3/experimental/recipes/double_barrier.go
deleted file mode 100644
index eac5d4f..0000000
--- a/etcd-fix/client/v3/experimental/recipes/double_barrier.go
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
-
- "go.etcd.io/etcd/api/v3/mvccpb"
- "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/client/v3/concurrency"
-)
-
-// DoubleBarrier blocks processes on Enter until an expected count enters, then
-// blocks again on Leave until all processes have left.
-type DoubleBarrier struct {
- s *concurrency.Session
- ctx context.Context
-
- key string // key for the collective barrier
- count int
- myKey *EphemeralKV // current key for this process on the barrier
-}
-
-func NewDoubleBarrier(s *concurrency.Session, key string, count int) *DoubleBarrier {
- return &DoubleBarrier{
- s: s,
- ctx: context.TODO(),
- key: key,
- count: count,
- }
-}
-
-// Enter waits for "count" processes to enter the barrier then returns
-func (b *DoubleBarrier) Enter() error {
- client := b.s.Client()
- ek, err := newUniqueEphemeralKey(b.s, b.key+"/waiters")
- if err != nil {
- return err
- }
- b.myKey = ek
-
- resp, err := client.Get(b.ctx, b.key+"/waiters", clientv3.WithPrefix())
- if err != nil {
- return err
- }
-
- if len(resp.Kvs) > b.count {
- return ErrTooManyClients
- }
-
- if len(resp.Kvs) == b.count {
- // unblock waiters
- _, err = client.Put(b.ctx, b.key+"/ready", "")
- return err
- }
-
- _, err = WaitEvents(
- client,
- b.key+"/ready",
- ek.Revision(),
- []mvccpb.Event_EventType{mvccpb.PUT})
- return err
-}
-
-// Leave waits for "count" processes to leave the barrier then returns
-func (b *DoubleBarrier) Leave() error {
- client := b.s.Client()
- resp, err := client.Get(b.ctx, b.key+"/waiters", clientv3.WithPrefix())
- if err != nil {
- return err
- }
- if len(resp.Kvs) == 0 {
- return nil
- }
-
- lowest, highest := resp.Kvs[0], resp.Kvs[0]
- for _, k := range resp.Kvs {
- if k.ModRevision < lowest.ModRevision {
- lowest = k
- }
- if k.ModRevision > highest.ModRevision {
- highest = k
- }
- }
- isLowest := string(lowest.Key) == b.myKey.Key()
-
- if len(resp.Kvs) == 1 {
- // this is the only node in the barrier; finish up
- if _, err = client.Delete(b.ctx, b.key+"/ready"); err != nil {
- return err
- }
- return b.myKey.Delete()
- }
-
- // this ensures that if a process fails, the ephemeral lease will be
- // revoked, its barrier key is removed, and the barrier can resume
-
- // lowest process in node => wait on highest process
- if isLowest {
- _, err = WaitEvents(
- client,
- string(highest.Key),
- highest.ModRevision,
- []mvccpb.Event_EventType{mvccpb.DELETE})
- if err != nil {
- return err
- }
- return b.Leave()
- }
-
- // delete self and wait on lowest process
- if err = b.myKey.Delete(); err != nil {
- return err
- }
-
- key := string(lowest.Key)
- _, err = WaitEvents(
- client,
- key,
- lowest.ModRevision,
- []mvccpb.Event_EventType{mvccpb.DELETE})
- if err != nil {
- return err
- }
- return b.Leave()
-}
diff --git a/etcd-fix/client/v3/experimental/recipes/grpc_gateway/user_add.sh b/etcd-fix/client/v3/experimental/recipes/grpc_gateway/user_add.sh
deleted file mode 100644
index 2ad3a54..0000000
--- a/etcd-fix/client/v3/experimental/recipes/grpc_gateway/user_add.sh
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/bash
-
-# Copyright 2018 The etcd Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-usage () {
- echo 'Username required: ./user_add.sh $username'
- exit
-}
-
-if [ "$1" == "" ]; then
- usage
-fi
-
-newuser=$1
-read -r -s -p "Enter password for $newuser" newpass
-
-user=root
-pass=toor
-host=127.0.0.1
-port=2379
-api=v3
-
-cacert="path/to/ca.pem"
-key="path/to/client-key.pem"
-cert="path/to/client.pem"
-
-tokengen() {
- json=$(printf '{"name": "%s", "password": "%s"}' \
- "$(escape "$1")" \
- "$(escape "$2")"
- )
- curl -s --cacert $cacert \
- --key $key \
- --cert $cert \
- -X POST \
- -d "$json" \
- https://${host}:${port}/${api}/auth/authenticate \
- | jq -r '.token'
-}
-
-add_user() {
- json=$(printf '{"name": "%s", "password": "%s"}' \
- "$(escape "$1")" \
- "$(escape "$2")"
- )
- curl -s --cacert $cacert \
- --key $key \
- --cert $cert \
- -H "Authorization: $3" \
- -X POST \
- -d "$json" \
- https://${host}:${port}/${api}/auth/user/add
-}
-
-escape() {
- echo "${1//\"/\\\"}"
-}
-
-token=$(tokengen $user $pass)
-response=$(add_user $newuser $newpass $token)
-
-echo -e "\\n$response"
\ No newline at end of file
diff --git a/etcd-fix/client/v3/experimental/recipes/key.go b/etcd-fix/client/v3/experimental/recipes/key.go
deleted file mode 100644
index 10362c1..0000000
--- a/etcd-fix/client/v3/experimental/recipes/key.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
- "fmt"
- "strings"
- "time"
-
- v3 "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/client/v3/concurrency"
-)
-
-// RemoteKV is a key/revision pair created by the client and stored on etcd
-type RemoteKV struct {
- kv v3.KV
- key string
- rev int64
- val string
-}
-
-func newKey(kv v3.KV, key string, leaseID v3.LeaseID) (*RemoteKV, error) {
- return newKV(kv, key, "", leaseID)
-}
-
-func newKV(kv v3.KV, key, val string, leaseID v3.LeaseID) (*RemoteKV, error) {
- rev, err := putNewKV(kv, key, val, leaseID)
- if err != nil {
- return nil, err
- }
- return &RemoteKV{kv, key, rev, val}, nil
-}
-
-func newUniqueKV(kv v3.KV, prefix string, val string) (*RemoteKV, error) {
- for {
- newKey := fmt.Sprintf("%s/%v", prefix, time.Now().UnixNano())
- rev, err := putNewKV(kv, newKey, val, v3.NoLease)
- if err == nil {
- return &RemoteKV{kv, newKey, rev, val}, nil
- }
- if err != ErrKeyExists {
- return nil, err
- }
- }
-}
-
-// putNewKV attempts to create the given key, only succeeding if the key did
-// not yet exist.
-func putNewKV(kv v3.KV, key, val string, leaseID v3.LeaseID) (int64, error) {
- cmp := v3.Compare(v3.Version(key), "=", 0)
- req := v3.OpPut(key, val, v3.WithLease(leaseID))
- txnresp, err := kv.Txn(context.TODO()).If(cmp).Then(req).Commit()
- if err != nil {
- return 0, err
- }
- if !txnresp.Succeeded {
- return 0, ErrKeyExists
- }
- return txnresp.Header.Revision, nil
-}
-
-// newSequentialKV allocates a new sequential key /nnnnn with a given
-// prefix and value. Note: a bookkeeping node __ is also allocated.
-func newSequentialKV(kv v3.KV, prefix, val string) (*RemoteKV, error) {
- resp, err := kv.Get(context.TODO(), prefix, v3.WithLastKey()...)
- if err != nil {
- return nil, err
- }
-
- // add 1 to last key, if any
- newSeqNum := 0
- if len(resp.Kvs) != 0 {
- fields := strings.Split(string(resp.Kvs[0].Key), "/")
- _, serr := fmt.Sscanf(fields[len(fields)-1], "%d", &newSeqNum)
- if serr != nil {
- return nil, serr
- }
- newSeqNum++
- }
- newKey := fmt.Sprintf("%s/%016d", prefix, newSeqNum)
-
- // base prefix key must be current (i.e., <=) with the server update;
- // the base key is important to avoid the following:
- // N1: LastKey() == 1, start txn.
- // N2: new Key 2, new Key 3, Delete Key 2
- // N1: txn succeeds allocating key 2 when it shouldn't
- baseKey := "__" + prefix
-
- // current revision might contain modification so +1
- cmp := v3.Compare(v3.ModRevision(baseKey), "<", resp.Header.Revision+1)
- reqPrefix := v3.OpPut(baseKey, "")
- reqnewKey := v3.OpPut(newKey, val)
-
- txn := kv.Txn(context.TODO())
- txnresp, err := txn.If(cmp).Then(reqPrefix, reqnewKey).Commit()
- if err != nil {
- return nil, err
- }
- if !txnresp.Succeeded {
- return newSequentialKV(kv, prefix, val)
- }
- return &RemoteKV{kv, newKey, txnresp.Header.Revision, val}, nil
-}
-
-func (rk *RemoteKV) Key() string { return rk.key }
-func (rk *RemoteKV) Revision() int64 { return rk.rev }
-func (rk *RemoteKV) Value() string { return rk.val }
-
-func (rk *RemoteKV) Delete() error {
- if rk.kv == nil {
- return nil
- }
- _, err := rk.kv.Delete(context.TODO(), rk.key)
- rk.kv = nil
- return err
-}
-
-func (rk *RemoteKV) Put(val string) error {
- _, err := rk.kv.Put(context.TODO(), rk.key, val)
- return err
-}
-
-// EphemeralKV is a new key associated with a session lease
-type EphemeralKV struct{ RemoteKV }
-
-// newEphemeralKV creates a new key/value pair associated with a session lease
-func newEphemeralKV(s *concurrency.Session, key, val string) (*EphemeralKV, error) {
- k, err := newKV(s.Client(), key, val, s.Lease())
- if err != nil {
- return nil, err
- }
- return &EphemeralKV{*k}, nil
-}
-
-// newUniqueEphemeralKey creates a new unique valueless key associated with a session lease
-func newUniqueEphemeralKey(s *concurrency.Session, prefix string) (*EphemeralKV, error) {
- return newUniqueEphemeralKV(s, prefix, "")
-}
-
-// newUniqueEphemeralKV creates a new unique key/value pair associated with a session lease
-func newUniqueEphemeralKV(s *concurrency.Session, prefix, val string) (ek *EphemeralKV, err error) {
- for {
- newKey := fmt.Sprintf("%s/%v", prefix, time.Now().UnixNano())
- ek, err = newEphemeralKV(s, newKey, val)
- if err == nil || err != ErrKeyExists {
- break
- }
- }
- return ek, err
-}
diff --git a/etcd-fix/client/v3/experimental/recipes/priority_queue.go b/etcd-fix/client/v3/experimental/recipes/priority_queue.go
deleted file mode 100644
index 1b26067..0000000
--- a/etcd-fix/client/v3/experimental/recipes/priority_queue.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
- "fmt"
-
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-// PriorityQueue implements a multi-reader, multi-writer distributed queue.
-type PriorityQueue struct {
- client *v3.Client
- ctx context.Context
- key string
-}
-
-// NewPriorityQueue creates an etcd priority queue.
-func NewPriorityQueue(client *v3.Client, key string) *PriorityQueue {
- return &PriorityQueue{client, context.TODO(), key + "/"}
-}
-
-// Enqueue puts a value into a queue with a given priority.
-func (q *PriorityQueue) Enqueue(val string, pr uint16) error {
- prefix := fmt.Sprintf("%s%05d", q.key, pr)
- _, err := newSequentialKV(q.client, prefix, val)
- return err
-}
-
-// Dequeue returns Enqueue()'d items in FIFO order. If the
-// queue is empty, Dequeue blocks until items are available.
-func (q *PriorityQueue) Dequeue() (string, error) {
- // TODO: fewer round trips by fetching more than one key
- resp, err := q.client.Get(q.ctx, q.key, v3.WithFirstKey()...)
- if err != nil {
- return "", err
- }
-
- kv, err := claimFirstKey(q.client, resp.Kvs)
- if err != nil {
- return "", err
- } else if kv != nil {
- return string(kv.Value), nil
- } else if resp.More {
- // missed some items, retry to read in more
- return q.Dequeue()
- }
-
- // nothing to dequeue; wait on items
- ev, err := WaitPrefixEvents(
- q.client,
- q.key,
- resp.Header.Revision,
- []mvccpb.Event_EventType{mvccpb.PUT})
- if err != nil {
- return "", err
- }
-
- ok, err := deleteRevKey(q.client, string(ev.Kv.Key), ev.Kv.ModRevision)
- if err != nil {
- return "", err
- } else if !ok {
- return q.Dequeue()
- }
- return string(ev.Kv.Value), err
-}
diff --git a/etcd-fix/client/v3/experimental/recipes/queue.go b/etcd-fix/client/v3/experimental/recipes/queue.go
deleted file mode 100644
index 9c6b037..0000000
--- a/etcd-fix/client/v3/experimental/recipes/queue.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
-
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-// Queue implements a multi-reader, multi-writer distributed queue.
-type Queue struct {
- client *v3.Client
- ctx context.Context
-
- keyPrefix string
-}
-
-func NewQueue(client *v3.Client, keyPrefix string) *Queue {
- return &Queue{client, context.TODO(), keyPrefix}
-}
-
-func (q *Queue) Enqueue(val string) error {
- _, err := newUniqueKV(q.client, q.keyPrefix, val)
- return err
-}
-
-// Dequeue returns Enqueue()'d elements in FIFO order. If the
-// queue is empty, Dequeue blocks until elements are available.
-func (q *Queue) Dequeue() (string, error) {
- // TODO: fewer round trips by fetching more than one key
- resp, err := q.client.Get(q.ctx, q.keyPrefix, v3.WithFirstRev()...)
- if err != nil {
- return "", err
- }
-
- kv, err := claimFirstKey(q.client, resp.Kvs)
- if err != nil {
- return "", err
- } else if kv != nil {
- return string(kv.Value), nil
- } else if resp.More {
- // missed some items, retry to read in more
- return q.Dequeue()
- }
-
- // nothing yet; wait on elements
- ev, err := WaitPrefixEvents(
- q.client,
- q.keyPrefix,
- resp.Header.Revision,
- []mvccpb.Event_EventType{mvccpb.PUT})
- if err != nil {
- return "", err
- }
-
- ok, err := deleteRevKey(q.client, string(ev.Kv.Key), ev.Kv.ModRevision)
- if err != nil {
- return "", err
- } else if !ok {
- return q.Dequeue()
- }
- return string(ev.Kv.Value), err
-}
diff --git a/etcd-fix/client/v3/experimental/recipes/rwmutex.go b/etcd-fix/client/v3/experimental/recipes/rwmutex.go
deleted file mode 100644
index 9f520ba..0000000
--- a/etcd-fix/client/v3/experimental/recipes/rwmutex.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
-
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/client/v3/concurrency"
-)
-
-type RWMutex struct {
- s *concurrency.Session
- ctx context.Context
-
- pfx string
- myKey *EphemeralKV
-}
-
-func NewRWMutex(s *concurrency.Session, prefix string) *RWMutex {
- return &RWMutex{s, context.TODO(), prefix + "/", nil}
-}
-
-func (rwm *RWMutex) RLock() error {
- rk, err := newUniqueEphemeralKey(rwm.s, rwm.pfx+"read")
- if err != nil {
- return err
- }
- rwm.myKey = rk
- // wait until nodes with "write-" and a lower revision number than myKey are gone
- for {
- if done, werr := rwm.waitOnLastRev(rwm.pfx + "write"); done || werr != nil {
- return werr
- }
- }
-}
-
-func (rwm *RWMutex) Lock() error {
- rk, err := newUniqueEphemeralKey(rwm.s, rwm.pfx+"write")
- if err != nil {
- return err
- }
- rwm.myKey = rk
- // wait until all keys of lower revision than myKey are gone
- for {
- if done, werr := rwm.waitOnLastRev(rwm.pfx); done || werr != nil {
- return werr
- }
- // get the new lowest key until this is the only one left
- }
-}
-
-// waitOnLowest will wait on the last key with a revision < rwm.myKey.Revision with a
-// given prefix. If there are no keys left to wait on, return true.
-func (rwm *RWMutex) waitOnLastRev(pfx string) (bool, error) {
- client := rwm.s.Client()
- // get key that's blocking myKey
- opts := append(v3.WithLastRev(), v3.WithMaxModRev(rwm.myKey.Revision()-1))
- lastKey, err := client.Get(rwm.ctx, pfx, opts...)
- if err != nil {
- return false, err
- }
- if len(lastKey.Kvs) == 0 {
- return true, nil
- }
- // wait for release on blocking key
- _, err = WaitEvents(
- client,
- string(lastKey.Kvs[0].Key),
- rwm.myKey.Revision(),
- []mvccpb.Event_EventType{mvccpb.DELETE})
- return false, err
-}
-
-func (rwm *RWMutex) RUnlock() error { return rwm.myKey.Delete() }
-func (rwm *RWMutex) Unlock() error { return rwm.myKey.Delete() }
diff --git a/etcd-fix/client/v3/experimental/recipes/watch.go b/etcd-fix/client/v3/experimental/recipes/watch.go
deleted file mode 100644
index fd4a871..0000000
--- a/etcd-fix/client/v3/experimental/recipes/watch.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package recipe
-
-import (
- "context"
-
- "go.etcd.io/etcd/api/v3/mvccpb"
- "go.etcd.io/etcd/client/v3"
-)
-
-// WaitEvents waits on a key until it observes the given events and returns the final one.
-func WaitEvents(c *clientv3.Client, key string, rev int64, evs []mvccpb.Event_EventType) (*clientv3.Event, error) {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
- wc := c.Watch(ctx, key, clientv3.WithRev(rev))
- if wc == nil {
- return nil, ErrNoWatcher
- }
- return waitEvents(wc, evs), nil
-}
-
-func WaitPrefixEvents(c *clientv3.Client, prefix string, rev int64, evs []mvccpb.Event_EventType) (*clientv3.Event, error) {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
- wc := c.Watch(ctx, prefix, clientv3.WithPrefix(), clientv3.WithRev(rev))
- if wc == nil {
- return nil, ErrNoWatcher
- }
- return waitEvents(wc, evs), nil
-}
-
-func waitEvents(wc clientv3.WatchChan, evs []mvccpb.Event_EventType) *clientv3.Event {
- i := 0
- for wresp := range wc {
- for _, ev := range wresp.Events {
- if ev.Type == evs[i] {
- i++
- if i == len(evs) {
- return ev
- }
- }
- }
- }
- return nil
-}
diff --git a/etcd-fix/client/v3/go.mod b/etcd-fix/client/v3/go.mod
deleted file mode 100644
index 928c335..0000000
--- a/etcd-fix/client/v3/go.mod
+++ /dev/null
@@ -1,28 +0,0 @@
-module go.etcd.io/etcd/client/v3
-
-go 1.15
-
-require (
- github.com/dustin/go-humanize v1.0.0
- github.com/google/uuid v1.1.2
- github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
- github.com/prometheus/client_golang v1.5.1
- go.etcd.io/etcd/api/v3 v3.5.0-pre
- go.etcd.io/etcd/pkg/v3 v3.5.0-pre
- go.uber.org/zap v1.16.0
- google.golang.org/grpc v1.29.1
- sigs.k8s.io/yaml v1.2.0
-)
-
-replace (
- go.etcd.io/etcd/api/v3 => ../../api
- go.etcd.io/etcd/pkg/v3 => ../../pkg
-)
-
-// Bad imports are sometimes causing attempts to pull that code.
-// This makes the error more explicit.
-replace (
- go.etcd.io/etcd => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/etcd/v3 => ./FORBIDDEN_DEPENDENCY
- go.etcd.io/tests/v3 => ./FORBIDDEN_DEPENDENCY
-)
diff --git a/etcd-fix/client/v3/go.sum b/etcd-fix/client/v3/go.sum
deleted file mode 100644
index 0ea2c38..0000000
--- a/etcd-fix/client/v3/go.sum
+++ /dev/null
@@ -1,202 +0,0 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg=
-github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
-github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA=
-github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
-github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
-github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
-go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
-go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
-go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs=
-golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM=
-golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
-sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/etcd-fix/client/v3/kv.go b/etcd-fix/client/v3/kv.go
deleted file mode 100644
index 5e9fb7d..0000000
--- a/etcd-fix/client/v3/kv.go
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-
- "google.golang.org/grpc"
-)
-
-type (
- CompactResponse pb.CompactionResponse
- PutResponse pb.PutResponse
- GetResponse pb.RangeResponse
- DeleteResponse pb.DeleteRangeResponse
- TxnResponse pb.TxnResponse
-)
-
-type KV interface {
- // Put puts a key-value pair into etcd.
- // Note that key,value can be plain bytes array and string is
- // an immutable representation of that bytes array.
- // To get a string of bytes, do string([]byte{0x10, 0x20}).
- Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error)
-
- // Get retrieves keys.
- // By default, Get will return the value for "key", if any.
- // When passed WithRange(end), Get will return the keys in the range [key, end).
- // When passed WithFromKey(), Get returns keys greater than or equal to key.
- // When passed WithRev(rev) with rev > 0, Get retrieves keys at the given revision;
- // if the required revision is compacted, the request will fail with ErrCompacted .
- // When passed WithLimit(limit), the number of returned keys is bounded by limit.
- // When passed WithSort(), the keys will be sorted.
- Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error)
-
- // Delete deletes a key, or optionally using WithRange(end), [key, end).
- Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error)
-
- // Compact compacts etcd KV history before the given rev.
- Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error)
-
- // Do applies a single Op on KV without a transaction.
- // Do is useful when creating arbitrary operations to be issued at a
- // later time; the user can range over the operations, calling Do to
- // execute them. Get/Put/Delete, on the other hand, are best suited
- // for when the operation should be issued at the time of declaration.
- Do(ctx context.Context, op Op) (OpResponse, error)
-
- // Txn creates a transaction.
- Txn(ctx context.Context) Txn
-}
-
-type OpResponse struct {
- put *PutResponse
- get *GetResponse
- del *DeleteResponse
- txn *TxnResponse
-}
-
-func (op OpResponse) Put() *PutResponse { return op.put }
-func (op OpResponse) Get() *GetResponse { return op.get }
-func (op OpResponse) Del() *DeleteResponse { return op.del }
-func (op OpResponse) Txn() *TxnResponse { return op.txn }
-
-func (resp *PutResponse) OpResponse() OpResponse {
- return OpResponse{put: resp}
-}
-func (resp *GetResponse) OpResponse() OpResponse {
- return OpResponse{get: resp}
-}
-func (resp *DeleteResponse) OpResponse() OpResponse {
- return OpResponse{del: resp}
-}
-func (resp *TxnResponse) OpResponse() OpResponse {
- return OpResponse{txn: resp}
-}
-
-type kv struct {
- remote pb.KVClient
- callOpts []grpc.CallOption
-}
-
-func NewKV(c *Client) KV {
- api := &kv{remote: RetryKVClient(c)}
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func NewKVFromKVClient(remote pb.KVClient, c *Client) KV {
- api := &kv{remote: remote}
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func (kv *kv) Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error) {
- r, err := kv.Do(ctx, OpPut(key, val, opts...))
- return r.put, toErr(ctx, err)
-}
-
-func (kv *kv) Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error) {
- r, err := kv.Do(ctx, OpGet(key, opts...))
- return r.get, toErr(ctx, err)
-}
-
-func (kv *kv) Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error) {
- r, err := kv.Do(ctx, OpDelete(key, opts...))
- return r.del, toErr(ctx, err)
-}
-
-func (kv *kv) Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error) {
- resp, err := kv.remote.Compact(ctx, OpCompact(rev, opts...).toRequest(), kv.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- return (*CompactResponse)(resp), err
-}
-
-func (kv *kv) Txn(ctx context.Context) Txn {
- return &txn{
- kv: kv,
- ctx: ctx,
- callOpts: kv.callOpts,
- }
-}
-
-func (kv *kv) Do(ctx context.Context, op Op) (OpResponse, error) {
- var err error
- switch op.t {
- case tRange:
- var resp *pb.RangeResponse
- resp, err = kv.remote.Range(ctx, op.toRangeRequest(), kv.callOpts...)
- if err == nil {
- return OpResponse{get: (*GetResponse)(resp)}, nil
- }
- case tPut:
- var resp *pb.PutResponse
- r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID), PrevKv: op.prevKV, IgnoreValue: op.ignoreValue, IgnoreLease: op.ignoreLease}
- resp, err = kv.remote.Put(ctx, r, kv.callOpts...)
- if err == nil {
- return OpResponse{put: (*PutResponse)(resp)}, nil
- }
- case tDeleteRange:
- var resp *pb.DeleteRangeResponse
- r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end, PrevKv: op.prevKV}
- resp, err = kv.remote.DeleteRange(ctx, r, kv.callOpts...)
- if err == nil {
- return OpResponse{del: (*DeleteResponse)(resp)}, nil
- }
- case tTxn:
- var resp *pb.TxnResponse
- resp, err = kv.remote.Txn(ctx, op.toTxnRequest(), kv.callOpts...)
- if err == nil {
- return OpResponse{txn: (*TxnResponse)(resp)}, nil
- }
- default:
- panic("Unknown op")
- }
- return OpResponse{}, toErr(ctx, err)
-}
diff --git a/etcd-fix/client/v3/lease.go b/etcd-fix/client/v3/lease.go
deleted file mode 100644
index eb6e8dc..0000000
--- a/etcd-fix/client/v3/lease.go
+++ /dev/null
@@ -1,596 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "sync"
- "time"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
-
- "go.uber.org/zap"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
-)
-
-type (
- LeaseRevokeResponse pb.LeaseRevokeResponse
- LeaseID int64
-)
-
-// LeaseGrantResponse wraps the protobuf message LeaseGrantResponse.
-type LeaseGrantResponse struct {
- *pb.ResponseHeader
- ID LeaseID
- TTL int64
- Error string
-}
-
-// LeaseKeepAliveResponse wraps the protobuf message LeaseKeepAliveResponse.
-type LeaseKeepAliveResponse struct {
- *pb.ResponseHeader
- ID LeaseID
- TTL int64
-}
-
-// LeaseTimeToLiveResponse wraps the protobuf message LeaseTimeToLiveResponse.
-type LeaseTimeToLiveResponse struct {
- *pb.ResponseHeader
- ID LeaseID `json:"id"`
-
- // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. Expired lease will return -1.
- TTL int64 `json:"ttl"`
-
- // GrantedTTL is the initial granted time in seconds upon lease creation/renewal.
- GrantedTTL int64 `json:"granted-ttl"`
-
- // Keys is the list of keys attached to this lease.
- Keys [][]byte `json:"keys"`
-}
-
-// LeaseStatus represents a lease status.
-type LeaseStatus struct {
- ID LeaseID `json:"id"`
- // TODO: TTL int64
-}
-
-// LeaseLeasesResponse wraps the protobuf message LeaseLeasesResponse.
-type LeaseLeasesResponse struct {
- *pb.ResponseHeader
- Leases []LeaseStatus `json:"leases"`
-}
-
-const (
- // defaultTTL is the assumed lease TTL used for the first keepalive
- // deadline before the actual TTL is known to the client.
- defaultTTL = 5 * time.Second
- // NoLease is a lease ID for the absence of a lease.
- NoLease LeaseID = 0
-
- // retryConnWait is how long to wait before retrying request due to an error
- retryConnWait = 500 * time.Millisecond
-)
-
-// LeaseResponseChSize is the size of buffer to store unsent lease responses.
-// WARNING: DO NOT UPDATE.
-// Only for testing purposes.
-var LeaseResponseChSize = 16
-
-// ErrKeepAliveHalted is returned if client keep alive loop halts with an unexpected error.
-//
-// This usually means that automatic lease renewal via KeepAlive is broken, but KeepAliveOnce will still work as expected.
-type ErrKeepAliveHalted struct {
- Reason error
-}
-
-func (e ErrKeepAliveHalted) Error() string {
- s := "etcdclient: leases keep alive halted"
- if e.Reason != nil {
- s += ": " + e.Reason.Error()
- }
- return s
-}
-
-type Lease interface {
- // Grant creates a new lease.
- Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error)
-
- // Revoke revokes the given lease.
- Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error)
-
- // TimeToLive retrieves the lease information of the given lease ID.
- TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error)
-
- // Leases retrieves all leases.
- Leases(ctx context.Context) (*LeaseLeasesResponse, error)
-
- // KeepAlive attempts to keep the given lease alive forever. If the keepalive responses posted
- // to the channel are not consumed promptly the channel may become full. When full, the lease
- // client will continue sending keep alive requests to the etcd server, but will drop responses
- // until there is capacity on the channel to send more responses.
- //
- // If client keep alive loop halts with an unexpected error (e.g. "etcdserver: no leader") or
- // canceled by the caller (e.g. context.Canceled), KeepAlive returns a ErrKeepAliveHalted error
- // containing the error reason.
- //
- // The returned "LeaseKeepAliveResponse" channel closes if underlying keep
- // alive stream is interrupted in some way the client cannot handle itself;
- // given context "ctx" is canceled or timed out.
- //
- // TODO(v4.0): post errors to last keep alive message before closing
- // (see https://github.com/etcd-io/etcd/pull/7866)
- KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error)
-
- // KeepAliveOnce renews the lease once. The response corresponds to the
- // first message from calling KeepAlive. If the response has a recoverable
- // error, KeepAliveOnce will retry the RPC with a new keep alive message.
- //
- // In most of the cases, Keepalive should be used instead of KeepAliveOnce.
- KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error)
-
- // Close releases all resources Lease keeps for efficient communication
- // with the etcd server.
- Close() error
-}
-
-type lessor struct {
- mu sync.Mutex // guards all fields
-
- // donec is closed and loopErr is set when recvKeepAliveLoop stops
- donec chan struct{}
- loopErr error
-
- remote pb.LeaseClient
-
- stream pb.Lease_LeaseKeepAliveClient
- streamCancel context.CancelFunc
-
- stopCtx context.Context
- stopCancel context.CancelFunc
-
- keepAlives map[LeaseID]*keepAlive
-
- // firstKeepAliveTimeout is the timeout for the first keepalive request
- // before the actual TTL is known to the lease client
- firstKeepAliveTimeout time.Duration
-
- // firstKeepAliveOnce ensures stream starts after first KeepAlive call.
- firstKeepAliveOnce sync.Once
-
- callOpts []grpc.CallOption
-
- lg *zap.Logger
-}
-
-// keepAlive multiplexes a keepalive for a lease over multiple channels
-type keepAlive struct {
- chs []chan<- *LeaseKeepAliveResponse
- ctxs []context.Context
- // deadline is the time the keep alive channels close if no response
- deadline time.Time
- // nextKeepAlive is when to send the next keep alive message
- nextKeepAlive time.Time
- // donec is closed on lease revoke, expiration, or cancel.
- donec chan struct{}
-}
-
-func NewLease(c *Client) Lease {
- return NewLeaseFromLeaseClient(RetryLeaseClient(c), c, c.cfg.DialTimeout+time.Second)
-}
-
-func NewLeaseFromLeaseClient(remote pb.LeaseClient, c *Client, keepAliveTimeout time.Duration) Lease {
- l := &lessor{
- donec: make(chan struct{}),
- keepAlives: make(map[LeaseID]*keepAlive),
- remote: remote,
- firstKeepAliveTimeout: keepAliveTimeout,
- lg: c.lg,
- }
- if l.firstKeepAliveTimeout == time.Second {
- l.firstKeepAliveTimeout = defaultTTL
- }
- if c != nil {
- l.callOpts = c.callOpts
- }
- reqLeaderCtx := WithRequireLeader(context.Background())
- l.stopCtx, l.stopCancel = context.WithCancel(reqLeaderCtx)
- return l
-}
-
-func (l *lessor) Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error) {
- r := &pb.LeaseGrantRequest{TTL: ttl}
- resp, err := l.remote.LeaseGrant(ctx, r, l.callOpts...)
- if err == nil {
- gresp := &LeaseGrantResponse{
- ResponseHeader: resp.GetHeader(),
- ID: LeaseID(resp.ID),
- TTL: resp.TTL,
- Error: resp.Error,
- }
- return gresp, nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (l *lessor) Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error) {
- r := &pb.LeaseRevokeRequest{ID: int64(id)}
- resp, err := l.remote.LeaseRevoke(ctx, r, l.callOpts...)
- if err == nil {
- return (*LeaseRevokeResponse)(resp), nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (l *lessor) TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error) {
- r := toLeaseTimeToLiveRequest(id, opts...)
- resp, err := l.remote.LeaseTimeToLive(ctx, r, l.callOpts...)
- if err == nil {
- gresp := &LeaseTimeToLiveResponse{
- ResponseHeader: resp.GetHeader(),
- ID: LeaseID(resp.ID),
- TTL: resp.TTL,
- GrantedTTL: resp.GrantedTTL,
- Keys: resp.Keys,
- }
- return gresp, nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (l *lessor) Leases(ctx context.Context) (*LeaseLeasesResponse, error) {
- resp, err := l.remote.LeaseLeases(ctx, &pb.LeaseLeasesRequest{}, l.callOpts...)
- if err == nil {
- leases := make([]LeaseStatus, len(resp.Leases))
- for i := range resp.Leases {
- leases[i] = LeaseStatus{ID: LeaseID(resp.Leases[i].ID)}
- }
- return &LeaseLeasesResponse{ResponseHeader: resp.GetHeader(), Leases: leases}, nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (l *lessor) KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) {
- ch := make(chan *LeaseKeepAliveResponse, LeaseResponseChSize)
-
- l.mu.Lock()
- // ensure that recvKeepAliveLoop is still running
- select {
- case <-l.donec:
- err := l.loopErr
- l.mu.Unlock()
- close(ch)
- return ch, ErrKeepAliveHalted{Reason: err}
- default:
- }
- ka, ok := l.keepAlives[id]
- if !ok {
- // create fresh keep alive
- ka = &keepAlive{
- chs: []chan<- *LeaseKeepAliveResponse{ch},
- ctxs: []context.Context{ctx},
- deadline: time.Now().Add(l.firstKeepAliveTimeout),
- nextKeepAlive: time.Now(),
- donec: make(chan struct{}),
- }
- l.keepAlives[id] = ka
- } else {
- // add channel and context to existing keep alive
- ka.ctxs = append(ka.ctxs, ctx)
- ka.chs = append(ka.chs, ch)
- }
- l.mu.Unlock()
-
- go l.keepAliveCtxCloser(ctx, id, ka.donec)
- l.firstKeepAliveOnce.Do(func() {
- go l.recvKeepAliveLoop()
- go l.deadlineLoop()
- })
-
- return ch, nil
-}
-
-func (l *lessor) KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) {
- for {
- resp, err := l.keepAliveOnce(ctx, id)
- if err == nil {
- if resp.TTL <= 0 {
- err = rpctypes.ErrLeaseNotFound
- }
- return resp, err
- }
- if isHaltErr(ctx, err) {
- return nil, toErr(ctx, err)
- }
- }
-}
-
-func (l *lessor) Close() error {
- l.stopCancel()
- // close for synchronous teardown if stream goroutines never launched
- l.firstKeepAliveOnce.Do(func() { close(l.donec) })
- <-l.donec
- return nil
-}
-
-func (l *lessor) keepAliveCtxCloser(ctx context.Context, id LeaseID, donec <-chan struct{}) {
- select {
- case <-donec:
- return
- case <-l.donec:
- return
- case <-ctx.Done():
- }
-
- l.mu.Lock()
- defer l.mu.Unlock()
-
- ka, ok := l.keepAlives[id]
- if !ok {
- return
- }
-
- // close channel and remove context if still associated with keep alive
- for i, c := range ka.ctxs {
- if c == ctx {
- close(ka.chs[i])
- ka.ctxs = append(ka.ctxs[:i], ka.ctxs[i+1:]...)
- ka.chs = append(ka.chs[:i], ka.chs[i+1:]...)
- break
- }
- }
- // remove if no one more listeners
- if len(ka.chs) == 0 {
- delete(l.keepAlives, id)
- }
-}
-
-// closeRequireLeader scans keepAlives for ctxs that have require leader
-// and closes the associated channels.
-func (l *lessor) closeRequireLeader() {
- l.mu.Lock()
- defer l.mu.Unlock()
- for _, ka := range l.keepAlives {
- reqIdxs := 0
- // find all required leader channels, close, mark as nil
- for i, ctx := range ka.ctxs {
- md, ok := metadata.FromOutgoingContext(ctx)
- if !ok {
- continue
- }
- ks := md[rpctypes.MetadataRequireLeaderKey]
- if len(ks) < 1 || ks[0] != rpctypes.MetadataHasLeader {
- continue
- }
- close(ka.chs[i])
- ka.chs[i] = nil
- reqIdxs++
- }
- if reqIdxs == 0 {
- continue
- }
- // remove all channels that required a leader from keepalive
- newChs := make([]chan<- *LeaseKeepAliveResponse, len(ka.chs)-reqIdxs)
- newCtxs := make([]context.Context, len(newChs))
- newIdx := 0
- for i := range ka.chs {
- if ka.chs[i] == nil {
- continue
- }
- newChs[newIdx], newCtxs[newIdx] = ka.chs[i], ka.ctxs[newIdx]
- newIdx++
- }
- ka.chs, ka.ctxs = newChs, newCtxs
- }
-}
-
-func (l *lessor) keepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) {
- cctx, cancel := context.WithCancel(ctx)
- defer cancel()
-
- stream, err := l.remote.LeaseKeepAlive(cctx, l.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
-
- err = stream.Send(&pb.LeaseKeepAliveRequest{ID: int64(id)})
- if err != nil {
- return nil, toErr(ctx, err)
- }
-
- resp, rerr := stream.Recv()
- if rerr != nil {
- return nil, toErr(ctx, rerr)
- }
-
- karesp := &LeaseKeepAliveResponse{
- ResponseHeader: resp.GetHeader(),
- ID: LeaseID(resp.ID),
- TTL: resp.TTL,
- }
- return karesp, nil
-}
-
-func (l *lessor) recvKeepAliveLoop() (gerr error) {
- defer func() {
- l.mu.Lock()
- close(l.donec)
- l.loopErr = gerr
- for _, ka := range l.keepAlives {
- ka.close()
- }
- l.keepAlives = make(map[LeaseID]*keepAlive)
- l.mu.Unlock()
- }()
-
- for {
- stream, err := l.resetRecv()
- if err != nil {
- if canceledByCaller(l.stopCtx, err) {
- return err
- }
- } else {
- for {
- resp, err := stream.Recv()
- if err != nil {
- if canceledByCaller(l.stopCtx, err) {
- return err
- }
-
- if toErr(l.stopCtx, err) == rpctypes.ErrNoLeader {
- l.closeRequireLeader()
- }
- break
- }
-
- l.recvKeepAlive(resp)
- }
- }
-
- select {
- case <-time.After(retryConnWait):
- case <-l.stopCtx.Done():
- return l.stopCtx.Err()
- }
- }
-}
-
-// resetRecv opens a new lease stream and starts sending keep alive requests.
-func (l *lessor) resetRecv() (pb.Lease_LeaseKeepAliveClient, error) {
- sctx, cancel := context.WithCancel(l.stopCtx)
- stream, err := l.remote.LeaseKeepAlive(sctx, append(l.callOpts, withMax(0))...)
- if err != nil {
- cancel()
- return nil, err
- }
-
- l.mu.Lock()
- defer l.mu.Unlock()
- if l.stream != nil && l.streamCancel != nil {
- l.streamCancel()
- }
-
- l.streamCancel = cancel
- l.stream = stream
-
- go l.sendKeepAliveLoop(stream)
- return stream, nil
-}
-
-// recvKeepAlive updates a lease based on its LeaseKeepAliveResponse
-func (l *lessor) recvKeepAlive(resp *pb.LeaseKeepAliveResponse) {
- karesp := &LeaseKeepAliveResponse{
- ResponseHeader: resp.GetHeader(),
- ID: LeaseID(resp.ID),
- TTL: resp.TTL,
- }
-
- l.mu.Lock()
- defer l.mu.Unlock()
-
- ka, ok := l.keepAlives[karesp.ID]
- if !ok {
- return
- }
-
- if karesp.TTL <= 0 {
- // lease expired; close all keep alive channels
- delete(l.keepAlives, karesp.ID)
- ka.close()
- return
- }
-
- // send update to all channels
- nextKeepAlive := time.Now().Add((time.Duration(karesp.TTL) * time.Second) / 3.0)
- ka.deadline = time.Now().Add(time.Duration(karesp.TTL) * time.Second)
- for _, ch := range ka.chs {
- select {
- case ch <- karesp:
- default:
- if l.lg != nil {
- l.lg.Warn("lease keepalive response queue is full; dropping response send",
- zap.Int("queue-size", len(ch)),
- zap.Int("queue-capacity", cap(ch)),
- )
- }
- }
- // still advance in order to rate-limit keep-alive sends
- ka.nextKeepAlive = nextKeepAlive
- }
-}
-
-// deadlineLoop reaps any keep alive channels that have not received a response
-// within the lease TTL
-func (l *lessor) deadlineLoop() {
- for {
- select {
- case <-time.After(time.Second):
- case <-l.donec:
- return
- }
- now := time.Now()
- l.mu.Lock()
- for id, ka := range l.keepAlives {
- if ka.deadline.Before(now) {
- // waited too long for response; lease may be expired
- ka.close()
- delete(l.keepAlives, id)
- }
- }
- l.mu.Unlock()
- }
-}
-
-// sendKeepAliveLoop sends keep alive requests for the lifetime of the given stream.
-func (l *lessor) sendKeepAliveLoop(stream pb.Lease_LeaseKeepAliveClient) {
- for {
- var tosend []LeaseID
-
- now := time.Now()
- l.mu.Lock()
- for id, ka := range l.keepAlives {
- if ka.nextKeepAlive.Before(now) {
- tosend = append(tosend, id)
- }
- }
- l.mu.Unlock()
-
- for _, id := range tosend {
- r := &pb.LeaseKeepAliveRequest{ID: int64(id)}
- if err := stream.Send(r); err != nil {
- // TODO do something with this error?
- return
- }
- }
-
- select {
- case <-time.After(retryConnWait):
- case <-stream.Context().Done():
- return
- case <-l.donec:
- return
- case <-l.stopCtx.Done():
- return
- }
- }
-}
-
-func (ka *keepAlive) close() {
- close(ka.donec)
- for _, ch := range ka.chs {
- close(ch)
- }
-}
diff --git a/etcd-fix/client/v3/leasing/cache.go b/etcd-fix/client/v3/leasing/cache.go
deleted file mode 100644
index 214ee2f..0000000
--- a/etcd-fix/client/v3/leasing/cache.go
+++ /dev/null
@@ -1,306 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package leasing
-
-import (
- "context"
- "strings"
- "sync"
- "time"
-
- v3pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-const revokeBackoff = 2 * time.Second
-
-type leaseCache struct {
- mu sync.RWMutex
- entries map[string]*leaseKey
- revokes map[string]time.Time
- header *v3pb.ResponseHeader
-}
-
-type leaseKey struct {
- response *v3.GetResponse
- // rev is the leasing key revision.
- rev int64
- waitc chan struct{}
-}
-
-func (lc *leaseCache) Rev(key string) int64 {
- lc.mu.RLock()
- defer lc.mu.RUnlock()
- if li := lc.entries[key]; li != nil {
- return li.rev
- }
- return 0
-}
-
-func (lc *leaseCache) Lock(key string) (chan<- struct{}, int64) {
- lc.mu.Lock()
- defer lc.mu.Unlock()
- if li := lc.entries[key]; li != nil {
- li.waitc = make(chan struct{})
- return li.waitc, li.rev
- }
- return nil, 0
-}
-
-func (lc *leaseCache) LockRange(begin, end string) (ret []chan<- struct{}) {
- lc.mu.Lock()
- defer lc.mu.Unlock()
- for k, li := range lc.entries {
- if inRange(k, begin, end) {
- li.waitc = make(chan struct{})
- ret = append(ret, li.waitc)
- }
- }
- return ret
-}
-
-func inRange(k, begin, end string) bool {
- if strings.Compare(k, begin) < 0 {
- return false
- }
- if end != "\x00" && strings.Compare(k, end) >= 0 {
- return false
- }
- return true
-}
-
-func (lc *leaseCache) LockWriteOps(ops []v3.Op) (ret []chan<- struct{}) {
- for _, op := range ops {
- if op.IsGet() {
- continue
- }
- key := string(op.KeyBytes())
- if end := string(op.RangeBytes()); end == "" {
- if wc, _ := lc.Lock(key); wc != nil {
- ret = append(ret, wc)
- }
- } else {
- for k := range lc.entries {
- if !inRange(k, key, end) {
- continue
- }
- if wc, _ := lc.Lock(k); wc != nil {
- ret = append(ret, wc)
- }
- }
- }
- }
- return ret
-}
-
-func (lc *leaseCache) NotifyOps(ops []v3.Op) (wcs []<-chan struct{}) {
- for _, op := range ops {
- if op.IsGet() {
- if _, wc := lc.notify(string(op.KeyBytes())); wc != nil {
- wcs = append(wcs, wc)
- }
- }
- }
- return wcs
-}
-
-func (lc *leaseCache) MayAcquire(key string) bool {
- lc.mu.RLock()
- lr, ok := lc.revokes[key]
- lc.mu.RUnlock()
- return !ok || time.Since(lr) > revokeBackoff
-}
-
-func (lc *leaseCache) Add(key string, resp *v3.GetResponse, op v3.Op) *v3.GetResponse {
- lk := &leaseKey{resp, resp.Header.Revision, closedCh}
- lc.mu.Lock()
- if lc.header == nil || lc.header.Revision < resp.Header.Revision {
- lc.header = resp.Header
- }
- lc.entries[key] = lk
- ret := lk.get(op)
- lc.mu.Unlock()
- return ret
-}
-
-func (lc *leaseCache) Update(key, val []byte, respHeader *v3pb.ResponseHeader) {
- li := lc.entries[string(key)]
- if li == nil {
- return
- }
- cacheResp := li.response
- if len(cacheResp.Kvs) == 0 {
- kv := &mvccpb.KeyValue{
- Key: key,
- CreateRevision: respHeader.Revision,
- }
- cacheResp.Kvs = append(cacheResp.Kvs, kv)
- cacheResp.Count = 1
- }
- cacheResp.Kvs[0].Version++
- if cacheResp.Kvs[0].ModRevision < respHeader.Revision {
- cacheResp.Header = respHeader
- cacheResp.Kvs[0].ModRevision = respHeader.Revision
- cacheResp.Kvs[0].Value = val
- }
-}
-
-func (lc *leaseCache) Delete(key string, hdr *v3pb.ResponseHeader) {
- lc.mu.Lock()
- defer lc.mu.Unlock()
- lc.delete(key, hdr)
-}
-
-func (lc *leaseCache) delete(key string, hdr *v3pb.ResponseHeader) {
- if li := lc.entries[key]; li != nil && hdr.Revision >= li.response.Header.Revision {
- li.response.Kvs = nil
- li.response.Header = copyHeader(hdr)
- }
-}
-
-func (lc *leaseCache) Evict(key string) (rev int64) {
- lc.mu.Lock()
- defer lc.mu.Unlock()
- if li := lc.entries[key]; li != nil {
- rev = li.rev
- delete(lc.entries, key)
- lc.revokes[key] = time.Now()
- }
- return rev
-}
-
-func (lc *leaseCache) EvictRange(key, end string) {
- lc.mu.Lock()
- defer lc.mu.Unlock()
- for k := range lc.entries {
- if inRange(k, key, end) {
- delete(lc.entries, key)
- lc.revokes[key] = time.Now()
- }
- }
-}
-
-func isBadOp(op v3.Op) bool { return op.Rev() > 0 || len(op.RangeBytes()) > 0 }
-
-func (lc *leaseCache) Get(ctx context.Context, op v3.Op) (*v3.GetResponse, bool) {
- if isBadOp(op) {
- return nil, false
- }
- key := string(op.KeyBytes())
- li, wc := lc.notify(key)
- if li == nil {
- return nil, true
- }
- select {
- case <-wc:
- case <-ctx.Done():
- return nil, true
- }
- lc.mu.RLock()
- lk := *li
- ret := lk.get(op)
- lc.mu.RUnlock()
- return ret, true
-}
-
-func (lk *leaseKey) get(op v3.Op) *v3.GetResponse {
- ret := *lk.response
- ret.Header = copyHeader(ret.Header)
- empty := len(ret.Kvs) == 0 || op.IsCountOnly()
- empty = empty || (op.MinModRev() > ret.Kvs[0].ModRevision)
- empty = empty || (op.MaxModRev() != 0 && op.MaxModRev() < ret.Kvs[0].ModRevision)
- empty = empty || (op.MinCreateRev() > ret.Kvs[0].CreateRevision)
- empty = empty || (op.MaxCreateRev() != 0 && op.MaxCreateRev() < ret.Kvs[0].CreateRevision)
- if empty {
- ret.Kvs = nil
- } else {
- kv := *ret.Kvs[0]
- kv.Key = make([]byte, len(kv.Key))
- copy(kv.Key, ret.Kvs[0].Key)
- if !op.IsKeysOnly() {
- kv.Value = make([]byte, len(kv.Value))
- copy(kv.Value, ret.Kvs[0].Value)
- }
- ret.Kvs = []*mvccpb.KeyValue{&kv}
- }
- return &ret
-}
-
-func (lc *leaseCache) notify(key string) (*leaseKey, <-chan struct{}) {
- lc.mu.RLock()
- defer lc.mu.RUnlock()
- if li := lc.entries[key]; li != nil {
- return li, li.waitc
- }
- return nil, nil
-}
-
-func (lc *leaseCache) clearOldRevokes(ctx context.Context) {
- for {
- select {
- case <-ctx.Done():
- return
- case <-time.After(time.Second):
- lc.mu.Lock()
- for k, lr := range lc.revokes {
- if time.Since(lr.Add(revokeBackoff)) > 0 {
- delete(lc.revokes, k)
- }
- }
- lc.mu.Unlock()
- }
- }
-}
-
-func (lc *leaseCache) evalCmp(cmps []v3.Cmp) (cmpVal bool, ok bool) {
- for _, cmp := range cmps {
- if len(cmp.RangeEnd) > 0 {
- return false, false
- }
- lk := lc.entries[string(cmp.Key)]
- if lk == nil {
- return false, false
- }
- if !evalCmp(lk.response, cmp) {
- return false, true
- }
- }
- return true, true
-}
-
-func (lc *leaseCache) evalOps(ops []v3.Op) ([]*v3pb.ResponseOp, bool) {
- resps := make([]*v3pb.ResponseOp, len(ops))
- for i, op := range ops {
- if !op.IsGet() || isBadOp(op) {
- // TODO: support read-only Txn
- return nil, false
- }
- lk := lc.entries[string(op.KeyBytes())]
- if lk == nil {
- return nil, false
- }
- resp := lk.get(op)
- if resp == nil {
- return nil, false
- }
- resps[i] = &v3pb.ResponseOp{
- Response: &v3pb.ResponseOp_ResponseRange{
- ResponseRange: (*v3pb.RangeResponse)(resp),
- },
- }
- }
- return resps, true
-}
diff --git a/etcd-fix/client/v3/leasing/doc.go b/etcd-fix/client/v3/leasing/doc.go
deleted file mode 100644
index fc97fc8..0000000
--- a/etcd-fix/client/v3/leasing/doc.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package leasing serves linearizable reads from a local cache by acquiring
-// exclusive write access to keys through a client-side leasing protocol. This
-// leasing layer can either directly wrap the etcd client or it can be exposed
-// through the etcd grpc proxy server, granting multiple clients write access.
-//
-// First, create a leasing KV from a clientv3.Client 'cli':
-//
-// lkv, err := leasing.NewKV(cli, "leasing-prefix")
-// if err != nil {
-// // handle error
-// }
-//
-// A range request for a key "abc" tries to acquire a leasing key so it can cache the range's
-// key locally. On the server, the leasing key is stored to "leasing-prefix/abc":
-//
-// resp, err := lkv.Get(context.TODO(), "abc")
-//
-// Future linearized read requests using 'lkv' will be served locally for the lease's lifetime:
-//
-// resp, err = lkv.Get(context.TODO(), "abc")
-//
-// If another leasing client writes to a leased key, then the owner relinquishes its exclusive
-// access, permitting the writer to modify the key:
-//
-// lkv2, err := leasing.NewKV(cli, "leasing-prefix")
-// if err != nil {
-// // handle error
-// }
-// lkv2.Put(context.TODO(), "abc", "456")
-// resp, err = lkv.Get("abc")
-//
-package leasing
diff --git a/etcd-fix/client/v3/leasing/kv.go b/etcd-fix/client/v3/leasing/kv.go
deleted file mode 100644
index f0cded2..0000000
--- a/etcd-fix/client/v3/leasing/kv.go
+++ /dev/null
@@ -1,479 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package leasing
-
-import (
- "context"
- "strings"
- "sync"
- "time"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/mvccpb"
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- v3 "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/client/v3/concurrency"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
-)
-
-type leasingKV struct {
- cl *v3.Client
- kv v3.KV
- pfx string
- leases leaseCache
-
- ctx context.Context
- cancel context.CancelFunc
- wg sync.WaitGroup
-
- sessionOpts []concurrency.SessionOption
- session *concurrency.Session
- sessionc chan struct{}
-}
-
-var closedCh chan struct{}
-
-func init() {
- closedCh = make(chan struct{})
- close(closedCh)
-}
-
-// NewKV wraps a KV instance so that all requests are wired through a leasing protocol.
-func NewKV(cl *v3.Client, pfx string, opts ...concurrency.SessionOption) (v3.KV, func(), error) {
- cctx, cancel := context.WithCancel(cl.Ctx())
- lkv := &leasingKV{
- cl: cl,
- kv: cl.KV,
- pfx: pfx,
- leases: leaseCache{revokes: make(map[string]time.Time)},
- ctx: cctx,
- cancel: cancel,
- sessionOpts: opts,
- sessionc: make(chan struct{}),
- }
- lkv.wg.Add(2)
- go func() {
- defer lkv.wg.Done()
- lkv.monitorSession()
- }()
- go func() {
- defer lkv.wg.Done()
- lkv.leases.clearOldRevokes(cctx)
- }()
- return lkv, lkv.Close, lkv.waitSession(cctx)
-}
-
-func (lkv *leasingKV) Close() {
- lkv.cancel()
- lkv.wg.Wait()
-}
-
-func (lkv *leasingKV) Get(ctx context.Context, key string, opts ...v3.OpOption) (*v3.GetResponse, error) {
- return lkv.get(ctx, v3.OpGet(key, opts...))
-}
-
-func (lkv *leasingKV) Put(ctx context.Context, key, val string, opts ...v3.OpOption) (*v3.PutResponse, error) {
- return lkv.put(ctx, v3.OpPut(key, val, opts...))
-}
-
-func (lkv *leasingKV) Delete(ctx context.Context, key string, opts ...v3.OpOption) (*v3.DeleteResponse, error) {
- return lkv.delete(ctx, v3.OpDelete(key, opts...))
-}
-
-func (lkv *leasingKV) Do(ctx context.Context, op v3.Op) (v3.OpResponse, error) {
- switch {
- case op.IsGet():
- resp, err := lkv.get(ctx, op)
- return resp.OpResponse(), err
- case op.IsPut():
- resp, err := lkv.put(ctx, op)
- return resp.OpResponse(), err
- case op.IsDelete():
- resp, err := lkv.delete(ctx, op)
- return resp.OpResponse(), err
- case op.IsTxn():
- cmps, thenOps, elseOps := op.Txn()
- resp, err := lkv.Txn(ctx).If(cmps...).Then(thenOps...).Else(elseOps...).Commit()
- return resp.OpResponse(), err
- }
- return v3.OpResponse{}, nil
-}
-
-func (lkv *leasingKV) Compact(ctx context.Context, rev int64, opts ...v3.CompactOption) (*v3.CompactResponse, error) {
- return lkv.kv.Compact(ctx, rev, opts...)
-}
-
-func (lkv *leasingKV) Txn(ctx context.Context) v3.Txn {
- return &txnLeasing{Txn: lkv.kv.Txn(ctx), lkv: lkv, ctx: ctx}
-}
-
-func (lkv *leasingKV) monitorSession() {
- for lkv.ctx.Err() == nil {
- if lkv.session != nil {
- select {
- case <-lkv.session.Done():
- case <-lkv.ctx.Done():
- return
- }
- }
- lkv.leases.mu.Lock()
- select {
- case <-lkv.sessionc:
- lkv.sessionc = make(chan struct{})
- default:
- }
- lkv.leases.entries = make(map[string]*leaseKey)
- lkv.leases.mu.Unlock()
-
- s, err := concurrency.NewSession(lkv.cl, lkv.sessionOpts...)
- if err != nil {
- continue
- }
-
- lkv.leases.mu.Lock()
- lkv.session = s
- close(lkv.sessionc)
- lkv.leases.mu.Unlock()
- }
-}
-
-func (lkv *leasingKV) monitorLease(ctx context.Context, key string, rev int64) {
- cctx, cancel := context.WithCancel(lkv.ctx)
- defer cancel()
- for cctx.Err() == nil {
- if rev == 0 {
- resp, err := lkv.kv.Get(ctx, lkv.pfx+key)
- if err != nil {
- continue
- }
- rev = resp.Header.Revision
- if len(resp.Kvs) == 0 || string(resp.Kvs[0].Value) == "REVOKE" {
- lkv.rescind(cctx, key, rev)
- return
- }
- }
- wch := lkv.cl.Watch(cctx, lkv.pfx+key, v3.WithRev(rev+1))
- for resp := range wch {
- for _, ev := range resp.Events {
- if string(ev.Kv.Value) != "REVOKE" {
- continue
- }
- if v3.LeaseID(ev.Kv.Lease) == lkv.leaseID() {
- lkv.rescind(cctx, key, ev.Kv.ModRevision)
- }
- return
- }
- }
- rev = 0
- }
-}
-
-// rescind releases a lease from this client.
-func (lkv *leasingKV) rescind(ctx context.Context, key string, rev int64) {
- if lkv.leases.Evict(key) > rev {
- return
- }
- cmp := v3.Compare(v3.CreateRevision(lkv.pfx+key), "<", rev)
- op := v3.OpDelete(lkv.pfx + key)
- for ctx.Err() == nil {
- if _, err := lkv.kv.Txn(ctx).If(cmp).Then(op).Commit(); err == nil {
- return
- }
- }
-}
-
-func (lkv *leasingKV) waitRescind(ctx context.Context, key string, rev int64) error {
- cctx, cancel := context.WithCancel(ctx)
- defer cancel()
- wch := lkv.cl.Watch(cctx, lkv.pfx+key, v3.WithRev(rev+1))
- for resp := range wch {
- for _, ev := range resp.Events {
- if ev.Type == v3.EventTypeDelete {
- return ctx.Err()
- }
- }
- }
- return ctx.Err()
-}
-
-func (lkv *leasingKV) tryModifyOp(ctx context.Context, op v3.Op) (*v3.TxnResponse, chan<- struct{}, error) {
- key := string(op.KeyBytes())
- wc, rev := lkv.leases.Lock(key)
- cmp := v3.Compare(v3.CreateRevision(lkv.pfx+key), "<", rev+1)
- resp, err := lkv.kv.Txn(ctx).If(cmp).Then(op).Commit()
- switch {
- case err != nil:
- lkv.leases.Evict(key)
- fallthrough
- case !resp.Succeeded:
- if wc != nil {
- close(wc)
- }
- return nil, nil, err
- }
- return resp, wc, nil
-}
-
-func (lkv *leasingKV) put(ctx context.Context, op v3.Op) (pr *v3.PutResponse, err error) {
- if err := lkv.waitSession(ctx); err != nil {
- return nil, err
- }
- for ctx.Err() == nil {
- resp, wc, err := lkv.tryModifyOp(ctx, op)
- if err != nil || wc == nil {
- resp, err = lkv.revoke(ctx, string(op.KeyBytes()), op)
- }
- if err != nil {
- return nil, err
- }
- if resp.Succeeded {
- lkv.leases.mu.Lock()
- lkv.leases.Update(op.KeyBytes(), op.ValueBytes(), resp.Header)
- lkv.leases.mu.Unlock()
- pr = (*v3.PutResponse)(resp.Responses[0].GetResponsePut())
- pr.Header = resp.Header
- }
- if wc != nil {
- close(wc)
- }
- if resp.Succeeded {
- return pr, nil
- }
- }
- return nil, ctx.Err()
-}
-
-func (lkv *leasingKV) acquire(ctx context.Context, key string, op v3.Op) (*v3.TxnResponse, error) {
- for ctx.Err() == nil {
- if err := lkv.waitSession(ctx); err != nil {
- return nil, err
- }
- lcmp := v3.Cmp{Key: []byte(key), Target: pb.Compare_LEASE}
- resp, err := lkv.kv.Txn(ctx).If(
- v3.Compare(v3.CreateRevision(lkv.pfx+key), "=", 0),
- v3.Compare(lcmp, "=", 0)).
- Then(
- op,
- v3.OpPut(lkv.pfx+key, "", v3.WithLease(lkv.leaseID()))).
- Else(
- op,
- v3.OpGet(lkv.pfx+key),
- ).Commit()
- if err == nil {
- if !resp.Succeeded {
- kvs := resp.Responses[1].GetResponseRange().Kvs
- // if txn failed since already owner, lease is acquired
- resp.Succeeded = len(kvs) > 0 && v3.LeaseID(kvs[0].Lease) == lkv.leaseID()
- }
- return resp, nil
- }
- // retry if transient error
- if _, ok := err.(rpctypes.EtcdError); ok {
- return nil, err
- }
- if ev, ok := status.FromError(err); ok && ev.Code() != codes.Unavailable {
- return nil, err
- }
- }
- return nil, ctx.Err()
-}
-
-func (lkv *leasingKV) get(ctx context.Context, op v3.Op) (*v3.GetResponse, error) {
- do := func() (*v3.GetResponse, error) {
- r, err := lkv.kv.Do(ctx, op)
- return r.Get(), err
- }
- if !lkv.readySession() {
- return do()
- }
-
- if resp, ok := lkv.leases.Get(ctx, op); resp != nil {
- return resp, nil
- } else if !ok || op.IsSerializable() {
- // must be handled by server or can skip linearization
- return do()
- }
-
- key := string(op.KeyBytes())
- if !lkv.leases.MayAcquire(key) {
- resp, err := lkv.kv.Do(ctx, op)
- return resp.Get(), err
- }
-
- resp, err := lkv.acquire(ctx, key, v3.OpGet(key))
- if err != nil {
- return nil, err
- }
- getResp := (*v3.GetResponse)(resp.Responses[0].GetResponseRange())
- getResp.Header = resp.Header
- if resp.Succeeded {
- getResp = lkv.leases.Add(key, getResp, op)
- lkv.wg.Add(1)
- go func() {
- defer lkv.wg.Done()
- lkv.monitorLease(ctx, key, resp.Header.Revision)
- }()
- }
- return getResp, nil
-}
-
-func (lkv *leasingKV) deleteRangeRPC(ctx context.Context, maxLeaseRev int64, key, end string) (*v3.DeleteResponse, error) {
- lkey, lend := lkv.pfx+key, lkv.pfx+end
- resp, err := lkv.kv.Txn(ctx).If(
- v3.Compare(v3.CreateRevision(lkey).WithRange(lend), "<", maxLeaseRev+1),
- ).Then(
- v3.OpGet(key, v3.WithRange(end), v3.WithKeysOnly()),
- v3.OpDelete(key, v3.WithRange(end)),
- ).Commit()
- if err != nil {
- lkv.leases.EvictRange(key, end)
- return nil, err
- }
- if !resp.Succeeded {
- return nil, nil
- }
- for _, kv := range resp.Responses[0].GetResponseRange().Kvs {
- lkv.leases.Delete(string(kv.Key), resp.Header)
- }
- delResp := (*v3.DeleteResponse)(resp.Responses[1].GetResponseDeleteRange())
- delResp.Header = resp.Header
- return delResp, nil
-}
-
-func (lkv *leasingKV) deleteRange(ctx context.Context, op v3.Op) (*v3.DeleteResponse, error) {
- key, end := string(op.KeyBytes()), string(op.RangeBytes())
- for ctx.Err() == nil {
- maxLeaseRev, err := lkv.revokeRange(ctx, key, end)
- if err != nil {
- return nil, err
- }
- wcs := lkv.leases.LockRange(key, end)
- delResp, err := lkv.deleteRangeRPC(ctx, maxLeaseRev, key, end)
- closeAll(wcs)
- if err != nil || delResp != nil {
- return delResp, err
- }
- }
- return nil, ctx.Err()
-}
-
-func (lkv *leasingKV) delete(ctx context.Context, op v3.Op) (dr *v3.DeleteResponse, err error) {
- if err := lkv.waitSession(ctx); err != nil {
- return nil, err
- }
- if len(op.RangeBytes()) > 0 {
- return lkv.deleteRange(ctx, op)
- }
- key := string(op.KeyBytes())
- for ctx.Err() == nil {
- resp, wc, err := lkv.tryModifyOp(ctx, op)
- if err != nil || wc == nil {
- resp, err = lkv.revoke(ctx, key, op)
- }
- if err != nil {
- // don't know if delete was processed
- lkv.leases.Evict(key)
- return nil, err
- }
- if resp.Succeeded {
- dr = (*v3.DeleteResponse)(resp.Responses[0].GetResponseDeleteRange())
- dr.Header = resp.Header
- lkv.leases.Delete(key, dr.Header)
- }
- if wc != nil {
- close(wc)
- }
- if resp.Succeeded {
- return dr, nil
- }
- }
- return nil, ctx.Err()
-}
-
-func (lkv *leasingKV) revoke(ctx context.Context, key string, op v3.Op) (*v3.TxnResponse, error) {
- rev := lkv.leases.Rev(key)
- txn := lkv.kv.Txn(ctx).If(v3.Compare(v3.CreateRevision(lkv.pfx+key), "<", rev+1)).Then(op)
- resp, err := txn.Else(v3.OpPut(lkv.pfx+key, "REVOKE", v3.WithIgnoreLease())).Commit()
- if err != nil || resp.Succeeded {
- return resp, err
- }
- return resp, lkv.waitRescind(ctx, key, resp.Header.Revision)
-}
-
-func (lkv *leasingKV) revokeRange(ctx context.Context, begin, end string) (int64, error) {
- lkey, lend := lkv.pfx+begin, ""
- if len(end) > 0 {
- lend = lkv.pfx + end
- }
- leaseKeys, err := lkv.kv.Get(ctx, lkey, v3.WithRange(lend))
- if err != nil {
- return 0, err
- }
- return lkv.revokeLeaseKvs(ctx, leaseKeys.Kvs)
-}
-
-func (lkv *leasingKV) revokeLeaseKvs(ctx context.Context, kvs []*mvccpb.KeyValue) (int64, error) {
- maxLeaseRev := int64(0)
- for _, kv := range kvs {
- if rev := kv.CreateRevision; rev > maxLeaseRev {
- maxLeaseRev = rev
- }
- if v3.LeaseID(kv.Lease) == lkv.leaseID() {
- // don't revoke own keys
- continue
- }
- key := strings.TrimPrefix(string(kv.Key), lkv.pfx)
- if _, err := lkv.revoke(ctx, key, v3.OpGet(key)); err != nil {
- return 0, err
- }
- }
- return maxLeaseRev, nil
-}
-
-func (lkv *leasingKV) waitSession(ctx context.Context) error {
- lkv.leases.mu.RLock()
- sessionc := lkv.sessionc
- lkv.leases.mu.RUnlock()
- select {
- case <-sessionc:
- return nil
- case <-lkv.ctx.Done():
- return lkv.ctx.Err()
- case <-ctx.Done():
- return ctx.Err()
- }
-}
-
-func (lkv *leasingKV) readySession() bool {
- lkv.leases.mu.RLock()
- defer lkv.leases.mu.RUnlock()
- if lkv.session == nil {
- return false
- }
- select {
- case <-lkv.session.Done():
- default:
- return true
- }
- return false
-}
-
-func (lkv *leasingKV) leaseID() v3.LeaseID {
- lkv.leases.mu.RLock()
- defer lkv.leases.mu.RUnlock()
- return lkv.session.Lease()
-}
diff --git a/etcd-fix/client/v3/leasing/txn.go b/etcd-fix/client/v3/leasing/txn.go
deleted file mode 100644
index 30c6aa2..0000000
--- a/etcd-fix/client/v3/leasing/txn.go
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package leasing
-
-import (
- "context"
- "strings"
-
- v3pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-type txnLeasing struct {
- v3.Txn
- lkv *leasingKV
- ctx context.Context
- cs []v3.Cmp
- opst []v3.Op
- opse []v3.Op
-}
-
-func (txn *txnLeasing) If(cs ...v3.Cmp) v3.Txn {
- txn.cs = append(txn.cs, cs...)
- txn.Txn = txn.Txn.If(cs...)
- return txn
-}
-
-func (txn *txnLeasing) Then(ops ...v3.Op) v3.Txn {
- txn.opst = append(txn.opst, ops...)
- txn.Txn = txn.Txn.Then(ops...)
- return txn
-}
-
-func (txn *txnLeasing) Else(ops ...v3.Op) v3.Txn {
- txn.opse = append(txn.opse, ops...)
- txn.Txn = txn.Txn.Else(ops...)
- return txn
-}
-
-func (txn *txnLeasing) Commit() (*v3.TxnResponse, error) {
- if resp, err := txn.eval(); resp != nil || err != nil {
- return resp, err
- }
- return txn.serverTxn()
-}
-
-func (txn *txnLeasing) eval() (*v3.TxnResponse, error) {
- // TODO: wait on keys in comparisons
- thenOps, elseOps := gatherOps(txn.opst), gatherOps(txn.opse)
- ops := make([]v3.Op, 0, len(thenOps)+len(elseOps))
- ops = append(ops, thenOps...)
- ops = append(ops, elseOps...)
-
- for _, ch := range txn.lkv.leases.NotifyOps(ops) {
- select {
- case <-ch:
- case <-txn.ctx.Done():
- return nil, txn.ctx.Err()
- }
- }
-
- txn.lkv.leases.mu.RLock()
- defer txn.lkv.leases.mu.RUnlock()
- succeeded, ok := txn.lkv.leases.evalCmp(txn.cs)
- if !ok || txn.lkv.leases.header == nil {
- return nil, nil
- }
- if ops = txn.opst; !succeeded {
- ops = txn.opse
- }
-
- resps, ok := txn.lkv.leases.evalOps(ops)
- if !ok {
- return nil, nil
- }
- return &v3.TxnResponse{Header: copyHeader(txn.lkv.leases.header), Succeeded: succeeded, Responses: resps}, nil
-}
-
-// fallback computes the ops to fetch all possible conflicting
-// leasing keys for a list of ops.
-func (txn *txnLeasing) fallback(ops []v3.Op) (fbOps []v3.Op) {
- for _, op := range ops {
- if op.IsGet() {
- continue
- }
- lkey, lend := txn.lkv.pfx+string(op.KeyBytes()), ""
- if len(op.RangeBytes()) > 0 {
- lend = txn.lkv.pfx + string(op.RangeBytes())
- }
- fbOps = append(fbOps, v3.OpGet(lkey, v3.WithRange(lend)))
- }
- return fbOps
-}
-
-func (txn *txnLeasing) guardKeys(ops []v3.Op) (cmps []v3.Cmp) {
- seen := make(map[string]bool)
- for _, op := range ops {
- key := string(op.KeyBytes())
- if op.IsGet() || len(op.RangeBytes()) != 0 || seen[key] {
- continue
- }
- rev := txn.lkv.leases.Rev(key)
- cmps = append(cmps, v3.Compare(v3.CreateRevision(txn.lkv.pfx+key), "<", rev+1))
- seen[key] = true
- }
- return cmps
-}
-
-func (txn *txnLeasing) guardRanges(ops []v3.Op) (cmps []v3.Cmp, err error) {
- for _, op := range ops {
- if op.IsGet() || len(op.RangeBytes()) == 0 {
- continue
- }
-
- key, end := string(op.KeyBytes()), string(op.RangeBytes())
- maxRevLK, err := txn.lkv.revokeRange(txn.ctx, key, end)
- if err != nil {
- return nil, err
- }
-
- opts := append(v3.WithLastRev(), v3.WithRange(end))
- getResp, err := txn.lkv.kv.Get(txn.ctx, key, opts...)
- if err != nil {
- return nil, err
- }
- maxModRev := int64(0)
- if len(getResp.Kvs) > 0 {
- maxModRev = getResp.Kvs[0].ModRevision
- }
-
- noKeyUpdate := v3.Compare(v3.ModRevision(key).WithRange(end), "<", maxModRev+1)
- noLeaseUpdate := v3.Compare(
- v3.CreateRevision(txn.lkv.pfx+key).WithRange(txn.lkv.pfx+end),
- "<",
- maxRevLK+1)
- cmps = append(cmps, noKeyUpdate, noLeaseUpdate)
- }
- return cmps, nil
-}
-
-func (txn *txnLeasing) guard(ops []v3.Op) ([]v3.Cmp, error) {
- cmps := txn.guardKeys(ops)
- rangeCmps, err := txn.guardRanges(ops)
- return append(cmps, rangeCmps...), err
-}
-
-func (txn *txnLeasing) commitToCache(txnResp *v3pb.TxnResponse, userTxn v3.Op) {
- ops := gatherResponseOps(txnResp.Responses, []v3.Op{userTxn})
- txn.lkv.leases.mu.Lock()
- for _, op := range ops {
- key := string(op.KeyBytes())
- if op.IsDelete() && len(op.RangeBytes()) > 0 {
- end := string(op.RangeBytes())
- for k := range txn.lkv.leases.entries {
- if inRange(k, key, end) {
- txn.lkv.leases.delete(k, txnResp.Header)
- }
- }
- } else if op.IsDelete() {
- txn.lkv.leases.delete(key, txnResp.Header)
- }
- if op.IsPut() {
- txn.lkv.leases.Update(op.KeyBytes(), op.ValueBytes(), txnResp.Header)
- }
- }
- txn.lkv.leases.mu.Unlock()
-}
-
-func (txn *txnLeasing) revokeFallback(fbResps []*v3pb.ResponseOp) error {
- for _, resp := range fbResps {
- _, err := txn.lkv.revokeLeaseKvs(txn.ctx, resp.GetResponseRange().Kvs)
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-func (txn *txnLeasing) serverTxn() (*v3.TxnResponse, error) {
- if err := txn.lkv.waitSession(txn.ctx); err != nil {
- return nil, err
- }
-
- userOps := gatherOps(append(txn.opst, txn.opse...))
- userTxn := v3.OpTxn(txn.cs, txn.opst, txn.opse)
- fbOps := txn.fallback(userOps)
-
- defer closeAll(txn.lkv.leases.LockWriteOps(userOps))
- for {
- cmps, err := txn.guard(userOps)
- if err != nil {
- return nil, err
- }
- resp, err := txn.lkv.kv.Txn(txn.ctx).If(cmps...).Then(userTxn).Else(fbOps...).Commit()
- if err != nil {
- for _, cmp := range cmps {
- txn.lkv.leases.Evict(strings.TrimPrefix(string(cmp.Key), txn.lkv.pfx))
- }
- return nil, err
- }
- if resp.Succeeded {
- txn.commitToCache((*v3pb.TxnResponse)(resp), userTxn)
- userResp := resp.Responses[0].GetResponseTxn()
- userResp.Header = resp.Header
- return (*v3.TxnResponse)(userResp), nil
- }
- if err := txn.revokeFallback(resp.Responses); err != nil {
- return nil, err
- }
- }
-}
diff --git a/etcd-fix/client/v3/leasing/util.go b/etcd-fix/client/v3/leasing/util.go
deleted file mode 100644
index b6a520f..0000000
--- a/etcd-fix/client/v3/leasing/util.go
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package leasing
-
-import (
- "bytes"
-
- v3pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- v3 "go.etcd.io/etcd/client/v3"
-)
-
-func compareInt64(a, b int64) int {
- switch {
- case a < b:
- return -1
- case a > b:
- return 1
- default:
- return 0
- }
-}
-
-func evalCmp(resp *v3.GetResponse, tcmp v3.Cmp) bool {
- var result int
- if len(resp.Kvs) != 0 {
- kv := resp.Kvs[0]
- switch tcmp.Target {
- case v3pb.Compare_VALUE:
- if tv, _ := tcmp.TargetUnion.(*v3pb.Compare_Value); tv != nil {
- result = bytes.Compare(kv.Value, tv.Value)
- }
- case v3pb.Compare_CREATE:
- if tv, _ := tcmp.TargetUnion.(*v3pb.Compare_CreateRevision); tv != nil {
- result = compareInt64(kv.CreateRevision, tv.CreateRevision)
- }
- case v3pb.Compare_MOD:
- if tv, _ := tcmp.TargetUnion.(*v3pb.Compare_ModRevision); tv != nil {
- result = compareInt64(kv.ModRevision, tv.ModRevision)
- }
- case v3pb.Compare_VERSION:
- if tv, _ := tcmp.TargetUnion.(*v3pb.Compare_Version); tv != nil {
- result = compareInt64(kv.Version, tv.Version)
- }
- }
- }
- switch tcmp.Result {
- case v3pb.Compare_EQUAL:
- return result == 0
- case v3pb.Compare_NOT_EQUAL:
- return result != 0
- case v3pb.Compare_GREATER:
- return result > 0
- case v3pb.Compare_LESS:
- return result < 0
- }
- return true
-}
-
-func gatherOps(ops []v3.Op) (ret []v3.Op) {
- for _, op := range ops {
- if !op.IsTxn() {
- ret = append(ret, op)
- continue
- }
- _, thenOps, elseOps := op.Txn()
- ret = append(ret, gatherOps(append(thenOps, elseOps...))...)
- }
- return ret
-}
-
-func gatherResponseOps(resp []*v3pb.ResponseOp, ops []v3.Op) (ret []v3.Op) {
- for i, op := range ops {
- if !op.IsTxn() {
- ret = append(ret, op)
- continue
- }
- _, thenOps, elseOps := op.Txn()
- if txnResp := resp[i].GetResponseTxn(); txnResp.Succeeded {
- ret = append(ret, gatherResponseOps(txnResp.Responses, thenOps)...)
- } else {
- ret = append(ret, gatherResponseOps(txnResp.Responses, elseOps)...)
- }
- }
- return ret
-}
-
-func copyHeader(hdr *v3pb.ResponseHeader) *v3pb.ResponseHeader {
- h := *hdr
- return &h
-}
-
-func closeAll(chs []chan<- struct{}) {
- for _, ch := range chs {
- close(ch)
- }
-}
diff --git a/etcd-fix/client/v3/logger.go b/etcd-fix/client/v3/logger.go
deleted file mode 100644
index c906fed..0000000
--- a/etcd-fix/client/v3/logger.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "io/ioutil"
- "sync"
-
- "go.etcd.io/etcd/pkg/v3/logutil"
-
- "google.golang.org/grpc/grpclog"
-)
-
-var (
- lgMu sync.RWMutex
- lg logutil.Logger
-)
-
-type settableLogger struct {
- l grpclog.LoggerV2
- mu sync.RWMutex
-}
-
-func init() {
- // disable client side logs by default
- lg = &settableLogger{}
- SetLogger(grpclog.NewLoggerV2(ioutil.Discard, ioutil.Discard, ioutil.Discard))
-}
-
-// SetLogger sets client-side Logger.
-func SetLogger(l grpclog.LoggerV2) {
- lgMu.Lock()
- lg = logutil.NewLogger(l)
- // override grpclog so that any changes happen with locking
- grpclog.SetLoggerV2(lg)
- lgMu.Unlock()
-}
-
-// GetLogger returns the current logutil.Logger.
-func GetLogger() logutil.Logger {
- lgMu.RLock()
- l := lg
- lgMu.RUnlock()
- return l
-}
-
-// NewLogger returns a new Logger with logutil.Logger.
-func NewLogger(gl grpclog.LoggerV2) logutil.Logger {
- return &settableLogger{l: gl}
-}
-
-func (s *settableLogger) get() grpclog.LoggerV2 {
- s.mu.RLock()
- l := s.l
- s.mu.RUnlock()
- return l
-}
-
-// implement the grpclog.LoggerV2 interface
-
-func (s *settableLogger) Info(args ...interface{}) { s.get().Info(args...) }
-func (s *settableLogger) Infof(format string, args ...interface{}) { s.get().Infof(format, args...) }
-func (s *settableLogger) Infoln(args ...interface{}) { s.get().Infoln(args...) }
-func (s *settableLogger) Warning(args ...interface{}) { s.get().Warning(args...) }
-func (s *settableLogger) Warningf(format string, args ...interface{}) {
- s.get().Warningf(format, args...)
-}
-func (s *settableLogger) Warningln(args ...interface{}) { s.get().Warningln(args...) }
-func (s *settableLogger) Error(args ...interface{}) { s.get().Error(args...) }
-func (s *settableLogger) Errorf(format string, args ...interface{}) {
- s.get().Errorf(format, args...)
-}
-func (s *settableLogger) Errorln(args ...interface{}) { s.get().Errorln(args...) }
-func (s *settableLogger) Fatal(args ...interface{}) { s.get().Fatal(args...) }
-func (s *settableLogger) Fatalf(format string, args ...interface{}) { s.get().Fatalf(format, args...) }
-func (s *settableLogger) Fatalln(args ...interface{}) { s.get().Fatalln(args...) }
-func (s *settableLogger) Print(args ...interface{}) { s.get().Info(args...) }
-func (s *settableLogger) Printf(format string, args ...interface{}) { s.get().Infof(format, args...) }
-func (s *settableLogger) Println(args ...interface{}) { s.get().Infoln(args...) }
-func (s *settableLogger) V(l int) bool { return s.get().V(l) }
-func (s *settableLogger) Lvl(lvl int) grpclog.LoggerV2 {
- s.mu.RLock()
- l := s.l
- s.mu.RUnlock()
- if l.V(lvl) {
- return s
- }
- return logutil.NewDiscardLogger()
-}
diff --git a/etcd-fix/client/v3/main_test.go b/etcd-fix/client/v3/main_test.go
deleted file mode 100644
index a588e33..0000000
--- a/etcd-fix/client/v3/main_test.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3_test
-
-import (
- "testing"
- "time"
-
- "go.etcd.io/etcd/pkg/v3/testutil"
-)
-
-const (
- dialTimeout = 5 * time.Second
- requestTimeout = 10 * time.Second
-)
-
-func exampleEndpoints() []string { return nil }
-
-func forUnitTestsRunInMockedContext(mocking func(), example func()) {
- mocking()
- // TODO: Call 'example' when mocking() provides realistic mocking of transport.
-
- // The real testing logic of examples gets executed
- // as part of ./tests/integration/clientv3/integration/...
-}
-
-func TestMain(m *testing.M) {
- testutil.MustTestMainWithLeakDetection(m)
-}
diff --git a/etcd-fix/client/v3/maintenance.go b/etcd-fix/client/v3/maintenance.go
deleted file mode 100644
index dbea530..0000000
--- a/etcd-fix/client/v3/maintenance.go
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "fmt"
- "io"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.uber.org/zap"
- "google.golang.org/grpc"
-)
-
-type (
- DefragmentResponse pb.DefragmentResponse
- AlarmResponse pb.AlarmResponse
- AlarmMember pb.AlarmMember
- StatusResponse pb.StatusResponse
- HashKVResponse pb.HashKVResponse
- MoveLeaderResponse pb.MoveLeaderResponse
-)
-
-type Maintenance interface {
- // AlarmList gets all active alarms.
- AlarmList(ctx context.Context) (*AlarmResponse, error)
-
- // AlarmDisarm disarms a given alarm.
- AlarmDisarm(ctx context.Context, m *AlarmMember) (*AlarmResponse, error)
-
- // Defragment releases wasted space from internal fragmentation on a given etcd member.
- // Defragment is only needed when deleting a large number of keys and want to reclaim
- // the resources.
- // Defragment is an expensive operation. User should avoid defragmenting multiple members
- // at the same time.
- // To defragment multiple members in the cluster, user need to call defragment multiple
- // times with different endpoints.
- Defragment(ctx context.Context, endpoint string) (*DefragmentResponse, error)
-
- // Status gets the status of the endpoint.
- Status(ctx context.Context, endpoint string) (*StatusResponse, error)
-
- // HashKV returns a hash of the KV state at the time of the RPC.
- // If revision is zero, the hash is computed on all keys. If the revision
- // is non-zero, the hash is computed on all keys at or below the given revision.
- HashKV(ctx context.Context, endpoint string, rev int64) (*HashKVResponse, error)
-
- // Snapshot provides a reader for a point-in-time snapshot of etcd.
- // If the context "ctx" is canceled or timed out, reading from returned
- // "io.ReadCloser" would error out (e.g. context.Canceled, context.DeadlineExceeded).
- Snapshot(ctx context.Context) (io.ReadCloser, error)
-
- // MoveLeader requests current leader to transfer its leadership to the transferee.
- // Request must be made to the leader.
- MoveLeader(ctx context.Context, transfereeID uint64) (*MoveLeaderResponse, error)
-}
-
-type maintenance struct {
- lg *zap.Logger
- dial func(endpoint string) (pb.MaintenanceClient, func(), error)
- remote pb.MaintenanceClient
- callOpts []grpc.CallOption
-}
-
-func NewMaintenance(c *Client) Maintenance {
- api := &maintenance{
- lg: c.lg,
- dial: func(endpoint string) (pb.MaintenanceClient, func(), error) {
- conn, err := c.Dial(endpoint)
- if err != nil {
- return nil, nil, fmt.Errorf("failed to dial endpoint %s with maintenance client: %v", endpoint, err)
- }
-
- //get token with established connection
- dctx := c.ctx
- cancel := func() {}
- if c.cfg.DialTimeout > 0 {
- dctx, cancel = context.WithTimeout(c.ctx, c.cfg.DialTimeout)
- }
- err = c.getToken(dctx)
- cancel()
- if err != nil {
- return nil, nil, fmt.Errorf("failed to getToken from endpoint %s with maintenance client: %v", endpoint, err)
- }
- cancel = func() { conn.Close() }
- return RetryMaintenanceClient(c, conn), cancel, nil
- },
- remote: RetryMaintenanceClient(c, c.conn),
- }
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func NewMaintenanceFromMaintenanceClient(remote pb.MaintenanceClient, c *Client) Maintenance {
- api := &maintenance{
- lg: c.lg,
- dial: func(string) (pb.MaintenanceClient, func(), error) {
- return remote, func() {}, nil
- },
- remote: remote,
- }
- if c != nil {
- api.callOpts = c.callOpts
- }
- return api
-}
-
-func (m *maintenance) AlarmList(ctx context.Context) (*AlarmResponse, error) {
- req := &pb.AlarmRequest{
- Action: pb.AlarmRequest_GET,
- MemberID: 0, // all
- Alarm: pb.AlarmType_NONE, // all
- }
- resp, err := m.remote.Alarm(ctx, req, m.callOpts...)
- if err == nil {
- return (*AlarmResponse)(resp), nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (m *maintenance) AlarmDisarm(ctx context.Context, am *AlarmMember) (*AlarmResponse, error) {
- req := &pb.AlarmRequest{
- Action: pb.AlarmRequest_DEACTIVATE,
- MemberID: am.MemberID,
- Alarm: am.Alarm,
- }
-
- if req.MemberID == 0 && req.Alarm == pb.AlarmType_NONE {
- ar, err := m.AlarmList(ctx)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- ret := AlarmResponse{}
- for _, am := range ar.Alarms {
- dresp, derr := m.AlarmDisarm(ctx, (*AlarmMember)(am))
- if derr != nil {
- return nil, toErr(ctx, derr)
- }
- ret.Alarms = append(ret.Alarms, dresp.Alarms...)
- }
- return &ret, nil
- }
-
- resp, err := m.remote.Alarm(ctx, req, m.callOpts...)
- if err == nil {
- return (*AlarmResponse)(resp), nil
- }
- return nil, toErr(ctx, err)
-}
-
-func (m *maintenance) Defragment(ctx context.Context, endpoint string) (*DefragmentResponse, error) {
- remote, cancel, err := m.dial(endpoint)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- defer cancel()
- resp, err := remote.Defragment(ctx, &pb.DefragmentRequest{}, m.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- return (*DefragmentResponse)(resp), nil
-}
-
-func (m *maintenance) Status(ctx context.Context, endpoint string) (*StatusResponse, error) {
- remote, cancel, err := m.dial(endpoint)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- defer cancel()
- resp, err := remote.Status(ctx, &pb.StatusRequest{}, m.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- return (*StatusResponse)(resp), nil
-}
-
-func (m *maintenance) HashKV(ctx context.Context, endpoint string, rev int64) (*HashKVResponse, error) {
- remote, cancel, err := m.dial(endpoint)
- if err != nil {
-
- return nil, toErr(ctx, err)
- }
- defer cancel()
- resp, err := remote.HashKV(ctx, &pb.HashKVRequest{Revision: rev}, m.callOpts...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
- return (*HashKVResponse)(resp), nil
-}
-
-func (m *maintenance) Snapshot(ctx context.Context) (io.ReadCloser, error) {
- ss, err := m.remote.Snapshot(ctx, &pb.SnapshotRequest{}, append(m.callOpts, withMax(defaultStreamMaxRetries))...)
- if err != nil {
- return nil, toErr(ctx, err)
- }
-
- m.lg.Info("opened snapshot stream; downloading")
- pr, pw := io.Pipe()
- go func() {
- for {
- resp, err := ss.Recv()
- if err != nil {
- switch err {
- case io.EOF:
- m.lg.Info("completed snapshot read; closing")
- default:
- m.lg.Warn("failed to receive from snapshot stream; closing", zap.Error(err))
- }
- pw.CloseWithError(err)
- return
- }
-
- // can "resp == nil && err == nil"
- // before we receive snapshot SHA digest?
- // No, server sends EOF with an empty response
- // after it sends SHA digest at the end
-
- if _, werr := pw.Write(resp.Blob); werr != nil {
- pw.CloseWithError(werr)
- return
- }
- }
- }()
- return &snapshotReadCloser{ctx: ctx, ReadCloser: pr}, nil
-}
-
-type snapshotReadCloser struct {
- ctx context.Context
- io.ReadCloser
-}
-
-func (rc *snapshotReadCloser) Read(p []byte) (n int, err error) {
- n, err = rc.ReadCloser.Read(p)
- return n, toErr(rc.ctx, err)
-}
-
-func (m *maintenance) MoveLeader(ctx context.Context, transfereeID uint64) (*MoveLeaderResponse, error) {
- resp, err := m.remote.MoveLeader(ctx, &pb.MoveLeaderRequest{TargetID: transfereeID}, m.callOpts...)
- return (*MoveLeaderResponse)(resp), toErr(ctx, err)
-}
diff --git a/etcd-fix/client/v3/mirror/syncer.go b/etcd-fix/client/v3/mirror/syncer.go
deleted file mode 100644
index c25ee9b..0000000
--- a/etcd-fix/client/v3/mirror/syncer.go
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package mirror implements etcd mirroring operations.
-package mirror
-
-import (
- "context"
-
- "go.etcd.io/etcd/client/v3"
-)
-
-const (
- batchLimit = 1000
-)
-
-// Syncer syncs with the key-value state of an etcd cluster.
-type Syncer interface {
- // SyncBase syncs the base state of the key-value state.
- // The key-value state are sent through the returned chan.
- SyncBase(ctx context.Context) (<-chan clientv3.GetResponse, chan error)
- // SyncUpdates syncs the updates of the key-value state.
- // The update events are sent through the returned chan.
- SyncUpdates(ctx context.Context) clientv3.WatchChan
-}
-
-// NewSyncer creates a Syncer.
-func NewSyncer(c *clientv3.Client, prefix string, rev int64) Syncer {
- return &syncer{c: c, prefix: prefix, rev: rev}
-}
-
-type syncer struct {
- c *clientv3.Client
- rev int64
- prefix string
-}
-
-func (s *syncer) SyncBase(ctx context.Context) (<-chan clientv3.GetResponse, chan error) {
- respchan := make(chan clientv3.GetResponse, 1024)
- errchan := make(chan error, 1)
-
- // if rev is not specified, we will choose the most recent revision.
- if s.rev == 0 {
- resp, err := s.c.Get(ctx, "foo")
- if err != nil {
- errchan <- err
- close(respchan)
- close(errchan)
- return respchan, errchan
- }
- s.rev = resp.Header.Revision
- }
-
- go func() {
- defer close(respchan)
- defer close(errchan)
-
- var key string
-
- opts := []clientv3.OpOption{clientv3.WithLimit(batchLimit), clientv3.WithRev(s.rev)}
-
- if len(s.prefix) == 0 {
- // If len(s.prefix) == 0, we will sync the entire key-value space.
- // We then range from the smallest key (0x00) to the end.
- opts = append(opts, clientv3.WithFromKey())
- key = "\x00"
- } else {
- // If len(s.prefix) != 0, we will sync key-value space with given prefix.
- // We then range from the prefix to the next prefix if exists. Or we will
- // range from the prefix to the end if the next prefix does not exists.
- opts = append(opts, clientv3.WithRange(clientv3.GetPrefixRangeEnd(s.prefix)))
- key = s.prefix
- }
-
- for {
- resp, err := s.c.Get(ctx, key, opts...)
- if err != nil {
- errchan <- err
- return
- }
-
- respchan <- *resp
-
- if !resp.More {
- return
- }
- // move to next key
- key = string(append(resp.Kvs[len(resp.Kvs)-1].Key, 0))
- }
- }()
-
- return respchan, errchan
-}
-
-func (s *syncer) SyncUpdates(ctx context.Context) clientv3.WatchChan {
- if s.rev == 0 {
- panic("unexpected revision = 0. Calling SyncUpdates before SyncBase finishes?")
- }
- return s.c.Watch(ctx, s.prefix, clientv3.WithPrefix(), clientv3.WithRev(s.rev+1))
-}
diff --git a/etcd-fix/client/v3/mock/mockserver/doc.go b/etcd-fix/client/v3/mock/mockserver/doc.go
deleted file mode 100644
index 030b3b2..0000000
--- a/etcd-fix/client/v3/mock/mockserver/doc.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package mockserver provides mock implementations for etcdserver's server interface.
-package mockserver
diff --git a/etcd-fix/client/v3/mock/mockserver/mockserver.go b/etcd-fix/client/v3/mock/mockserver/mockserver.go
deleted file mode 100644
index 21a8b01..0000000
--- a/etcd-fix/client/v3/mock/mockserver/mockserver.go
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package mockserver
-
-import (
- "context"
- "fmt"
- "io/ioutil"
- "net"
- "os"
- "sync"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-
- "google.golang.org/grpc"
- "google.golang.org/grpc/resolver"
-)
-
-// MockServer provides a mocked out grpc server of the etcdserver interface.
-type MockServer struct {
- ln net.Listener
- Network string
- Address string
- GrpcServer *grpc.Server
-}
-
-func (ms *MockServer) ResolverAddress() resolver.Address {
- switch ms.Network {
- case "unix":
- return resolver.Address{Addr: fmt.Sprintf("unix://%s", ms.Address)}
- case "tcp":
- return resolver.Address{Addr: ms.Address}
- default:
- panic("illegal network type: " + ms.Network)
- }
-}
-
-// MockServers provides a cluster of mocket out gprc servers of the etcdserver interface.
-type MockServers struct {
- mu sync.RWMutex
- Servers []*MockServer
- wg sync.WaitGroup
-}
-
-// StartMockServers creates the desired count of mock servers
-// and starts them.
-func StartMockServers(count int) (ms *MockServers, err error) {
- return StartMockServersOnNetwork(count, "tcp")
-}
-
-// StartMockServersOnNetwork creates mock servers on either 'tcp' or 'unix' sockets.
-func StartMockServersOnNetwork(count int, network string) (ms *MockServers, err error) {
- switch network {
- case "tcp":
- return startMockServersTcp(count)
- case "unix":
- return startMockServersUnix(count)
- default:
- return nil, fmt.Errorf("unsupported network type: %s", network)
- }
-}
-
-func startMockServersTcp(count int) (ms *MockServers, err error) {
- addrs := make([]string, 0, count)
- for i := 0; i < count; i++ {
- addrs = append(addrs, "localhost:0")
- }
- return startMockServers("tcp", addrs)
-}
-
-func startMockServersUnix(count int) (ms *MockServers, err error) {
- dir := os.TempDir()
- addrs := make([]string, 0, count)
- for i := 0; i < count; i++ {
- f, err := ioutil.TempFile(dir, "etcd-unix-so-")
- if err != nil {
- return nil, fmt.Errorf("failed to allocate temp file for unix socket: %v", err)
- }
- fn := f.Name()
- err = os.Remove(fn)
- if err != nil {
- return nil, fmt.Errorf("failed to remove temp file before creating unix socket: %v", err)
- }
- addrs = append(addrs, fn)
- }
- return startMockServers("unix", addrs)
-}
-
-func startMockServers(network string, addrs []string) (ms *MockServers, err error) {
- ms = &MockServers{
- Servers: make([]*MockServer, len(addrs)),
- wg: sync.WaitGroup{},
- }
- defer func() {
- if err != nil {
- ms.Stop()
- }
- }()
- for idx, addr := range addrs {
- ln, err := net.Listen(network, addr)
- if err != nil {
- return nil, fmt.Errorf("failed to listen %v", err)
- }
- ms.Servers[idx] = &MockServer{ln: ln, Network: network, Address: ln.Addr().String()}
- ms.StartAt(idx)
- }
- return ms, nil
-}
-
-// StartAt restarts mock server at given index.
-func (ms *MockServers) StartAt(idx int) (err error) {
- ms.mu.Lock()
- defer ms.mu.Unlock()
-
- if ms.Servers[idx].ln == nil {
- ms.Servers[idx].ln, err = net.Listen(ms.Servers[idx].Network, ms.Servers[idx].Address)
- if err != nil {
- return fmt.Errorf("failed to listen %v", err)
- }
- }
-
- svr := grpc.NewServer()
- pb.RegisterKVServer(svr, &mockKVServer{})
- ms.Servers[idx].GrpcServer = svr
-
- ms.wg.Add(1)
- go func(svr *grpc.Server, l net.Listener) {
- svr.Serve(l)
- }(ms.Servers[idx].GrpcServer, ms.Servers[idx].ln)
- return nil
-}
-
-// StopAt stops mock server at given index.
-func (ms *MockServers) StopAt(idx int) {
- ms.mu.Lock()
- defer ms.mu.Unlock()
-
- if ms.Servers[idx].ln == nil {
- return
- }
-
- ms.Servers[idx].GrpcServer.Stop()
- ms.Servers[idx].GrpcServer = nil
- ms.Servers[idx].ln = nil
- ms.wg.Done()
-}
-
-// Stop stops the mock server, immediately closing all open connections and listeners.
-func (ms *MockServers) Stop() {
- for idx := range ms.Servers {
- ms.StopAt(idx)
- }
- ms.wg.Wait()
-}
-
-type mockKVServer struct{}
-
-func (m *mockKVServer) Range(context.Context, *pb.RangeRequest) (*pb.RangeResponse, error) {
- return &pb.RangeResponse{}, nil
-}
-
-func (m *mockKVServer) Put(context.Context, *pb.PutRequest) (*pb.PutResponse, error) {
- return &pb.PutResponse{}, nil
-}
-
-func (m *mockKVServer) DeleteRange(context.Context, *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error) {
- return &pb.DeleteRangeResponse{}, nil
-}
-
-func (m *mockKVServer) Txn(context.Context, *pb.TxnRequest) (*pb.TxnResponse, error) {
- return &pb.TxnResponse{}, nil
-}
-
-func (m *mockKVServer) Compact(context.Context, *pb.CompactionRequest) (*pb.CompactionResponse, error) {
- return &pb.CompactionResponse{}, nil
-}
diff --git a/etcd-fix/client/v3/namespace/doc.go b/etcd-fix/client/v3/namespace/doc.go
deleted file mode 100644
index 01849b1..0000000
--- a/etcd-fix/client/v3/namespace/doc.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package namespace is a clientv3 wrapper that translates all keys to begin
-// with a given prefix.
-//
-// First, create a client:
-//
-// cli, err := clientv3.New(clientv3.Config{Endpoints: []string{"localhost:2379"}})
-// if err != nil {
-// // handle error!
-// }
-//
-// Next, override the client interfaces:
-//
-// unprefixedKV := cli.KV
-// cli.KV = namespace.NewKV(cli.KV, "my-prefix/")
-// cli.Watcher = namespace.NewWatcher(cli.Watcher, "my-prefix/")
-// cli.Lease = namespace.NewLease(cli.Lease, "my-prefix/")
-//
-// Now calls using 'cli' will namespace / prefix all keys with "my-prefix/":
-//
-// cli.Put(context.TODO(), "abc", "123")
-// resp, _ := unprefixedKV.Get(context.TODO(), "my-prefix/abc")
-// fmt.Printf("%s\n", resp.Kvs[0].Value)
-// // Output: 123
-// unprefixedKV.Put(context.TODO(), "my-prefix/abc", "456")
-// resp, _ = cli.Get(context.TODO(), "abc")
-// fmt.Printf("%s\n", resp.Kvs[0].Value)
-// // Output: 456
-//
-package namespace
diff --git a/etcd-fix/client/v3/namespace/kv.go b/etcd-fix/client/v3/namespace/kv.go
deleted file mode 100644
index f745225..0000000
--- a/etcd-fix/client/v3/namespace/kv.go
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package namespace
-
-import (
- "context"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- "go.etcd.io/etcd/client/v3"
-)
-
-type kvPrefix struct {
- clientv3.KV
- pfx string
-}
-
-// NewKV wraps a KV instance so that all requests
-// are prefixed with a given string.
-func NewKV(kv clientv3.KV, prefix string) clientv3.KV {
- return &kvPrefix{kv, prefix}
-}
-
-func (kv *kvPrefix) Put(ctx context.Context, key, val string, opts ...clientv3.OpOption) (*clientv3.PutResponse, error) {
- if len(key) == 0 {
- return nil, rpctypes.ErrEmptyKey
- }
- op := kv.prefixOp(clientv3.OpPut(key, val, opts...))
- r, err := kv.KV.Do(ctx, op)
- if err != nil {
- return nil, err
- }
- put := r.Put()
- kv.unprefixPutResponse(put)
- return put, nil
-}
-
-func (kv *kvPrefix) Get(ctx context.Context, key string, opts ...clientv3.OpOption) (*clientv3.GetResponse, error) {
- if len(key) == 0 && !(clientv3.IsOptsWithFromKey(opts) || clientv3.IsOptsWithPrefix(opts)) {
- return nil, rpctypes.ErrEmptyKey
- }
- r, err := kv.KV.Do(ctx, kv.prefixOp(clientv3.OpGet(key, opts...)))
- if err != nil {
- return nil, err
- }
- get := r.Get()
- kv.unprefixGetResponse(get)
- return get, nil
-}
-
-func (kv *kvPrefix) Delete(ctx context.Context, key string, opts ...clientv3.OpOption) (*clientv3.DeleteResponse, error) {
- if len(key) == 0 && !(clientv3.IsOptsWithFromKey(opts) || clientv3.IsOptsWithPrefix(opts)) {
- return nil, rpctypes.ErrEmptyKey
- }
- r, err := kv.KV.Do(ctx, kv.prefixOp(clientv3.OpDelete(key, opts...)))
- if err != nil {
- return nil, err
- }
- del := r.Del()
- kv.unprefixDeleteResponse(del)
- return del, nil
-}
-
-func (kv *kvPrefix) Do(ctx context.Context, op clientv3.Op) (clientv3.OpResponse, error) {
- if len(op.KeyBytes()) == 0 && !op.IsTxn() {
- return clientv3.OpResponse{}, rpctypes.ErrEmptyKey
- }
- r, err := kv.KV.Do(ctx, kv.prefixOp(op))
- if err != nil {
- return r, err
- }
- switch {
- case r.Get() != nil:
- kv.unprefixGetResponse(r.Get())
- case r.Put() != nil:
- kv.unprefixPutResponse(r.Put())
- case r.Del() != nil:
- kv.unprefixDeleteResponse(r.Del())
- case r.Txn() != nil:
- kv.unprefixTxnResponse(r.Txn())
- }
- return r, nil
-}
-
-type txnPrefix struct {
- clientv3.Txn
- kv *kvPrefix
-}
-
-func (kv *kvPrefix) Txn(ctx context.Context) clientv3.Txn {
- return &txnPrefix{kv.KV.Txn(ctx), kv}
-}
-
-func (txn *txnPrefix) If(cs ...clientv3.Cmp) clientv3.Txn {
- txn.Txn = txn.Txn.If(txn.kv.prefixCmps(cs)...)
- return txn
-}
-
-func (txn *txnPrefix) Then(ops ...clientv3.Op) clientv3.Txn {
- txn.Txn = txn.Txn.Then(txn.kv.prefixOps(ops)...)
- return txn
-}
-
-func (txn *txnPrefix) Else(ops ...clientv3.Op) clientv3.Txn {
- txn.Txn = txn.Txn.Else(txn.kv.prefixOps(ops)...)
- return txn
-}
-
-func (txn *txnPrefix) Commit() (*clientv3.TxnResponse, error) {
- resp, err := txn.Txn.Commit()
- if err != nil {
- return nil, err
- }
- txn.kv.unprefixTxnResponse(resp)
- return resp, nil
-}
-
-func (kv *kvPrefix) prefixOp(op clientv3.Op) clientv3.Op {
- if !op.IsTxn() {
- begin, end := kv.prefixInterval(op.KeyBytes(), op.RangeBytes())
- op.WithKeyBytes(begin)
- op.WithRangeBytes(end)
- return op
- }
- cmps, thenOps, elseOps := op.Txn()
- return clientv3.OpTxn(kv.prefixCmps(cmps), kv.prefixOps(thenOps), kv.prefixOps(elseOps))
-}
-
-func (kv *kvPrefix) unprefixGetResponse(resp *clientv3.GetResponse) {
- for i := range resp.Kvs {
- resp.Kvs[i].Key = resp.Kvs[i].Key[len(kv.pfx):]
- }
-}
-
-func (kv *kvPrefix) unprefixPutResponse(resp *clientv3.PutResponse) {
- if resp.PrevKv != nil {
- resp.PrevKv.Key = resp.PrevKv.Key[len(kv.pfx):]
- }
-}
-
-func (kv *kvPrefix) unprefixDeleteResponse(resp *clientv3.DeleteResponse) {
- for i := range resp.PrevKvs {
- resp.PrevKvs[i].Key = resp.PrevKvs[i].Key[len(kv.pfx):]
- }
-}
-
-func (kv *kvPrefix) unprefixTxnResponse(resp *clientv3.TxnResponse) {
- for _, r := range resp.Responses {
- switch tv := r.Response.(type) {
- case *pb.ResponseOp_ResponseRange:
- if tv.ResponseRange != nil {
- kv.unprefixGetResponse((*clientv3.GetResponse)(tv.ResponseRange))
- }
- case *pb.ResponseOp_ResponsePut:
- if tv.ResponsePut != nil {
- kv.unprefixPutResponse((*clientv3.PutResponse)(tv.ResponsePut))
- }
- case *pb.ResponseOp_ResponseDeleteRange:
- if tv.ResponseDeleteRange != nil {
- kv.unprefixDeleteResponse((*clientv3.DeleteResponse)(tv.ResponseDeleteRange))
- }
- case *pb.ResponseOp_ResponseTxn:
- if tv.ResponseTxn != nil {
- kv.unprefixTxnResponse((*clientv3.TxnResponse)(tv.ResponseTxn))
- }
- default:
- }
- }
-}
-
-func (kv *kvPrefix) prefixInterval(key, end []byte) (pfxKey []byte, pfxEnd []byte) {
- return prefixInterval(kv.pfx, key, end)
-}
-
-func (kv *kvPrefix) prefixCmps(cs []clientv3.Cmp) []clientv3.Cmp {
- newCmps := make([]clientv3.Cmp, len(cs))
- for i := range cs {
- newCmps[i] = cs[i]
- pfxKey, endKey := kv.prefixInterval(cs[i].KeyBytes(), cs[i].RangeEnd)
- newCmps[i].WithKeyBytes(pfxKey)
- if len(cs[i].RangeEnd) != 0 {
- newCmps[i].RangeEnd = endKey
- }
- }
- return newCmps
-}
-
-func (kv *kvPrefix) prefixOps(ops []clientv3.Op) []clientv3.Op {
- newOps := make([]clientv3.Op, len(ops))
- for i := range ops {
- newOps[i] = kv.prefixOp(ops[i])
- }
- return newOps
-}
diff --git a/etcd-fix/client/v3/namespace/lease.go b/etcd-fix/client/v3/namespace/lease.go
deleted file mode 100644
index f274de5..0000000
--- a/etcd-fix/client/v3/namespace/lease.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package namespace
-
-import (
- "bytes"
- "context"
-
- "go.etcd.io/etcd/client/v3"
-)
-
-type leasePrefix struct {
- clientv3.Lease
- pfx []byte
-}
-
-// NewLease wraps a Lease interface to filter for only keys with a prefix
-// and remove that prefix when fetching attached keys through TimeToLive.
-func NewLease(l clientv3.Lease, prefix string) clientv3.Lease {
- return &leasePrefix{l, []byte(prefix)}
-}
-
-func (l *leasePrefix) TimeToLive(ctx context.Context, id clientv3.LeaseID, opts ...clientv3.LeaseOption) (*clientv3.LeaseTimeToLiveResponse, error) {
- resp, err := l.Lease.TimeToLive(ctx, id, opts...)
- if err != nil {
- return nil, err
- }
- if len(resp.Keys) > 0 {
- var outKeys [][]byte
- for i := range resp.Keys {
- if len(resp.Keys[i]) < len(l.pfx) {
- // too short
- continue
- }
- if !bytes.Equal(resp.Keys[i][:len(l.pfx)], l.pfx) {
- // doesn't match prefix
- continue
- }
- // strip prefix
- outKeys = append(outKeys, resp.Keys[i][len(l.pfx):])
- }
- resp.Keys = outKeys
- }
- return resp, nil
-}
diff --git a/etcd-fix/client/v3/namespace/util.go b/etcd-fix/client/v3/namespace/util.go
deleted file mode 100644
index ecf0404..0000000
--- a/etcd-fix/client/v3/namespace/util.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package namespace
-
-func prefixInterval(pfx string, key, end []byte) (pfxKey []byte, pfxEnd []byte) {
- pfxKey = make([]byte, len(pfx)+len(key))
- copy(pfxKey[copy(pfxKey, pfx):], key)
-
- if len(end) == 1 && end[0] == 0 {
- // the edge of the keyspace
- pfxEnd = make([]byte, len(pfx))
- copy(pfxEnd, pfx)
- ok := false
- for i := len(pfxEnd) - 1; i >= 0; i-- {
- if pfxEnd[i]++; pfxEnd[i] != 0 {
- ok = true
- break
- }
- }
- if !ok {
- // 0xff..ff => 0x00
- pfxEnd = []byte{0}
- }
- } else if len(end) >= 1 {
- pfxEnd = make([]byte, len(pfx)+len(end))
- copy(pfxEnd[copy(pfxEnd, pfx):], end)
- }
-
- return pfxKey, pfxEnd
-}
diff --git a/etcd-fix/client/v3/namespace/util_test.go b/etcd-fix/client/v3/namespace/util_test.go
deleted file mode 100644
index 9ba472b..0000000
--- a/etcd-fix/client/v3/namespace/util_test.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package namespace
-
-import (
- "bytes"
- "testing"
-)
-
-func TestPrefixInterval(t *testing.T) {
- tests := []struct {
- pfx string
- key []byte
- end []byte
-
- wKey []byte
- wEnd []byte
- }{
- // single key
- {
- pfx: "pfx/",
- key: []byte("a"),
-
- wKey: []byte("pfx/a"),
- },
- // range
- {
- pfx: "pfx/",
- key: []byte("abc"),
- end: []byte("def"),
-
- wKey: []byte("pfx/abc"),
- wEnd: []byte("pfx/def"),
- },
- // one-sided range
- {
- pfx: "pfx/",
- key: []byte("abc"),
- end: []byte{0},
-
- wKey: []byte("pfx/abc"),
- wEnd: []byte("pfx0"),
- },
- // one-sided range, end of keyspace
- {
- pfx: "\xff\xff",
- key: []byte("abc"),
- end: []byte{0},
-
- wKey: []byte("\xff\xffabc"),
- wEnd: []byte{0},
- },
- }
- for i, tt := range tests {
- pfxKey, pfxEnd := prefixInterval(tt.pfx, tt.key, tt.end)
- if !bytes.Equal(pfxKey, tt.wKey) {
- t.Errorf("#%d: expected key=%q, got key=%q", i, tt.wKey, pfxKey)
- }
- if !bytes.Equal(pfxEnd, tt.wEnd) {
- t.Errorf("#%d: expected end=%q, got end=%q", i, tt.wEnd, pfxEnd)
- }
- }
-}
diff --git a/etcd-fix/client/v3/namespace/watch.go b/etcd-fix/client/v3/namespace/watch.go
deleted file mode 100644
index 1236285..0000000
--- a/etcd-fix/client/v3/namespace/watch.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package namespace
-
-import (
- "context"
- "sync"
-
- "go.etcd.io/etcd/client/v3"
-)
-
-type watcherPrefix struct {
- clientv3.Watcher
- pfx string
-
- wg sync.WaitGroup
- stopc chan struct{}
- stopOnce sync.Once
-}
-
-// NewWatcher wraps a Watcher instance so that all Watch requests
-// are prefixed with a given string and all Watch responses have
-// the prefix removed.
-func NewWatcher(w clientv3.Watcher, prefix string) clientv3.Watcher {
- return &watcherPrefix{Watcher: w, pfx: prefix, stopc: make(chan struct{})}
-}
-
-func (w *watcherPrefix) Watch(ctx context.Context, key string, opts ...clientv3.OpOption) clientv3.WatchChan {
- // since OpOption is opaque, determine range for prefixing through an OpGet
- op := clientv3.OpGet(key, opts...)
- end := op.RangeBytes()
- pfxBegin, pfxEnd := prefixInterval(w.pfx, []byte(key), end)
- if pfxEnd != nil {
- opts = append(opts, clientv3.WithRange(string(pfxEnd)))
- }
-
- wch := w.Watcher.Watch(ctx, string(pfxBegin), opts...)
-
- // translate watch events from prefixed to unprefixed
- pfxWch := make(chan clientv3.WatchResponse)
- w.wg.Add(1)
- go func() {
- defer func() {
- close(pfxWch)
- w.wg.Done()
- }()
- for wr := range wch {
- for i := range wr.Events {
- wr.Events[i].Kv.Key = wr.Events[i].Kv.Key[len(w.pfx):]
- if wr.Events[i].PrevKv != nil {
- wr.Events[i].PrevKv.Key = wr.Events[i].Kv.Key
- }
- }
- select {
- case pfxWch <- wr:
- case <-ctx.Done():
- return
- case <-w.stopc:
- return
- }
- }
- }()
- return pfxWch
-}
-
-func (w *watcherPrefix) Close() error {
- err := w.Watcher.Close()
- w.stopOnce.Do(func() { close(w.stopc) })
- w.wg.Wait()
- return err
-}
diff --git a/etcd-fix/client/v3/naming/doc.go b/etcd-fix/client/v3/naming/doc.go
deleted file mode 100644
index df141f4..0000000
--- a/etcd-fix/client/v3/naming/doc.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package naming provides an etcd-backed gRPC resolver for discovering gRPC services.
-//
-// To use, first import the packages:
-//
-// import (
-// "go.etcd.io/etcd/client/v3"
-// etcdnaming "go.etcd.io/etcd/client/v3/naming"
-//
-// "google.golang.org/grpc"
-// "google.golang.org/grpc/naming"
-// )
-//
-// First, register new endpoint addresses for a service:
-//
-// func etcdAdd(c *clientv3.Client, service, addr string) error {
-// r := &etcdnaming.GRPCResolver{Client: c}
-// return r.Update(c.Ctx(), service, naming.Update{Op: naming.Add, Addr: addr})
-// }
-//
-// Dial an RPC service using the etcd gRPC resolver and a gRPC Balancer:
-//
-// func etcdDial(c *clientv3.Client, service string) (*grpc.ClientConn, error) {
-// r := &etcdnaming.GRPCResolver{Client: c}
-// b := grpc.RoundRobin(r)
-// return grpc.Dial(service, grpc.WithBalancer(b))
-// }
-//
-// Optionally, force delete an endpoint:
-//
-// func etcdDelete(c *clientv3, service, addr string) error {
-// r := &etcdnaming.GRPCResolver{Client: c}
-// return r.Update(c.Ctx(), service, naming.Update{Op: naming.Delete, Addr: "1.2.3.4"})
-// }
-//
-// Or register an expiring endpoint with a lease:
-//
-// func etcdLeaseAdd(c *clientv3.Client, lid clientv3.LeaseID, service, addr string) error {
-// r := &etcdnaming.GRPCResolver{Client: c}
-// return r.Update(c.Ctx(), service, naming.Update{Op: naming.Add, Addr: addr}, clientv3.WithLease(lid))
-// }
-//
-package naming
diff --git a/etcd-fix/client/v3/naming/grpc.go b/etcd-fix/client/v3/naming/grpc.go
deleted file mode 100644
index d12e7e2..0000000
--- a/etcd-fix/client/v3/naming/grpc.go
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package naming
-
-import (
- "context"
- "encoding/json"
- "fmt"
-
- etcd "go.etcd.io/etcd/client/v3"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/naming"
- "google.golang.org/grpc/status"
-)
-
-var ErrWatcherClosed = fmt.Errorf("naming: watch closed")
-
-// GRPCResolver creates a grpc.Watcher for a target to track its resolution changes.
-type GRPCResolver struct {
- // Client is an initialized etcd client.
- Client *etcd.Client
-}
-
-func (gr *GRPCResolver) Update(ctx context.Context, target string, nm naming.Update, opts ...etcd.OpOption) (err error) {
- switch nm.Op {
- case naming.Add:
- var v []byte
- if v, err = json.Marshal(nm); err != nil {
- return status.Error(codes.InvalidArgument, err.Error())
- }
- _, err = gr.Client.KV.Put(ctx, target+"/"+nm.Addr, string(v), opts...)
- case naming.Delete:
- _, err = gr.Client.Delete(ctx, target+"/"+nm.Addr, opts...)
- default:
- return status.Error(codes.InvalidArgument, "naming: bad naming op")
- }
- return err
-}
-
-func (gr *GRPCResolver) Resolve(target string) (naming.Watcher, error) {
- ctx, cancel := context.WithCancel(context.Background())
- w := &gRPCWatcher{c: gr.Client, target: target + "/", ctx: ctx, cancel: cancel}
- return w, nil
-}
-
-type gRPCWatcher struct {
- c *etcd.Client
- target string
- ctx context.Context
- cancel context.CancelFunc
- wch etcd.WatchChan
- err error
-}
-
-// Next gets the next set of updates from the etcd resolver.
-// Calls to Next should be serialized; concurrent calls are not safe since
-// there is no way to reconcile the update ordering.
-func (gw *gRPCWatcher) Next() ([]*naming.Update, error) {
- if gw.wch == nil {
- // first Next() returns all addresses
- return gw.firstNext()
- }
- if gw.err != nil {
- return nil, gw.err
- }
-
- // process new events on target/*
- wr, ok := <-gw.wch
- if !ok {
- gw.err = status.Error(codes.Unavailable, ErrWatcherClosed.Error())
- return nil, gw.err
- }
- if gw.err = wr.Err(); gw.err != nil {
- return nil, gw.err
- }
-
- updates := make([]*naming.Update, 0, len(wr.Events))
- for _, e := range wr.Events {
- var jupdate naming.Update
- var err error
- switch e.Type {
- case etcd.EventTypePut:
- err = json.Unmarshal(e.Kv.Value, &jupdate)
- jupdate.Op = naming.Add
- case etcd.EventTypeDelete:
- err = json.Unmarshal(e.PrevKv.Value, &jupdate)
- jupdate.Op = naming.Delete
- default:
- continue
- }
- if err == nil {
- updates = append(updates, &jupdate)
- }
- }
- return updates, nil
-}
-
-func (gw *gRPCWatcher) firstNext() ([]*naming.Update, error) {
- // Use serialized request so resolution still works if the target etcd
- // server is partitioned away from the quorum.
- resp, err := gw.c.Get(gw.ctx, gw.target, etcd.WithPrefix(), etcd.WithSerializable())
- if gw.err = err; err != nil {
- return nil, err
- }
-
- updates := make([]*naming.Update, 0, len(resp.Kvs))
- for _, kv := range resp.Kvs {
- var jupdate naming.Update
- if err := json.Unmarshal(kv.Value, &jupdate); err != nil {
- continue
- }
- updates = append(updates, &jupdate)
- }
-
- opts := []etcd.OpOption{etcd.WithRev(resp.Header.Revision + 1), etcd.WithPrefix(), etcd.WithPrevKV()}
- gw.wch = gw.c.Watch(gw.ctx, gw.target, opts...)
- return updates, nil
-}
-
-func (gw *gRPCWatcher) Close() { gw.cancel() }
diff --git a/etcd-fix/client/v3/op.go b/etcd-fix/client/v3/op.go
deleted file mode 100644
index bd0f1f2..0000000
--- a/etcd-fix/client/v3/op.go
+++ /dev/null
@@ -1,560 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-
-type opType int
-
-const (
- // A default Op has opType 0, which is invalid.
- tRange opType = iota + 1
- tPut
- tDeleteRange
- tTxn
-)
-
-var noPrefixEnd = []byte{0}
-
-// Op represents an Operation that kv can execute.
-type Op struct {
- t opType
- key []byte
- end []byte
-
- // for range
- limit int64
- sort *SortOption
- serializable bool
- keysOnly bool
- countOnly bool
- minModRev int64
- maxModRev int64
- minCreateRev int64
- maxCreateRev int64
-
- // for range, watch
- rev int64
-
- // for watch, put, delete
- prevKV bool
-
- // for watch
- // fragmentation should be disabled by default
- // if true, split watch events when total exceeds
- // "--max-request-bytes" flag value + 512-byte
- fragment bool
-
- // for put
- ignoreValue bool
- ignoreLease bool
-
- // progressNotify is for progress updates.
- progressNotify bool
- // createdNotify is for created event
- createdNotify bool
- // filters for watchers
- filterPut bool
- filterDelete bool
-
- // for put
- val []byte
- leaseID LeaseID
-
- // txn
- cmps []Cmp
- thenOps []Op
- elseOps []Op
-}
-
-// accessors / mutators
-
-// IsTxn returns true if the "Op" type is transaction.
-func (op Op) IsTxn() bool {
- return op.t == tTxn
-}
-
-// Txn returns the comparison(if) operations, "then" operations, and "else" operations.
-func (op Op) Txn() ([]Cmp, []Op, []Op) {
- return op.cmps, op.thenOps, op.elseOps
-}
-
-// KeyBytes returns the byte slice holding the Op's key.
-func (op Op) KeyBytes() []byte { return op.key }
-
-// WithKeyBytes sets the byte slice for the Op's key.
-func (op *Op) WithKeyBytes(key []byte) { op.key = key }
-
-// RangeBytes returns the byte slice holding with the Op's range end, if any.
-func (op Op) RangeBytes() []byte { return op.end }
-
-// Rev returns the requested revision, if any.
-func (op Op) Rev() int64 { return op.rev }
-
-// IsPut returns true iff the operation is a Put.
-func (op Op) IsPut() bool { return op.t == tPut }
-
-// IsGet returns true iff the operation is a Get.
-func (op Op) IsGet() bool { return op.t == tRange }
-
-// IsDelete returns true iff the operation is a Delete.
-func (op Op) IsDelete() bool { return op.t == tDeleteRange }
-
-// IsSerializable returns true if the serializable field is true.
-func (op Op) IsSerializable() bool { return op.serializable }
-
-// IsKeysOnly returns whether keysOnly is set.
-func (op Op) IsKeysOnly() bool { return op.keysOnly }
-
-// IsCountOnly returns whether countOnly is set.
-func (op Op) IsCountOnly() bool { return op.countOnly }
-
-// MinModRev returns the operation's minimum modify revision.
-func (op Op) MinModRev() int64 { return op.minModRev }
-
-// MaxModRev returns the operation's maximum modify revision.
-func (op Op) MaxModRev() int64 { return op.maxModRev }
-
-// MinCreateRev returns the operation's minimum create revision.
-func (op Op) MinCreateRev() int64 { return op.minCreateRev }
-
-// MaxCreateRev returns the operation's maximum create revision.
-func (op Op) MaxCreateRev() int64 { return op.maxCreateRev }
-
-// WithRangeBytes sets the byte slice for the Op's range end.
-func (op *Op) WithRangeBytes(end []byte) { op.end = end }
-
-// ValueBytes returns the byte slice holding the Op's value, if any.
-func (op Op) ValueBytes() []byte { return op.val }
-
-// WithValueBytes sets the byte slice for the Op's value.
-func (op *Op) WithValueBytes(v []byte) { op.val = v }
-
-func (op Op) toRangeRequest() *pb.RangeRequest {
- if op.t != tRange {
- panic("op.t != tRange")
- }
- r := &pb.RangeRequest{
- Key: op.key,
- RangeEnd: op.end,
- Limit: op.limit,
- Revision: op.rev,
- Serializable: op.serializable,
- KeysOnly: op.keysOnly,
- CountOnly: op.countOnly,
- MinModRevision: op.minModRev,
- MaxModRevision: op.maxModRev,
- MinCreateRevision: op.minCreateRev,
- MaxCreateRevision: op.maxCreateRev,
- }
- if op.sort != nil {
- r.SortOrder = pb.RangeRequest_SortOrder(op.sort.Order)
- r.SortTarget = pb.RangeRequest_SortTarget(op.sort.Target)
- }
- return r
-}
-
-func (op Op) toTxnRequest() *pb.TxnRequest {
- thenOps := make([]*pb.RequestOp, len(op.thenOps))
- for i, tOp := range op.thenOps {
- thenOps[i] = tOp.toRequestOp()
- }
- elseOps := make([]*pb.RequestOp, len(op.elseOps))
- for i, eOp := range op.elseOps {
- elseOps[i] = eOp.toRequestOp()
- }
- cmps := make([]*pb.Compare, len(op.cmps))
- for i := range op.cmps {
- cmps[i] = (*pb.Compare)(&op.cmps[i])
- }
- return &pb.TxnRequest{Compare: cmps, Success: thenOps, Failure: elseOps}
-}
-
-func (op Op) toRequestOp() *pb.RequestOp {
- switch op.t {
- case tRange:
- return &pb.RequestOp{Request: &pb.RequestOp_RequestRange{RequestRange: op.toRangeRequest()}}
- case tPut:
- r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID), PrevKv: op.prevKV, IgnoreValue: op.ignoreValue, IgnoreLease: op.ignoreLease}
- return &pb.RequestOp{Request: &pb.RequestOp_RequestPut{RequestPut: r}}
- case tDeleteRange:
- r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end, PrevKv: op.prevKV}
- return &pb.RequestOp{Request: &pb.RequestOp_RequestDeleteRange{RequestDeleteRange: r}}
- case tTxn:
- return &pb.RequestOp{Request: &pb.RequestOp_RequestTxn{RequestTxn: op.toTxnRequest()}}
- default:
- panic("Unknown Op")
- }
-}
-
-func (op Op) isWrite() bool {
- if op.t == tTxn {
- for _, tOp := range op.thenOps {
- if tOp.isWrite() {
- return true
- }
- }
- for _, tOp := range op.elseOps {
- if tOp.isWrite() {
- return true
- }
- }
- return false
- }
- return op.t != tRange
-}
-
-// OpGet returns "get" operation based on given key and operation options.
-func OpGet(key string, opts ...OpOption) Op {
- // WithPrefix and WithFromKey are not supported together
- if IsOptsWithPrefix(opts) && IsOptsWithFromKey(opts) {
- panic("`WithPrefix` and `WithFromKey` cannot be set at the same time, choose one")
- }
- ret := Op{t: tRange, key: []byte(key)}
- ret.applyOpts(opts)
- return ret
-}
-
-// OpDelete returns "delete" operation based on given key and operation options.
-func OpDelete(key string, opts ...OpOption) Op {
- // WithPrefix and WithFromKey are not supported together
- if IsOptsWithPrefix(opts) && IsOptsWithFromKey(opts) {
- panic("`WithPrefix` and `WithFromKey` cannot be set at the same time, choose one")
- }
- ret := Op{t: tDeleteRange, key: []byte(key)}
- ret.applyOpts(opts)
- switch {
- case ret.leaseID != 0:
- panic("unexpected lease in delete")
- case ret.limit != 0:
- panic("unexpected limit in delete")
- case ret.rev != 0:
- panic("unexpected revision in delete")
- case ret.sort != nil:
- panic("unexpected sort in delete")
- case ret.serializable:
- panic("unexpected serializable in delete")
- case ret.countOnly:
- panic("unexpected countOnly in delete")
- case ret.minModRev != 0, ret.maxModRev != 0:
- panic("unexpected mod revision filter in delete")
- case ret.minCreateRev != 0, ret.maxCreateRev != 0:
- panic("unexpected create revision filter in delete")
- case ret.filterDelete, ret.filterPut:
- panic("unexpected filter in delete")
- case ret.createdNotify:
- panic("unexpected createdNotify in delete")
- }
- return ret
-}
-
-// OpPut returns "put" operation based on given key-value and operation options.
-func OpPut(key, val string, opts ...OpOption) Op {
- ret := Op{t: tPut, key: []byte(key), val: []byte(val)}
- ret.applyOpts(opts)
- switch {
- case ret.end != nil:
- panic("unexpected range in put")
- case ret.limit != 0:
- panic("unexpected limit in put")
- case ret.rev != 0:
- panic("unexpected revision in put")
- case ret.sort != nil:
- panic("unexpected sort in put")
- case ret.serializable:
- panic("unexpected serializable in put")
- case ret.countOnly:
- panic("unexpected countOnly in put")
- case ret.minModRev != 0, ret.maxModRev != 0:
- panic("unexpected mod revision filter in put")
- case ret.minCreateRev != 0, ret.maxCreateRev != 0:
- panic("unexpected create revision filter in put")
- case ret.filterDelete, ret.filterPut:
- panic("unexpected filter in put")
- case ret.createdNotify:
- panic("unexpected createdNotify in put")
- }
- return ret
-}
-
-// OpTxn returns "txn" operation based on given transaction conditions.
-func OpTxn(cmps []Cmp, thenOps []Op, elseOps []Op) Op {
- return Op{t: tTxn, cmps: cmps, thenOps: thenOps, elseOps: elseOps}
-}
-
-func opWatch(key string, opts ...OpOption) Op {
- ret := Op{t: tRange, key: []byte(key)}
- ret.applyOpts(opts)
- switch {
- case ret.leaseID != 0:
- panic("unexpected lease in watch")
- case ret.limit != 0:
- panic("unexpected limit in watch")
- case ret.sort != nil:
- panic("unexpected sort in watch")
- case ret.serializable:
- panic("unexpected serializable in watch")
- case ret.countOnly:
- panic("unexpected countOnly in watch")
- case ret.minModRev != 0, ret.maxModRev != 0:
- panic("unexpected mod revision filter in watch")
- case ret.minCreateRev != 0, ret.maxCreateRev != 0:
- panic("unexpected create revision filter in watch")
- }
- return ret
-}
-
-func (op *Op) applyOpts(opts []OpOption) {
- for _, opt := range opts {
- opt(op)
- }
-}
-
-// OpOption configures Operations like Get, Put, Delete.
-type OpOption func(*Op)
-
-// WithLease attaches a lease ID to a key in 'Put' request.
-func WithLease(leaseID LeaseID) OpOption {
- return func(op *Op) { op.leaseID = leaseID }
-}
-
-// WithLimit limits the number of results to return from 'Get' request.
-// If WithLimit is given a 0 limit, it is treated as no limit.
-func WithLimit(n int64) OpOption { return func(op *Op) { op.limit = n } }
-
-// WithRev specifies the store revision for 'Get' request.
-// Or the start revision of 'Watch' request.
-func WithRev(rev int64) OpOption { return func(op *Op) { op.rev = rev } }
-
-// WithSort specifies the ordering in 'Get' request. It requires
-// 'WithRange' and/or 'WithPrefix' to be specified too.
-// 'target' specifies the target to sort by: key, version, revisions, value.
-// 'order' can be either 'SortNone', 'SortAscend', 'SortDescend'.
-func WithSort(target SortTarget, order SortOrder) OpOption {
- return func(op *Op) {
- if target == SortByKey && order == SortAscend {
- // If order != SortNone, server fetches the entire key-space,
- // and then applies the sort and limit, if provided.
- // Since by default the server returns results sorted by keys
- // in lexicographically ascending order, the client should ignore
- // SortOrder if the target is SortByKey.
- order = SortNone
- }
- op.sort = &SortOption{target, order}
- }
-}
-
-// GetPrefixRangeEnd gets the range end of the prefix.
-// 'Get(foo, WithPrefix())' is equal to 'Get(foo, WithRange(GetPrefixRangeEnd(foo))'.
-func GetPrefixRangeEnd(prefix string) string {
- return string(getPrefix([]byte(prefix)))
-}
-
-func getPrefix(key []byte) []byte {
- end := make([]byte, len(key))
- copy(end, key)
- for i := len(end) - 1; i >= 0; i-- {
- if end[i] < 0xff {
- end[i] = end[i] + 1
- end = end[:i+1]
- return end
- }
- }
- // next prefix does not exist (e.g., 0xffff);
- // default to WithFromKey policy
- return noPrefixEnd
-}
-
-// WithPrefix enables 'Get', 'Delete', or 'Watch' requests to operate
-// on the keys with matching prefix. For example, 'Get(foo, WithPrefix())'
-// can return 'foo1', 'foo2', and so on.
-func WithPrefix() OpOption {
- return func(op *Op) {
- if len(op.key) == 0 {
- op.key, op.end = []byte{0}, []byte{0}
- return
- }
- op.end = getPrefix(op.key)
- }
-}
-
-// WithRange specifies the range of 'Get', 'Delete', 'Watch' requests.
-// For example, 'Get' requests with 'WithRange(end)' returns
-// the keys in the range [key, end).
-// endKey must be lexicographically greater than start key.
-func WithRange(endKey string) OpOption {
- return func(op *Op) { op.end = []byte(endKey) }
-}
-
-// WithFromKey specifies the range of 'Get', 'Delete', 'Watch' requests
-// to be equal or greater than the key in the argument.
-func WithFromKey() OpOption {
- return func(op *Op) {
- if len(op.key) == 0 {
- op.key = []byte{0}
- }
- op.end = []byte("\x00")
- }
-}
-
-// WithSerializable makes 'Get' request serializable. By default,
-// it's linearizable. Serializable requests are better for lower latency
-// requirement.
-func WithSerializable() OpOption {
- return func(op *Op) { op.serializable = true }
-}
-
-// WithKeysOnly makes the 'Get' request return only the keys and the corresponding
-// values will be omitted.
-func WithKeysOnly() OpOption {
- return func(op *Op) { op.keysOnly = true }
-}
-
-// WithCountOnly makes the 'Get' request return only the count of keys.
-func WithCountOnly() OpOption {
- return func(op *Op) { op.countOnly = true }
-}
-
-// WithMinModRev filters out keys for Get with modification revisions less than the given revision.
-func WithMinModRev(rev int64) OpOption { return func(op *Op) { op.minModRev = rev } }
-
-// WithMaxModRev filters out keys for Get with modification revisions greater than the given revision.
-func WithMaxModRev(rev int64) OpOption { return func(op *Op) { op.maxModRev = rev } }
-
-// WithMinCreateRev filters out keys for Get with creation revisions less than the given revision.
-func WithMinCreateRev(rev int64) OpOption { return func(op *Op) { op.minCreateRev = rev } }
-
-// WithMaxCreateRev filters out keys for Get with creation revisions greater than the given revision.
-func WithMaxCreateRev(rev int64) OpOption { return func(op *Op) { op.maxCreateRev = rev } }
-
-// WithFirstCreate gets the key with the oldest creation revision in the request range.
-func WithFirstCreate() []OpOption { return withTop(SortByCreateRevision, SortAscend) }
-
-// WithLastCreate gets the key with the latest creation revision in the request range.
-func WithLastCreate() []OpOption { return withTop(SortByCreateRevision, SortDescend) }
-
-// WithFirstKey gets the lexically first key in the request range.
-func WithFirstKey() []OpOption { return withTop(SortByKey, SortAscend) }
-
-// WithLastKey gets the lexically last key in the request range.
-func WithLastKey() []OpOption { return withTop(SortByKey, SortDescend) }
-
-// WithFirstRev gets the key with the oldest modification revision in the request range.
-func WithFirstRev() []OpOption { return withTop(SortByModRevision, SortAscend) }
-
-// WithLastRev gets the key with the latest modification revision in the request range.
-func WithLastRev() []OpOption { return withTop(SortByModRevision, SortDescend) }
-
-// withTop gets the first key over the get's prefix given a sort order
-func withTop(target SortTarget, order SortOrder) []OpOption {
- return []OpOption{WithPrefix(), WithSort(target, order), WithLimit(1)}
-}
-
-// WithProgressNotify makes watch server send periodic progress updates
-// every 10 minutes when there is no incoming events.
-// Progress updates have zero events in WatchResponse.
-func WithProgressNotify() OpOption {
- return func(op *Op) {
- op.progressNotify = true
- }
-}
-
-// WithCreatedNotify makes watch server sends the created event.
-func WithCreatedNotify() OpOption {
- return func(op *Op) {
- op.createdNotify = true
- }
-}
-
-// WithFilterPut discards PUT events from the watcher.
-func WithFilterPut() OpOption {
- return func(op *Op) { op.filterPut = true }
-}
-
-// WithFilterDelete discards DELETE events from the watcher.
-func WithFilterDelete() OpOption {
- return func(op *Op) { op.filterDelete = true }
-}
-
-// WithPrevKV gets the previous key-value pair before the event happens. If the previous KV is already compacted,
-// nothing will be returned.
-func WithPrevKV() OpOption {
- return func(op *Op) {
- op.prevKV = true
- }
-}
-
-// WithFragment to receive raw watch response with fragmentation.
-// Fragmentation is disabled by default. If fragmentation is enabled,
-// etcd watch server will split watch response before sending to clients
-// when the total size of watch events exceed server-side request limit.
-// The default server-side request limit is 1.5 MiB, which can be configured
-// as "--max-request-bytes" flag value + gRPC-overhead 512 bytes.
-// See "etcdserver/api/v3rpc/watch.go" for more details.
-func WithFragment() OpOption {
- return func(op *Op) { op.fragment = true }
-}
-
-// WithIgnoreValue updates the key using its current value.
-// This option can not be combined with non-empty values.
-// Returns an error if the key does not exist.
-func WithIgnoreValue() OpOption {
- return func(op *Op) {
- op.ignoreValue = true
- }
-}
-
-// WithIgnoreLease updates the key using its current lease.
-// This option can not be combined with WithLease.
-// Returns an error if the key does not exist.
-func WithIgnoreLease() OpOption {
- return func(op *Op) {
- op.ignoreLease = true
- }
-}
-
-// LeaseOp represents an Operation that lease can execute.
-type LeaseOp struct {
- id LeaseID
-
- // for TimeToLive
- attachedKeys bool
-}
-
-// LeaseOption configures lease operations.
-type LeaseOption func(*LeaseOp)
-
-func (op *LeaseOp) applyOpts(opts []LeaseOption) {
- for _, opt := range opts {
- opt(op)
- }
-}
-
-// WithAttachedKeys makes TimeToLive list the keys attached to the given lease ID.
-func WithAttachedKeys() LeaseOption {
- return func(op *LeaseOp) { op.attachedKeys = true }
-}
-
-func toLeaseTimeToLiveRequest(id LeaseID, opts ...LeaseOption) *pb.LeaseTimeToLiveRequest {
- ret := &LeaseOp{id: id}
- ret.applyOpts(opts)
- return &pb.LeaseTimeToLiveRequest{ID: int64(id), Keys: ret.attachedKeys}
-}
-
-// IsOptsWithPrefix returns true if WithPrefix option is called in the given opts.
-func IsOptsWithPrefix(opts []OpOption) bool { return isOpFuncCalled("WithPrefix", opts) }
-
-// IsOptsWithFromKey returns true if WithFromKey option is called in the given opts.
-func IsOptsWithFromKey(opts []OpOption) bool { return isOpFuncCalled("WithFromKey", opts) }
diff --git a/etcd-fix/client/v3/op_test.go b/etcd-fix/client/v3/op_test.go
deleted file mode 100644
index 762044f..0000000
--- a/etcd-fix/client/v3/op_test.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "reflect"
- "testing"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-)
-
-// TestOpWithSort tests if WithSort(ASCEND, KEY) and WithLimit are specified,
-// RangeRequest ignores the SortOption to avoid unnecessarily fetching
-// the entire key-space.
-func TestOpWithSort(t *testing.T) {
- opReq := OpGet("foo", WithSort(SortByKey, SortAscend), WithLimit(10)).toRequestOp().Request
- q, ok := opReq.(*pb.RequestOp_RequestRange)
- if !ok {
- t.Fatalf("expected range request, got %v", reflect.TypeOf(opReq))
- }
- req := q.RequestRange
- wreq := &pb.RangeRequest{Key: []byte("foo"), SortOrder: pb.RangeRequest_NONE, Limit: 10}
- if !reflect.DeepEqual(req, wreq) {
- t.Fatalf("expected %+v, got %+v", wreq, req)
- }
-}
diff --git a/etcd-fix/client/v3/options.go b/etcd-fix/client/v3/options.go
deleted file mode 100644
index 700714c..0000000
--- a/etcd-fix/client/v3/options.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "math"
- "time"
-
- "google.golang.org/grpc"
-)
-
-var (
- // client-side handling retrying of request failures where data was not written to the wire or
- // where server indicates it did not process the data. gRPC default is default is "FailFast(true)"
- // but for etcd we default to "FailFast(false)" to minimize client request error responses due to
- // transient failures.
- defaultFailFast = grpc.FailFast(false)
-
- // client-side request send limit, gRPC default is math.MaxInt32
- // Make sure that "client-side send limit < server-side default send/recv limit"
- // Same value as "embed.DefaultMaxRequestBytes" plus gRPC overhead bytes
- defaultMaxCallSendMsgSize = grpc.MaxCallSendMsgSize(2 * 1024 * 1024)
-
- // client-side response receive limit, gRPC default is 4MB
- // Make sure that "client-side receive limit >= server-side default send/recv limit"
- // because range response can easily exceed request send limits
- // Default to math.MaxInt32; writes exceeding server-side send limit fails anyway
- defaultMaxCallRecvMsgSize = grpc.MaxCallRecvMsgSize(math.MaxInt32)
-
- // client-side non-streaming retry limit, only applied to requests where server responds with
- // a error code clearly indicating it was unable to process the request such as codes.Unavailable.
- // If set to 0, retry is disabled.
- defaultUnaryMaxRetries uint = 100
-
- // client-side streaming retry limit, only applied to requests where server responds with
- // a error code clearly indicating it was unable to process the request such as codes.Unavailable.
- // If set to 0, retry is disabled.
- defaultStreamMaxRetries = ^uint(0) // max uint
-
- // client-side retry backoff wait between requests.
- defaultBackoffWaitBetween = 25 * time.Millisecond
-
- // client-side retry backoff default jitter fraction.
- defaultBackoffJitterFraction = 0.10
-)
-
-// defaultCallOpts defines a list of default "gRPC.CallOption".
-// Some options are exposed to "clientv3.Config".
-// Defaults will be overridden by the settings in "clientv3.Config".
-var defaultCallOpts = []grpc.CallOption{defaultFailFast, defaultMaxCallSendMsgSize, defaultMaxCallRecvMsgSize}
-
-// MaxLeaseTTL is the maximum lease TTL value
-const MaxLeaseTTL = 9000000000
diff --git a/etcd-fix/client/v3/ordering/doc.go b/etcd-fix/client/v3/ordering/doc.go
deleted file mode 100644
index 856f330..0000000
--- a/etcd-fix/client/v3/ordering/doc.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package ordering is a clientv3 wrapper that caches response header revisions
-// to detect ordering violations from stale responses. Users may define a
-// policy on how to handle the ordering violation, but typically the client
-// should connect to another endpoint and reissue the request.
-//
-// The most common situation where an ordering violation happens is a client
-// reconnects to a partitioned member and issues a serializable read. Since the
-// partitioned member is likely behind the last member, it may return a Get
-// response based on a store revision older than the store revision used to
-// service a prior Get on the former endpoint.
-//
-// First, create a client:
-//
-// cli, err := clientv3.New(clientv3.Config{Endpoints: []string{"localhost:2379"}})
-// if err != nil {
-// // handle error!
-// }
-//
-// Next, override the client interface with the ordering wrapper:
-//
-// vf := func(op clientv3.Op, resp clientv3.OpResponse, prevRev int64) error {
-// return fmt.Errorf("ordering: issued %+v, got %+v, expected rev=%v", op, resp, prevRev)
-// }
-// cli.KV = ordering.NewKV(cli.KV, vf)
-//
-// Now calls using 'cli' will reject order violations with an error.
-//
-package ordering
diff --git a/etcd-fix/client/v3/ordering/kv.go b/etcd-fix/client/v3/ordering/kv.go
deleted file mode 100644
index 7914fc4..0000000
--- a/etcd-fix/client/v3/ordering/kv.go
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package ordering
-
-import (
- "context"
- "sync"
-
- "go.etcd.io/etcd/client/v3"
-)
-
-// kvOrdering ensures that serialized requests do not return
-// get with revisions less than the previous
-// returned revision.
-type kvOrdering struct {
- clientv3.KV
- orderViolationFunc OrderViolationFunc
- prevRev int64
- revMu sync.RWMutex
-}
-
-func NewKV(kv clientv3.KV, orderViolationFunc OrderViolationFunc) *kvOrdering {
- return &kvOrdering{kv, orderViolationFunc, 0, sync.RWMutex{}}
-}
-
-func (kv *kvOrdering) getPrevRev() int64 {
- kv.revMu.RLock()
- defer kv.revMu.RUnlock()
- return kv.prevRev
-}
-
-func (kv *kvOrdering) setPrevRev(currRev int64) {
- kv.revMu.Lock()
- defer kv.revMu.Unlock()
- if currRev > kv.prevRev {
- kv.prevRev = currRev
- }
-}
-
-func (kv *kvOrdering) Get(ctx context.Context, key string, opts ...clientv3.OpOption) (*clientv3.GetResponse, error) {
- // prevRev is stored in a local variable in order to record the prevRev
- // at the beginning of the Get operation, because concurrent
- // access to kvOrdering could change the prevRev field in the
- // middle of the Get operation.
- prevRev := kv.getPrevRev()
- op := clientv3.OpGet(key, opts...)
- for {
- r, err := kv.KV.Do(ctx, op)
- if err != nil {
- return nil, err
- }
- resp := r.Get()
- if resp.Header.Revision == prevRev {
- return resp, nil
- } else if resp.Header.Revision > prevRev {
- kv.setPrevRev(resp.Header.Revision)
- return resp, nil
- }
- err = kv.orderViolationFunc(op, r, prevRev)
- if err != nil {
- return nil, err
- }
- }
-}
-
-func (kv *kvOrdering) Txn(ctx context.Context) clientv3.Txn {
- return &txnOrdering{
- kv.KV.Txn(ctx),
- kv,
- ctx,
- sync.Mutex{},
- []clientv3.Cmp{},
- []clientv3.Op{},
- []clientv3.Op{},
- }
-}
-
-// txnOrdering ensures that serialized requests do not return
-// txn responses with revisions less than the previous
-// returned revision.
-type txnOrdering struct {
- clientv3.Txn
- *kvOrdering
- ctx context.Context
- mu sync.Mutex
- cmps []clientv3.Cmp
- thenOps []clientv3.Op
- elseOps []clientv3.Op
-}
-
-func (txn *txnOrdering) If(cs ...clientv3.Cmp) clientv3.Txn {
- txn.mu.Lock()
- defer txn.mu.Unlock()
- txn.cmps = cs
- txn.Txn.If(cs...)
- return txn
-}
-
-func (txn *txnOrdering) Then(ops ...clientv3.Op) clientv3.Txn {
- txn.mu.Lock()
- defer txn.mu.Unlock()
- txn.thenOps = ops
- txn.Txn.Then(ops...)
- return txn
-}
-
-func (txn *txnOrdering) Else(ops ...clientv3.Op) clientv3.Txn {
- txn.mu.Lock()
- defer txn.mu.Unlock()
- txn.elseOps = ops
- txn.Txn.Else(ops...)
- return txn
-}
-
-func (txn *txnOrdering) Commit() (*clientv3.TxnResponse, error) {
- // prevRev is stored in a local variable in order to record the prevRev
- // at the beginning of the Commit operation, because concurrent
- // access to txnOrdering could change the prevRev field in the
- // middle of the Commit operation.
- prevRev := txn.getPrevRev()
- opTxn := clientv3.OpTxn(txn.cmps, txn.thenOps, txn.elseOps)
- for {
- opResp, err := txn.KV.Do(txn.ctx, opTxn)
- if err != nil {
- return nil, err
- }
- txnResp := opResp.Txn()
- if txnResp.Header.Revision >= prevRev {
- txn.setPrevRev(txnResp.Header.Revision)
- return txnResp, nil
- }
- err = txn.orderViolationFunc(opTxn, opResp, prevRev)
- if err != nil {
- return nil, err
- }
- }
-}
diff --git a/etcd-fix/client/v3/ordering/kv_test.go b/etcd-fix/client/v3/ordering/kv_test.go
deleted file mode 100644
index 9b5c8ab..0000000
--- a/etcd-fix/client/v3/ordering/kv_test.go
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package ordering
-
-import (
- "context"
- gContext "context"
- "sync"
- "testing"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/client/v3"
-)
-
-type mockKV struct {
- clientv3.KV
- response clientv3.OpResponse
-}
-
-func (kv *mockKV) Do(ctx gContext.Context, op clientv3.Op) (clientv3.OpResponse, error) {
- return kv.response, nil
-}
-
-var rangeTests = []struct {
- prevRev int64
- response *clientv3.GetResponse
-}{
- {
- 5,
- &clientv3.GetResponse{
- Header: &pb.ResponseHeader{
- Revision: 5,
- },
- },
- },
- {
- 5,
- &clientv3.GetResponse{
- Header: &pb.ResponseHeader{
- Revision: 4,
- },
- },
- },
- {
- 5,
- &clientv3.GetResponse{
- Header: &pb.ResponseHeader{
- Revision: 6,
- },
- },
- },
-}
-
-func TestKvOrdering(t *testing.T) {
- for i, tt := range rangeTests {
- mKV := &mockKV{clientv3.NewKVFromKVClient(nil, nil), tt.response.OpResponse()}
- kv := &kvOrdering{
- mKV,
- func(r *clientv3.GetResponse) OrderViolationFunc {
- return func(op clientv3.Op, resp clientv3.OpResponse, prevRev int64) error {
- r.Header.Revision++
- return nil
- }
- }(tt.response),
- tt.prevRev,
- sync.RWMutex{},
- }
- res, err := kv.Get(nil, "mockKey")
- if err != nil {
- t.Errorf("#%d: expected response %+v, got error %+v", i, tt.response, err)
- }
- if rev := res.Header.Revision; rev < tt.prevRev {
- t.Errorf("#%d: expected revision %d, got %d", i, tt.prevRev, rev)
- }
- }
-}
-
-var txnTests = []struct {
- prevRev int64
- response *clientv3.TxnResponse
-}{
- {
- 5,
- &clientv3.TxnResponse{
- Header: &pb.ResponseHeader{
- Revision: 5,
- },
- },
- },
- {
- 5,
- &clientv3.TxnResponse{
- Header: &pb.ResponseHeader{
- Revision: 8,
- },
- },
- },
- {
- 5,
- &clientv3.TxnResponse{
- Header: &pb.ResponseHeader{
- Revision: 4,
- },
- },
- },
-}
-
-func TestTxnOrdering(t *testing.T) {
- for i, tt := range txnTests {
- mKV := &mockKV{clientv3.NewKVFromKVClient(nil, nil), tt.response.OpResponse()}
- kv := &kvOrdering{
- mKV,
- func(r *clientv3.TxnResponse) OrderViolationFunc {
- return func(op clientv3.Op, resp clientv3.OpResponse, prevRev int64) error {
- r.Header.Revision++
- return nil
- }
- }(tt.response),
- tt.prevRev,
- sync.RWMutex{},
- }
- txn := &txnOrdering{
- kv.Txn(context.Background()),
- kv,
- context.Background(),
- sync.Mutex{},
- []clientv3.Cmp{},
- []clientv3.Op{},
- []clientv3.Op{},
- }
- res, err := txn.Commit()
- if err != nil {
- t.Errorf("#%d: expected response %+v, got error %+v", i, tt.response, err)
- }
- if rev := res.Header.Revision; rev < tt.prevRev {
- t.Errorf("#%d: expected revision %d, got %d", i, tt.prevRev, rev)
- }
- }
-}
diff --git a/etcd-fix/client/v3/ordering/logger_test.go b/etcd-fix/client/v3/ordering/logger_test.go
deleted file mode 100644
index 8804ddb..0000000
--- a/etcd-fix/client/v3/ordering/logger_test.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package ordering
-
-import (
- "io/ioutil"
-
- "go.etcd.io/etcd/client/v3"
-
- "google.golang.org/grpc/grpclog"
-)
-
-func init() {
- clientv3.SetLogger(grpclog.NewLoggerV2(ioutil.Discard, ioutil.Discard, ioutil.Discard))
-}
diff --git a/etcd-fix/client/v3/ordering/util.go b/etcd-fix/client/v3/ordering/util.go
deleted file mode 100644
index bd9d31f..0000000
--- a/etcd-fix/client/v3/ordering/util.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package ordering
-
-import (
- "errors"
- "sync"
- "time"
-
- "go.etcd.io/etcd/client/v3"
-)
-
-type OrderViolationFunc func(op clientv3.Op, resp clientv3.OpResponse, prevRev int64) error
-
-var ErrNoGreaterRev = errors.New("etcdclient: no cluster members have a revision higher than the previously received revision")
-
-func NewOrderViolationSwitchEndpointClosure(c clientv3.Client) OrderViolationFunc {
- var mu sync.Mutex
- violationCount := 0
- return func(op clientv3.Op, resp clientv3.OpResponse, prevRev int64) error {
- if violationCount > len(c.Endpoints()) {
- return ErrNoGreaterRev
- }
- mu.Lock()
- defer mu.Unlock()
- eps := c.Endpoints()
- // force client to connect to given endpoint by limiting to a single endpoint
- c.SetEndpoints(eps[violationCount%len(eps)])
- // give enough time for operation
- time.Sleep(1 * time.Second)
- // set available endpoints back to all endpoints in to ensure
- // the client has access to all the endpoints.
- c.SetEndpoints(eps...)
- // give enough time for operation
- time.Sleep(1 * time.Second)
- violationCount++
- return nil
- }
-}
diff --git a/etcd-fix/client/v3/retry.go b/etcd-fix/client/v3/retry.go
deleted file mode 100644
index 69ecc63..0000000
--- a/etcd-fix/client/v3/retry.go
+++ /dev/null
@@ -1,306 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
-
- "google.golang.org/grpc"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
-)
-
-type retryPolicy uint8
-
-const (
- repeatable retryPolicy = iota
- nonRepeatable
-)
-
-func (rp retryPolicy) String() string {
- switch rp {
- case repeatable:
- return "repeatable"
- case nonRepeatable:
- return "nonRepeatable"
- default:
- return "UNKNOWN"
- }
-}
-
-// isSafeRetryImmutableRPC returns "true" when an immutable request is safe for retry.
-//
-// immutable requests (e.g. Get) should be retried unless it's
-// an obvious server-side error (e.g. rpctypes.ErrRequestTooLarge).
-//
-// Returning "false" means retry should stop, since client cannot
-// handle itself even with retries.
-func isSafeRetryImmutableRPC(err error) bool {
- eErr := rpctypes.Error(err)
- if serverErr, ok := eErr.(rpctypes.EtcdError); ok && serverErr.Code() != codes.Unavailable {
- // interrupted by non-transient server-side or gRPC-side error
- // client cannot handle itself (e.g. rpctypes.ErrCompacted)
- return false
- }
- // only retry if unavailable
- ev, ok := status.FromError(err)
- if !ok {
- // all errors from RPC is typed "grpc/status.(*statusError)"
- // (ref. https://github.com/grpc/grpc-go/pull/1782)
- //
- // if the error type is not "grpc/status.(*statusError)",
- // it could be from "Dial"
- // TODO: do not retry for now
- // ref. https://github.com/grpc/grpc-go/issues/1581
- return false
- }
- return ev.Code() == codes.Unavailable
-}
-
-// isSafeRetryMutableRPC returns "true" when a mutable request is safe for retry.
-//
-// mutable requests (e.g. Put, Delete, Txn) should only be retried
-// when the status code is codes.Unavailable when initial connection
-// has not been established (no endpoint is up).
-//
-// Returning "false" means retry should stop, otherwise it violates
-// write-at-most-once semantics.
-func isSafeRetryMutableRPC(err error) bool {
- if ev, ok := status.FromError(err); ok && ev.Code() != codes.Unavailable {
- // not safe for mutable RPCs
- // e.g. interrupted by non-transient error that client cannot handle itself,
- // or transient error while the connection has already been established
- return false
- }
- desc := rpctypes.ErrorDesc(err)
- return desc == "there is no address available" || desc == "there is no connection available"
-}
-
-type retryKVClient struct {
- kc pb.KVClient
-}
-
-// RetryKVClient implements a KVClient.
-func RetryKVClient(c *Client) pb.KVClient {
- return &retryKVClient{
- kc: pb.NewKVClient(c.conn),
- }
-}
-func (rkv *retryKVClient) Range(ctx context.Context, in *pb.RangeRequest, opts ...grpc.CallOption) (resp *pb.RangeResponse, err error) {
- return rkv.kc.Range(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rkv *retryKVClient) Put(ctx context.Context, in *pb.PutRequest, opts ...grpc.CallOption) (resp *pb.PutResponse, err error) {
- return rkv.kc.Put(ctx, in, opts...)
-}
-
-func (rkv *retryKVClient) DeleteRange(ctx context.Context, in *pb.DeleteRangeRequest, opts ...grpc.CallOption) (resp *pb.DeleteRangeResponse, err error) {
- return rkv.kc.DeleteRange(ctx, in, opts...)
-}
-
-func (rkv *retryKVClient) Txn(ctx context.Context, in *pb.TxnRequest, opts ...grpc.CallOption) (resp *pb.TxnResponse, err error) {
- return rkv.kc.Txn(ctx, in, opts...)
-}
-
-func (rkv *retryKVClient) Compact(ctx context.Context, in *pb.CompactionRequest, opts ...grpc.CallOption) (resp *pb.CompactionResponse, err error) {
- return rkv.kc.Compact(ctx, in, opts...)
-}
-
-type retryLeaseClient struct {
- lc pb.LeaseClient
-}
-
-// RetryLeaseClient implements a LeaseClient.
-func RetryLeaseClient(c *Client) pb.LeaseClient {
- return &retryLeaseClient{
- lc: pb.NewLeaseClient(c.conn),
- }
-}
-
-func (rlc *retryLeaseClient) LeaseTimeToLive(ctx context.Context, in *pb.LeaseTimeToLiveRequest, opts ...grpc.CallOption) (resp *pb.LeaseTimeToLiveResponse, err error) {
- return rlc.lc.LeaseTimeToLive(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rlc *retryLeaseClient) LeaseLeases(ctx context.Context, in *pb.LeaseLeasesRequest, opts ...grpc.CallOption) (resp *pb.LeaseLeasesResponse, err error) {
- return rlc.lc.LeaseLeases(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rlc *retryLeaseClient) LeaseGrant(ctx context.Context, in *pb.LeaseGrantRequest, opts ...grpc.CallOption) (resp *pb.LeaseGrantResponse, err error) {
- return rlc.lc.LeaseGrant(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rlc *retryLeaseClient) LeaseRevoke(ctx context.Context, in *pb.LeaseRevokeRequest, opts ...grpc.CallOption) (resp *pb.LeaseRevokeResponse, err error) {
- return rlc.lc.LeaseRevoke(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rlc *retryLeaseClient) LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (stream pb.Lease_LeaseKeepAliveClient, err error) {
- return rlc.lc.LeaseKeepAlive(ctx, append(opts, withRetryPolicy(repeatable))...)
-}
-
-type retryClusterClient struct {
- cc pb.ClusterClient
-}
-
-// RetryClusterClient implements a ClusterClient.
-func RetryClusterClient(c *Client) pb.ClusterClient {
- return &retryClusterClient{
- cc: pb.NewClusterClient(c.conn),
- }
-}
-
-func (rcc *retryClusterClient) MemberList(ctx context.Context, in *pb.MemberListRequest, opts ...grpc.CallOption) (resp *pb.MemberListResponse, err error) {
- return rcc.cc.MemberList(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rcc *retryClusterClient) MemberAdd(ctx context.Context, in *pb.MemberAddRequest, opts ...grpc.CallOption) (resp *pb.MemberAddResponse, err error) {
- return rcc.cc.MemberAdd(ctx, in, opts...)
-}
-
-func (rcc *retryClusterClient) MemberRemove(ctx context.Context, in *pb.MemberRemoveRequest, opts ...grpc.CallOption) (resp *pb.MemberRemoveResponse, err error) {
- return rcc.cc.MemberRemove(ctx, in, opts...)
-}
-
-func (rcc *retryClusterClient) MemberUpdate(ctx context.Context, in *pb.MemberUpdateRequest, opts ...grpc.CallOption) (resp *pb.MemberUpdateResponse, err error) {
- return rcc.cc.MemberUpdate(ctx, in, opts...)
-}
-
-func (rcc *retryClusterClient) MemberPromote(ctx context.Context, in *pb.MemberPromoteRequest, opts ...grpc.CallOption) (resp *pb.MemberPromoteResponse, err error) {
- return rcc.cc.MemberPromote(ctx, in, opts...)
-}
-
-type retryMaintenanceClient struct {
- mc pb.MaintenanceClient
-}
-
-// RetryMaintenanceClient implements a Maintenance.
-func RetryMaintenanceClient(c *Client, conn *grpc.ClientConn) pb.MaintenanceClient {
- return &retryMaintenanceClient{
- mc: pb.NewMaintenanceClient(conn),
- }
-}
-
-func (rmc *retryMaintenanceClient) Alarm(ctx context.Context, in *pb.AlarmRequest, opts ...grpc.CallOption) (resp *pb.AlarmResponse, err error) {
- return rmc.mc.Alarm(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rmc *retryMaintenanceClient) Status(ctx context.Context, in *pb.StatusRequest, opts ...grpc.CallOption) (resp *pb.StatusResponse, err error) {
- return rmc.mc.Status(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rmc *retryMaintenanceClient) Hash(ctx context.Context, in *pb.HashRequest, opts ...grpc.CallOption) (resp *pb.HashResponse, err error) {
- return rmc.mc.Hash(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rmc *retryMaintenanceClient) HashKV(ctx context.Context, in *pb.HashKVRequest, opts ...grpc.CallOption) (resp *pb.HashKVResponse, err error) {
- return rmc.mc.HashKV(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rmc *retryMaintenanceClient) Snapshot(ctx context.Context, in *pb.SnapshotRequest, opts ...grpc.CallOption) (stream pb.Maintenance_SnapshotClient, err error) {
- return rmc.mc.Snapshot(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rmc *retryMaintenanceClient) MoveLeader(ctx context.Context, in *pb.MoveLeaderRequest, opts ...grpc.CallOption) (resp *pb.MoveLeaderResponse, err error) {
- return rmc.mc.MoveLeader(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rmc *retryMaintenanceClient) Defragment(ctx context.Context, in *pb.DefragmentRequest, opts ...grpc.CallOption) (resp *pb.DefragmentResponse, err error) {
- return rmc.mc.Defragment(ctx, in, opts...)
-}
-
-func (rmc *retryMaintenanceClient) Downgrade(ctx context.Context, in *pb.DowngradeRequest, opts ...grpc.CallOption) (resp *pb.DowngradeResponse, err error) {
- return rmc.mc.Downgrade(ctx, in, opts...)
-}
-
-type retryAuthClient struct {
- ac pb.AuthClient
-}
-
-// RetryAuthClient implements a AuthClient.
-func RetryAuthClient(c *Client) pb.AuthClient {
- return &retryAuthClient{
- ac: pb.NewAuthClient(c.conn),
- }
-}
-
-func (rac *retryAuthClient) UserList(ctx context.Context, in *pb.AuthUserListRequest, opts ...grpc.CallOption) (resp *pb.AuthUserListResponse, err error) {
- return rac.ac.UserList(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rac *retryAuthClient) UserGet(ctx context.Context, in *pb.AuthUserGetRequest, opts ...grpc.CallOption) (resp *pb.AuthUserGetResponse, err error) {
- return rac.ac.UserGet(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rac *retryAuthClient) RoleGet(ctx context.Context, in *pb.AuthRoleGetRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleGetResponse, err error) {
- return rac.ac.RoleGet(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rac *retryAuthClient) RoleList(ctx context.Context, in *pb.AuthRoleListRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleListResponse, err error) {
- return rac.ac.RoleList(ctx, in, append(opts, withRetryPolicy(repeatable))...)
-}
-
-func (rac *retryAuthClient) AuthEnable(ctx context.Context, in *pb.AuthEnableRequest, opts ...grpc.CallOption) (resp *pb.AuthEnableResponse, err error) {
- return rac.ac.AuthEnable(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) AuthDisable(ctx context.Context, in *pb.AuthDisableRequest, opts ...grpc.CallOption) (resp *pb.AuthDisableResponse, err error) {
- return rac.ac.AuthDisable(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) AuthStatus(ctx context.Context, in *pb.AuthStatusRequest, opts ...grpc.CallOption) (resp *pb.AuthStatusResponse, err error) {
- return rac.ac.AuthStatus(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) UserAdd(ctx context.Context, in *pb.AuthUserAddRequest, opts ...grpc.CallOption) (resp *pb.AuthUserAddResponse, err error) {
- return rac.ac.UserAdd(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) UserDelete(ctx context.Context, in *pb.AuthUserDeleteRequest, opts ...grpc.CallOption) (resp *pb.AuthUserDeleteResponse, err error) {
- return rac.ac.UserDelete(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) UserChangePassword(ctx context.Context, in *pb.AuthUserChangePasswordRequest, opts ...grpc.CallOption) (resp *pb.AuthUserChangePasswordResponse, err error) {
- return rac.ac.UserChangePassword(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) UserGrantRole(ctx context.Context, in *pb.AuthUserGrantRoleRequest, opts ...grpc.CallOption) (resp *pb.AuthUserGrantRoleResponse, err error) {
- return rac.ac.UserGrantRole(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) UserRevokeRole(ctx context.Context, in *pb.AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (resp *pb.AuthUserRevokeRoleResponse, err error) {
- return rac.ac.UserRevokeRole(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) RoleAdd(ctx context.Context, in *pb.AuthRoleAddRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleAddResponse, err error) {
- return rac.ac.RoleAdd(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) RoleDelete(ctx context.Context, in *pb.AuthRoleDeleteRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleDeleteResponse, err error) {
- return rac.ac.RoleDelete(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) RoleGrantPermission(ctx context.Context, in *pb.AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleGrantPermissionResponse, err error) {
- return rac.ac.RoleGrantPermission(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) RoleRevokePermission(ctx context.Context, in *pb.AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleRevokePermissionResponse, err error) {
- return rac.ac.RoleRevokePermission(ctx, in, opts...)
-}
-
-func (rac *retryAuthClient) Authenticate(ctx context.Context, in *pb.AuthenticateRequest, opts ...grpc.CallOption) (resp *pb.AuthenticateResponse, err error) {
- return rac.ac.Authenticate(ctx, in, opts...)
-}
diff --git a/etcd-fix/client/v3/retry_interceptor.go b/etcd-fix/client/v3/retry_interceptor.go
deleted file mode 100644
index ff9ad60..0000000
--- a/etcd-fix/client/v3/retry_interceptor.go
+++ /dev/null
@@ -1,402 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Based on github.com/grpc-ecosystem/go-grpc-middleware/retry, but modified to support the more
-// fine grained error checking required by write-at-most-once retry semantics of etcd.
-
-package clientv3
-
-import (
- "context"
- "io"
- "sync"
- "time"
-
- "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
- "go.uber.org/zap"
- "google.golang.org/grpc"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/status"
-)
-
-// unaryClientInterceptor returns a new retrying unary client interceptor.
-//
-// The default configuration of the interceptor is to not retry *at all*. This behaviour can be
-// changed through options (e.g. WithMax) on creation of the interceptor or on call (through grpc.CallOptions).
-func (c *Client) unaryClientInterceptor(logger *zap.Logger, optFuncs ...retryOption) grpc.UnaryClientInterceptor {
- intOpts := reuseOrNewWithCallOptions(defaultOptions, optFuncs)
- return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
- ctx = withVersion(ctx)
- grpcOpts, retryOpts := filterCallOptions(opts)
- callOpts := reuseOrNewWithCallOptions(intOpts, retryOpts)
- // short circuit for simplicity, and avoiding allocations.
- if callOpts.max == 0 {
- return invoker(ctx, method, req, reply, cc, grpcOpts...)
- }
- var lastErr error
- for attempt := uint(0); attempt < callOpts.max; attempt++ {
- if err := waitRetryBackoff(ctx, attempt, callOpts); err != nil {
- return err
- }
- logger.Debug(
- "retrying of unary invoker",
- zap.String("target", cc.Target()),
- zap.Uint("attempt", attempt),
- )
- lastErr = invoker(ctx, method, req, reply, cc, grpcOpts...)
- if lastErr == nil {
- return nil
- }
- logger.Warn(
- "retrying of unary invoker failed",
- zap.String("target", cc.Target()),
- zap.Uint("attempt", attempt),
- zap.Error(lastErr),
- )
- if isContextError(lastErr) {
- if ctx.Err() != nil {
- // its the context deadline or cancellation.
- return lastErr
- }
- // its the callCtx deadline or cancellation, in which case try again.
- continue
- }
- if callOpts.retryAuth && rpctypes.Error(lastErr) == rpctypes.ErrInvalidAuthToken {
- gterr := c.getToken(ctx)
- if gterr != nil {
- logger.Warn(
- "retrying of unary invoker failed to fetch new auth token",
- zap.String("target", cc.Target()),
- zap.Error(gterr),
- )
- return gterr // lastErr must be invalid auth token
- }
- continue
- }
- if !isSafeRetry(c.lg, lastErr, callOpts) {
- return lastErr
- }
- }
- return lastErr
- }
-}
-
-// streamClientInterceptor returns a new retrying stream client interceptor for server side streaming calls.
-//
-// The default configuration of the interceptor is to not retry *at all*. This behaviour can be
-// changed through options (e.g. WithMax) on creation of the interceptor or on call (through grpc.CallOptions).
-//
-// Retry logic is available *only for ServerStreams*, i.e. 1:n streams, as the internal logic needs
-// to buffer the messages sent by the client. If retry is enabled on any other streams (ClientStreams,
-// BidiStreams), the retry interceptor will fail the call.
-func (c *Client) streamClientInterceptor(logger *zap.Logger, optFuncs ...retryOption) grpc.StreamClientInterceptor {
- intOpts := reuseOrNewWithCallOptions(defaultOptions, optFuncs)
- return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) {
- ctx = withVersion(ctx)
- // getToken automatically
- // TODO(cfc4n): keep this code block, remove codes about getToken in client.go after pr #12165 merged.
- if c.authTokenBundle != nil {
- // equal to c.Username != "" && c.Password != ""
- err := c.getToken(ctx)
- if err != nil && rpctypes.Error(err) != rpctypes.ErrAuthNotEnabled {
- logger.Error("clientv3/retry_interceptor: getToken failed", zap.Error(err))
- return nil, err
- }
- }
- grpcOpts, retryOpts := filterCallOptions(opts)
- callOpts := reuseOrNewWithCallOptions(intOpts, retryOpts)
- // short circuit for simplicity, and avoiding allocations.
- if callOpts.max == 0 {
- return streamer(ctx, desc, cc, method, grpcOpts...)
- }
- if desc.ClientStreams {
- return nil, status.Errorf(codes.Unimplemented, "clientv3/retry_interceptor: cannot retry on ClientStreams, set Disable()")
- }
- newStreamer, err := streamer(ctx, desc, cc, method, grpcOpts...)
- if err != nil {
- logger.Error("streamer failed to create ClientStream", zap.Error(err))
- return nil, err // TODO(mwitkow): Maybe dial and transport errors should be retriable?
- }
- retryingStreamer := &serverStreamingRetryingStream{
- client: c,
- ClientStream: newStreamer,
- callOpts: callOpts,
- ctx: ctx,
- streamerCall: func(ctx context.Context) (grpc.ClientStream, error) {
- return streamer(ctx, desc, cc, method, grpcOpts...)
- },
- }
- return retryingStreamer, nil
- }
-}
-
-// type serverStreamingRetryingStream is the implementation of grpc.ClientStream that acts as a
-// proxy to the underlying call. If any of the RecvMsg() calls fail, it will try to reestablish
-// a new ClientStream according to the retry policy.
-type serverStreamingRetryingStream struct {
- grpc.ClientStream
- client *Client
- bufferedSends []interface{} // single message that the client can sen
- receivedGood bool // indicates whether any prior receives were successful
- wasClosedSend bool // indicates that CloseSend was closed
- ctx context.Context
- callOpts *options
- streamerCall func(ctx context.Context) (grpc.ClientStream, error)
- mu sync.RWMutex
-}
-
-func (s *serverStreamingRetryingStream) setStream(clientStream grpc.ClientStream) {
- s.mu.Lock()
- s.ClientStream = clientStream
- s.mu.Unlock()
-}
-
-func (s *serverStreamingRetryingStream) getStream() grpc.ClientStream {
- s.mu.RLock()
- defer s.mu.RUnlock()
- return s.ClientStream
-}
-
-func (s *serverStreamingRetryingStream) SendMsg(m interface{}) error {
- s.mu.Lock()
- s.bufferedSends = append(s.bufferedSends, m)
- s.mu.Unlock()
- return s.getStream().SendMsg(m)
-}
-
-func (s *serverStreamingRetryingStream) CloseSend() error {
- s.mu.Lock()
- s.wasClosedSend = true
- s.mu.Unlock()
- return s.getStream().CloseSend()
-}
-
-func (s *serverStreamingRetryingStream) Header() (metadata.MD, error) {
- return s.getStream().Header()
-}
-
-func (s *serverStreamingRetryingStream) Trailer() metadata.MD {
- return s.getStream().Trailer()
-}
-
-func (s *serverStreamingRetryingStream) RecvMsg(m interface{}) error {
- attemptRetry, lastErr := s.receiveMsgAndIndicateRetry(m)
- if !attemptRetry {
- return lastErr // success or hard failure
- }
-
- // We start off from attempt 1, because zeroth was already made on normal SendMsg().
- for attempt := uint(1); attempt < s.callOpts.max; attempt++ {
- if err := waitRetryBackoff(s.ctx, attempt, s.callOpts); err != nil {
- return err
- }
- newStream, err := s.reestablishStreamAndResendBuffer(s.ctx)
- if err != nil {
- s.client.lg.Error("failed reestablishStreamAndResendBuffer", zap.Error(err))
- return err // TODO(mwitkow): Maybe dial and transport errors should be retriable?
- }
- s.setStream(newStream)
-
- s.client.lg.Warn("retrying RecvMsg", zap.Error(lastErr))
- attemptRetry, lastErr = s.receiveMsgAndIndicateRetry(m)
- if !attemptRetry {
- return lastErr
- }
- }
- return lastErr
-}
-
-func (s *serverStreamingRetryingStream) receiveMsgAndIndicateRetry(m interface{}) (bool, error) {
- s.mu.RLock()
- wasGood := s.receivedGood
- s.mu.RUnlock()
- err := s.getStream().RecvMsg(m)
- if err == nil || err == io.EOF {
- s.mu.Lock()
- s.receivedGood = true
- s.mu.Unlock()
- return false, err
- } else if wasGood {
- // previous RecvMsg in the stream succeeded, no retry logic should interfere
- return false, err
- }
- if isContextError(err) {
- if s.ctx.Err() != nil {
- return false, err
- }
- // its the callCtx deadline or cancellation, in which case try again.
- return true, err
- }
- if s.callOpts.retryAuth && rpctypes.Error(err) == rpctypes.ErrInvalidAuthToken {
- gterr := s.client.getToken(s.ctx)
- if gterr != nil {
- s.client.lg.Warn("retry failed to fetch new auth token", zap.Error(gterr))
- return false, err // return the original error for simplicity
- }
- return true, err
-
- }
- return isSafeRetry(s.client.lg, err, s.callOpts), err
-}
-
-func (s *serverStreamingRetryingStream) reestablishStreamAndResendBuffer(callCtx context.Context) (grpc.ClientStream, error) {
- s.mu.RLock()
- bufferedSends := s.bufferedSends
- s.mu.RUnlock()
- newStream, err := s.streamerCall(callCtx)
- if err != nil {
- return nil, err
- }
- for _, msg := range bufferedSends {
- if err := newStream.SendMsg(msg); err != nil {
- return nil, err
- }
- }
- if err := newStream.CloseSend(); err != nil {
- return nil, err
- }
- return newStream, nil
-}
-
-func waitRetryBackoff(ctx context.Context, attempt uint, callOpts *options) error {
- waitTime := time.Duration(0)
- if attempt > 0 {
- waitTime = callOpts.backoffFunc(attempt)
- }
- if waitTime > 0 {
- timer := time.NewTimer(waitTime)
- select {
- case <-ctx.Done():
- timer.Stop()
- return contextErrToGrpcErr(ctx.Err())
- case <-timer.C:
- }
- }
- return nil
-}
-
-// isSafeRetry returns "true", if request is safe for retry with the given error.
-func isSafeRetry(lg *zap.Logger, err error, callOpts *options) bool {
- if isContextError(err) {
- return false
- }
- switch callOpts.retryPolicy {
- case repeatable:
- return isSafeRetryImmutableRPC(err)
- case nonRepeatable:
- return isSafeRetryMutableRPC(err)
- default:
- lg.Warn("unrecognized retry policy", zap.String("retryPolicy", callOpts.retryPolicy.String()))
- return false
- }
-}
-
-func isContextError(err error) bool {
- return grpc.Code(err) == codes.DeadlineExceeded || grpc.Code(err) == codes.Canceled
-}
-
-func contextErrToGrpcErr(err error) error {
- switch err {
- case context.DeadlineExceeded:
- return status.Errorf(codes.DeadlineExceeded, err.Error())
- case context.Canceled:
- return status.Errorf(codes.Canceled, err.Error())
- default:
- return status.Errorf(codes.Unknown, err.Error())
- }
-}
-
-var (
- defaultOptions = &options{
- retryPolicy: nonRepeatable,
- max: 0, // disable
- backoffFunc: backoffLinearWithJitter(50*time.Millisecond /*jitter*/, 0.10),
- retryAuth: true,
- }
-)
-
-// backoffFunc denotes a family of functions that control the backoff duration between call retries.
-//
-// They are called with an identifier of the attempt, and should return a time the system client should
-// hold off for. If the time returned is longer than the `context.Context.Deadline` of the request
-// the deadline of the request takes precedence and the wait will be interrupted before proceeding
-// with the next iteration.
-type backoffFunc func(attempt uint) time.Duration
-
-// withRetryPolicy sets the retry policy of this call.
-func withRetryPolicy(rp retryPolicy) retryOption {
- return retryOption{applyFunc: func(o *options) {
- o.retryPolicy = rp
- }}
-}
-
-// withMax sets the maximum number of retries on this call, or this interceptor.
-func withMax(maxRetries uint) retryOption {
- return retryOption{applyFunc: func(o *options) {
- o.max = maxRetries
- }}
-}
-
-// WithBackoff sets the `BackoffFunc `used to control time between retries.
-func withBackoff(bf backoffFunc) retryOption {
- return retryOption{applyFunc: func(o *options) {
- o.backoffFunc = bf
- }}
-}
-
-type options struct {
- retryPolicy retryPolicy
- max uint
- backoffFunc backoffFunc
- retryAuth bool
-}
-
-// retryOption is a grpc.CallOption that is local to clientv3's retry interceptor.
-type retryOption struct {
- grpc.EmptyCallOption // make sure we implement private after() and before() fields so we don't panic.
- applyFunc func(opt *options)
-}
-
-func reuseOrNewWithCallOptions(opt *options, retryOptions []retryOption) *options {
- if len(retryOptions) == 0 {
- return opt
- }
- optCopy := &options{}
- *optCopy = *opt
- for _, f := range retryOptions {
- f.applyFunc(optCopy)
- }
- return optCopy
-}
-
-func filterCallOptions(callOptions []grpc.CallOption) (grpcOptions []grpc.CallOption, retryOptions []retryOption) {
- for _, opt := range callOptions {
- if co, ok := opt.(retryOption); ok {
- retryOptions = append(retryOptions, co)
- } else {
- grpcOptions = append(grpcOptions, opt)
- }
- }
- return grpcOptions, retryOptions
-}
-
-// BackoffLinearWithJitter waits a set period of time, allowing for jitter (fractional adjustment).
-//
-// For example waitBetween=1s and jitter=0.10 can generate waits between 900ms and 1100ms.
-func backoffLinearWithJitter(waitBetween time.Duration, jitterFraction float64) backoffFunc {
- return func(attempt uint) time.Duration {
- return jitterUp(waitBetween, jitterFraction)
- }
-}
diff --git a/etcd-fix/client/v3/snapshot/doc.go b/etcd-fix/client/v3/snapshot/doc.go
deleted file mode 100644
index 1c761be..0000000
--- a/etcd-fix/client/v3/snapshot/doc.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package snapshot implements utilities around etcd snapshot.
-package snapshot
diff --git a/etcd-fix/client/v3/snapshot/v3_snapshot.go b/etcd-fix/client/v3/snapshot/v3_snapshot.go
deleted file mode 100644
index 51139b5..0000000
--- a/etcd-fix/client/v3/snapshot/v3_snapshot.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package snapshot
-
-import (
- "context"
- "crypto/sha256"
- "fmt"
- "io"
- "os"
- "time"
-
- "github.com/dustin/go-humanize"
- "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/pkg/v3/fileutil"
- "go.uber.org/zap"
-)
-
-// hasChecksum returns "true" if the file size "n"
-// has appended sha256 hash digest.
-func hasChecksum(n int64) bool {
- // 512 is chosen because it's a minimum disk sector size
- // smaller than (and multiplies to) OS page size in most systems
- return (n % 512) == sha256.Size
-}
-
-// Save fetches snapshot from remote etcd server and saves data
-// to target path. If the context "ctx" is canceled or timed out,
-// snapshot save stream will error out (e.g. context.Canceled,
-// context.DeadlineExceeded). Make sure to specify only one endpoint
-// in client configuration. Snapshot API must be requested to a
-// selected node, and saved snapshot is the point-in-time state of
-// the selected node.
-func Save(ctx context.Context, lg *zap.Logger, cfg clientv3.Config, dbPath string) error {
- if lg == nil {
- lg = zap.NewExample()
- }
- if len(cfg.Endpoints) != 1 {
- return fmt.Errorf("snapshot must be requested to one selected node, not multiple %v", cfg.Endpoints)
- }
- cli, err := clientv3.New(cfg)
- if err != nil {
- return err
- }
- defer cli.Close()
-
- partpath := dbPath + ".part"
- defer os.RemoveAll(partpath)
-
- var f *os.File
- f, err = os.OpenFile(partpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, fileutil.PrivateFileMode)
- if err != nil {
- return fmt.Errorf("could not open %s (%v)", partpath, err)
- }
- lg.Info("created temporary db file", zap.String("path", partpath))
-
- now := time.Now()
- var rd io.ReadCloser
- rd, err = cli.Snapshot(ctx)
- if err != nil {
- return err
- }
- lg.Info("fetching snapshot", zap.String("endpoint", cfg.Endpoints[0]))
- var size int64
- size, err = io.Copy(f, rd)
- if err != nil {
- return err
- }
- if !hasChecksum(size) {
- return fmt.Errorf("sha256 checksum not found [bytes: %d]", size)
- }
- if err = fileutil.Fsync(f); err != nil {
- return err
- }
- if err = f.Close(); err != nil {
- return err
- }
- lg.Info("fetched snapshot",
- zap.String("endpoint", cfg.Endpoints[0]),
- zap.String("size", humanize.Bytes(uint64(size))),
- zap.String("took", humanize.Time(now)),
- )
-
- if err = os.Rename(partpath, dbPath); err != nil {
- return fmt.Errorf("could not rename %s to %s (%v)", partpath, dbPath, err)
- }
- lg.Info("saved", zap.String("path", dbPath))
- return nil
-}
diff --git a/etcd-fix/client/v3/sort.go b/etcd-fix/client/v3/sort.go
deleted file mode 100644
index 2bb9d9a..0000000
--- a/etcd-fix/client/v3/sort.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-type SortTarget int
-type SortOrder int
-
-const (
- SortNone SortOrder = iota
- SortAscend
- SortDescend
-)
-
-const (
- SortByKey SortTarget = iota
- SortByVersion
- SortByCreateRevision
- SortByModRevision
- SortByValue
-)
-
-type SortOption struct {
- Target SortTarget
- Order SortOrder
-}
diff --git a/etcd-fix/client/v3/txn.go b/etcd-fix/client/v3/txn.go
deleted file mode 100644
index 22301fb..0000000
--- a/etcd-fix/client/v3/txn.go
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "sync"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
-
- "google.golang.org/grpc"
-)
-
-// Txn is the interface that wraps mini-transactions.
-//
-// Txn(context.TODO()).If(
-// Compare(Value(k1), ">", v1),
-// Compare(Version(k1), "=", 2)
-// ).Then(
-// OpPut(k2,v2), OpPut(k3,v3)
-// ).Else(
-// OpPut(k4,v4), OpPut(k5,v5)
-// ).Commit()
-//
-type Txn interface {
- // If takes a list of comparison. If all comparisons passed in succeed,
- // the operations passed into Then() will be executed. Or the operations
- // passed into Else() will be executed.
- If(cs ...Cmp) Txn
-
- // Then takes a list of operations. The Ops list will be executed, if the
- // comparisons passed in If() succeed.
- Then(ops ...Op) Txn
-
- // Else takes a list of operations. The Ops list will be executed, if the
- // comparisons passed in If() fail.
- Else(ops ...Op) Txn
-
- // Commit tries to commit the transaction.
- Commit() (*TxnResponse, error)
-}
-
-type txn struct {
- kv *kv
- ctx context.Context
-
- mu sync.Mutex
- cif bool
- cthen bool
- celse bool
-
- isWrite bool
-
- cmps []*pb.Compare
-
- sus []*pb.RequestOp
- fas []*pb.RequestOp
-
- callOpts []grpc.CallOption
-}
-
-func (txn *txn) If(cs ...Cmp) Txn {
- txn.mu.Lock()
- defer txn.mu.Unlock()
-
- if txn.cif {
- panic("cannot call If twice!")
- }
-
- if txn.cthen {
- panic("cannot call If after Then!")
- }
-
- if txn.celse {
- panic("cannot call If after Else!")
- }
-
- txn.cif = true
-
- for i := range cs {
- txn.cmps = append(txn.cmps, (*pb.Compare)(&cs[i]))
- }
-
- return txn
-}
-
-func (txn *txn) Then(ops ...Op) Txn {
- txn.mu.Lock()
- defer txn.mu.Unlock()
-
- if txn.cthen {
- panic("cannot call Then twice!")
- }
- if txn.celse {
- panic("cannot call Then after Else!")
- }
-
- txn.cthen = true
-
- for _, op := range ops {
- txn.isWrite = txn.isWrite || op.isWrite()
- txn.sus = append(txn.sus, op.toRequestOp())
- }
-
- return txn
-}
-
-func (txn *txn) Else(ops ...Op) Txn {
- txn.mu.Lock()
- defer txn.mu.Unlock()
-
- if txn.celse {
- panic("cannot call Else twice!")
- }
-
- txn.celse = true
-
- for _, op := range ops {
- txn.isWrite = txn.isWrite || op.isWrite()
- txn.fas = append(txn.fas, op.toRequestOp())
- }
-
- return txn
-}
-
-func (txn *txn) Commit() (*TxnResponse, error) {
- txn.mu.Lock()
- defer txn.mu.Unlock()
-
- r := &pb.TxnRequest{Compare: txn.cmps, Success: txn.sus, Failure: txn.fas}
-
- var resp *pb.TxnResponse
- var err error
- resp, err = txn.kv.remote.Txn(txn.ctx, r, txn.callOpts...)
- if err != nil {
- return nil, toErr(txn.ctx, err)
- }
- return (*TxnResponse)(resp), nil
-}
diff --git a/etcd-fix/client/v3/txn_test.go b/etcd-fix/client/v3/txn_test.go
deleted file mode 100644
index da762fa..0000000
--- a/etcd-fix/client/v3/txn_test.go
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "testing"
- "time"
-
- "go.etcd.io/etcd/pkg/v3/testutil"
-)
-
-func TestTxnPanics(t *testing.T) {
- defer testutil.AfterTest(t)
-
- kv := &kv{}
-
- errc := make(chan string, 1)
- df := func() {
- if s := recover(); s != nil {
- errc <- s.(string)
- }
- }
-
- cmp := Compare(CreateRevision("foo"), "=", 0)
- op := OpPut("foo", "bar")
-
- tests := []struct {
- f func()
-
- err string
- }{
- {
- f: func() {
- defer df()
- kv.Txn(nil).If(cmp).If(cmp)
- },
-
- err: "cannot call If twice!",
- },
- {
- f: func() {
- defer df()
- kv.Txn(nil).Then(op).If(cmp)
- },
-
- err: "cannot call If after Then!",
- },
- {
- f: func() {
- defer df()
- kv.Txn(nil).Else(op).If(cmp)
- },
-
- err: "cannot call If after Else!",
- },
- {
- f: func() {
- defer df()
- kv.Txn(nil).Then(op).Then(op)
- },
-
- err: "cannot call Then twice!",
- },
- {
- f: func() {
- defer df()
- kv.Txn(nil).Else(op).Then(op)
- },
-
- err: "cannot call Then after Else!",
- },
- {
- f: func() {
- defer df()
- kv.Txn(nil).Else(op).Else(op)
- },
-
- err: "cannot call Else twice!",
- },
- }
-
- for i, tt := range tests {
- go tt.f()
- select {
- case err := <-errc:
- if err != tt.err {
- t.Errorf("#%d: got %s, wanted %s", i, err, tt.err)
- }
- case <-time.After(time.Second):
- t.Errorf("#%d: did not panic, wanted panic %s", i, tt.err)
- }
- }
-}
diff --git a/etcd-fix/client/v3/utils.go b/etcd-fix/client/v3/utils.go
deleted file mode 100644
index b998c41..0000000
--- a/etcd-fix/client/v3/utils.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2018 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "math/rand"
- "reflect"
- "runtime"
- "strings"
- "time"
-)
-
-// jitterUp adds random jitter to the duration.
-//
-// This adds or subtracts time from the duration within a given jitter fraction.
-// For example for 10s and jitter 0.1, it will return a time within [9s, 11s])
-//
-// Reference: https://godoc.org/github.com/grpc-ecosystem/go-grpc-middleware/util/backoffutils
-func jitterUp(duration time.Duration, jitter float64) time.Duration {
- multiplier := jitter * (rand.Float64()*2 - 1)
- return time.Duration(float64(duration) * (1 + multiplier))
-}
-
-// Check if the provided function is being called in the op options.
-func isOpFuncCalled(op string, opts []OpOption) bool {
- for _, opt := range opts {
- v := reflect.ValueOf(opt)
- if v.Kind() == reflect.Func {
- if opFunc := runtime.FuncForPC(v.Pointer()); opFunc != nil {
- if strings.Contains(opFunc.Name(), op) {
- return true
- }
- }
- }
- }
- return false
-}
diff --git a/etcd-fix/client/v3/watch.go b/etcd-fix/client/v3/watch.go
deleted file mode 100644
index 73b6553..0000000
--- a/etcd-fix/client/v3/watch.go
+++ /dev/null
@@ -1,1026 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "context"
- "errors"
- "fmt"
- "sync"
- "time"
-
- pb "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/api/v3/mvccpb"
- v3rpc "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
-
- "go.uber.org/zap"
- "google.golang.org/grpc"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/status"
-)
-
-const (
- EventTypeDelete = mvccpb.DELETE
- EventTypePut = mvccpb.PUT
-
- closeSendErrTimeout = 250 * time.Millisecond
-)
-
-type Event mvccpb.Event
-
-type WatchChan <-chan WatchResponse
-
-type Watcher interface {
- // Watch watches on a key or prefix. The watched events will be returned
- // through the returned channel. If revisions waiting to be sent over the
- // watch are compacted, then the watch will be canceled by the server, the
- // client will post a compacted error watch response, and the channel will close.
- // If the requested revision is 0 or unspecified, the returned channel will
- // return watch events that happen after the server receives the watch request.
- // If the context "ctx" is canceled or timed out, returned "WatchChan" is closed,
- // and "WatchResponse" from this closed channel has zero events and nil "Err()".
- // The context "ctx" MUST be canceled, as soon as watcher is no longer being used,
- // to release the associated resources.
- //
- // If the context is "context.Background/TODO", returned "WatchChan" will
- // not be closed and block until event is triggered, except when server
- // returns a non-recoverable error (e.g. ErrCompacted).
- // For example, when context passed with "WithRequireLeader" and the
- // connected server has no leader (e.g. due to network partition),
- // error "etcdserver: no leader" (ErrNoLeader) will be returned,
- // and then "WatchChan" is closed with non-nil "Err()".
- // In order to prevent a watch stream being stuck in a partitioned node,
- // make sure to wrap context with "WithRequireLeader".
- //
- // Otherwise, as long as the context has not been canceled or timed out,
- // watch will retry on other recoverable errors forever until reconnected.
- //
- // TODO: explicitly set context error in the last "WatchResponse" message and close channel?
- // Currently, client contexts are overwritten with "valCtx" that never closes.
- // TODO(v3.4): configure watch retry policy, limit maximum retry number
- // (see https://github.com/etcd-io/etcd/issues/8980)
- Watch(ctx context.Context, key string, opts ...OpOption) WatchChan
-
- // RequestProgress requests a progress notify response be sent in all watch channels.
- RequestProgress(ctx context.Context) error
-
- // Close closes the watcher and cancels all watch requests.
- Close() error
-}
-
-type WatchResponse struct {
- Header pb.ResponseHeader
- Events []*Event
-
- // CompactRevision is the minimum revision the watcher may receive.
- CompactRevision int64
-
- // Canceled is used to indicate watch failure.
- // If the watch failed and the stream was about to close, before the channel is closed,
- // the channel sends a final response that has Canceled set to true with a non-nil Err().
- Canceled bool
-
- // Created is used to indicate the creation of the watcher.
- Created bool
-
- closeErr error
-
- // cancelReason is a reason of canceling watch
- cancelReason string
-}
-
-// IsCreate returns true if the event tells that the key is newly created.
-func (e *Event) IsCreate() bool {
- return e.Type == EventTypePut && e.Kv.CreateRevision == e.Kv.ModRevision
-}
-
-// IsModify returns true if the event tells that a new value is put on existing key.
-func (e *Event) IsModify() bool {
- return e.Type == EventTypePut && e.Kv.CreateRevision != e.Kv.ModRevision
-}
-
-// Err is the error value if this WatchResponse holds an error.
-func (wr *WatchResponse) Err() error {
- switch {
- case wr.closeErr != nil:
- return v3rpc.Error(wr.closeErr)
- case wr.CompactRevision != 0:
- return v3rpc.ErrCompacted
- case wr.Canceled:
- if len(wr.cancelReason) != 0 {
- return v3rpc.Error(status.Error(codes.FailedPrecondition, wr.cancelReason))
- }
- return v3rpc.ErrFutureRev
- }
- return nil
-}
-
-// IsProgressNotify returns true if the WatchResponse is progress notification.
-func (wr *WatchResponse) IsProgressNotify() bool {
- return len(wr.Events) == 0 && !wr.Canceled && !wr.Created && wr.CompactRevision == 0 && wr.Header.Revision != 0
-}
-
-// watcher implements the Watcher interface
-type watcher struct {
- remote pb.WatchClient
- callOpts []grpc.CallOption
-
- // mu protects the grpc streams map
- mu sync.Mutex
-
- // streams holds all the active grpc streams keyed by ctx value.
- streams map[string]*watchGrpcStream
- lg *zap.Logger
-}
-
-// watchGrpcStream tracks all watch resources attached to a single grpc stream.
-type watchGrpcStream struct {
- owner *watcher
- remote pb.WatchClient
- callOpts []grpc.CallOption
-
- // ctx controls internal remote.Watch requests
- ctx context.Context
- // ctxKey is the key used when looking up this stream's context
- ctxKey string
- cancel context.CancelFunc
-
- // substreams holds all active watchers on this grpc stream
- substreams map[int64]*watcherStream
- // resuming holds all resuming watchers on this grpc stream
- resuming []*watcherStream
-
- // reqc sends a watch request from Watch() to the main goroutine
- reqc chan watchStreamRequest
- // respc receives data from the watch client
- respc chan *pb.WatchResponse
- // donec closes to broadcast shutdown
- donec chan struct{}
- // errc transmits errors from grpc Recv to the watch stream reconnect logic
- errc chan error
- // closingc gets the watcherStream of closing watchers
- closingc chan *watcherStream
- // wg is Done when all substream goroutines have exited
- wg sync.WaitGroup
-
- // resumec closes to signal that all substreams should begin resuming
- resumec chan struct{}
- // closeErr is the error that closed the watch stream
- closeErr error
-
- lg *zap.Logger
-}
-
-// watchStreamRequest is a union of the supported watch request operation types
-type watchStreamRequest interface {
- toPB() *pb.WatchRequest
-}
-
-// watchRequest is issued by the subscriber to start a new watcher
-type watchRequest struct {
- ctx context.Context
- key string
- end string
- rev int64
-
- // send created notification event if this field is true
- createdNotify bool
- // progressNotify is for progress updates
- progressNotify bool
- // fragmentation should be disabled by default
- // if true, split watch events when total exceeds
- // "--max-request-bytes" flag value + 512-byte
- fragment bool
-
- // filters is the list of events to filter out
- filters []pb.WatchCreateRequest_FilterType
- // get the previous key-value pair before the event happens
- prevKV bool
- // retc receives a chan WatchResponse once the watcher is established
- retc chan chan WatchResponse
-}
-
-// progressRequest is issued by the subscriber to request watch progress
-type progressRequest struct {
-}
-
-// watcherStream represents a registered watcher
-type watcherStream struct {
- // initReq is the request that initiated this request
- initReq watchRequest
-
- // outc publishes watch responses to subscriber
- outc chan WatchResponse
- // recvc buffers watch responses before publishing
- recvc chan *WatchResponse
- // donec closes when the watcherStream goroutine stops.
- donec chan struct{}
- // closing is set to true when stream should be scheduled to shutdown.
- closing bool
- // id is the registered watch id on the grpc stream
- id int64
-
- // buf holds all events received from etcd but not yet consumed by the client
- buf []*WatchResponse
-}
-
-func NewWatcher(c *Client) Watcher {
- return NewWatchFromWatchClient(pb.NewWatchClient(c.conn), c)
-}
-
-func NewWatchFromWatchClient(wc pb.WatchClient, c *Client) Watcher {
- w := &watcher{
- remote: wc,
- streams: make(map[string]*watchGrpcStream),
- }
- if c != nil {
- w.callOpts = c.callOpts
- w.lg = c.lg
- }
- return w
-}
-
-// never closes
-var valCtxCh = make(chan struct{})
-var zeroTime = time.Unix(0, 0)
-
-// ctx with only the values; never Done
-type valCtx struct{ context.Context }
-
-func (vc *valCtx) Deadline() (time.Time, bool) { return zeroTime, false }
-func (vc *valCtx) Done() <-chan struct{} { return valCtxCh }
-func (vc *valCtx) Err() error { return nil }
-
-func (w *watcher) newWatcherGrpcStream(inctx context.Context) *watchGrpcStream {
- ctx, cancel := context.WithCancel(&valCtx{inctx})
- wgs := &watchGrpcStream{
- owner: w,
- remote: w.remote,
- callOpts: w.callOpts,
- ctx: ctx,
- ctxKey: streamKeyFromCtx(inctx),
- cancel: cancel,
- substreams: make(map[int64]*watcherStream),
- respc: make(chan *pb.WatchResponse),
- reqc: make(chan watchStreamRequest),
- donec: make(chan struct{}),
- errc: make(chan error, 1),
- closingc: make(chan *watcherStream),
- resumec: make(chan struct{}),
- lg: w.lg,
- }
- go wgs.run()
- return wgs
-}
-
-// Watch posts a watch request to run() and waits for a new watcher channel
-func (w *watcher) Watch(ctx context.Context, key string, opts ...OpOption) WatchChan {
- ow := opWatch(key, opts...)
-
- var filters []pb.WatchCreateRequest_FilterType
- if ow.filterPut {
- filters = append(filters, pb.WatchCreateRequest_NOPUT)
- }
- if ow.filterDelete {
- filters = append(filters, pb.WatchCreateRequest_NODELETE)
- }
-
- wr := &watchRequest{
- ctx: ctx,
- createdNotify: ow.createdNotify,
- key: string(ow.key),
- end: string(ow.end),
- rev: ow.rev,
- progressNotify: ow.progressNotify,
- fragment: ow.fragment,
- filters: filters,
- prevKV: ow.prevKV,
- retc: make(chan chan WatchResponse, 1),
- }
-
- ok := false
- ctxKey := streamKeyFromCtx(ctx)
-
- var closeCh chan WatchResponse
- for {
- // find or allocate appropriate grpc watch stream
- w.mu.Lock()
- if w.streams == nil {
- // closed
- w.mu.Unlock()
- ch := make(chan WatchResponse)
- close(ch)
- return ch
- }
- wgs := w.streams[ctxKey]
- if wgs == nil {
- wgs = w.newWatcherGrpcStream(ctx)
- w.streams[ctxKey] = wgs
- }
- donec := wgs.donec
- reqc := wgs.reqc
- w.mu.Unlock()
-
- // couldn't create channel; return closed channel
- if closeCh == nil {
- closeCh = make(chan WatchResponse, 1)
- }
-
- // submit request
- select {
- case reqc <- wr:
- ok = true
- case <-wr.ctx.Done():
- ok = false
- case <-donec:
- ok = false
- if wgs.closeErr != nil {
- closeCh <- WatchResponse{Canceled: true, closeErr: wgs.closeErr}
- break
- }
- // retry; may have dropped stream from no ctxs
- continue
- }
-
- // receive channel
- if ok {
- select {
- case ret := <-wr.retc:
- return ret
- case <-ctx.Done():
- case <-donec:
- if wgs.closeErr != nil {
- closeCh <- WatchResponse{Canceled: true, closeErr: wgs.closeErr}
- break
- }
- // retry; may have dropped stream from no ctxs
- continue
- }
- }
- break
- }
-
- close(closeCh)
- return closeCh
-}
-
-func (w *watcher) Close() (err error) {
- w.mu.Lock()
- streams := w.streams
- w.streams = nil
- w.mu.Unlock()
- for _, wgs := range streams {
- if werr := wgs.close(); werr != nil {
- err = werr
- }
- }
- // Consider context.Canceled as a successful close
- if err == context.Canceled {
- err = nil
- }
- return err
-}
-
-// RequestProgress requests a progress notify response be sent in all watch channels.
-func (w *watcher) RequestProgress(ctx context.Context) (err error) {
- ctxKey := streamKeyFromCtx(ctx)
-
- w.mu.Lock()
- if w.streams == nil {
- w.mu.Unlock()
- return fmt.Errorf("no stream found for context")
- }
- wgs := w.streams[ctxKey]
- if wgs == nil {
- wgs = w.newWatcherGrpcStream(ctx)
- w.streams[ctxKey] = wgs
- }
- donec := wgs.donec
- reqc := wgs.reqc
- w.mu.Unlock()
-
- pr := &progressRequest{}
-
- select {
- case reqc <- pr:
- return nil
- case <-ctx.Done():
- return ctx.Err()
- case <-donec:
- if wgs.closeErr != nil {
- return wgs.closeErr
- }
- // retry; may have dropped stream from no ctxs
- return w.RequestProgress(ctx)
- }
-}
-
-func (w *watchGrpcStream) close() (err error) {
- w.cancel()
- <-w.donec
- select {
- case err = <-w.errc:
- default:
- }
- return toErr(w.ctx, err)
-}
-
-func (w *watcher) closeStream(wgs *watchGrpcStream) {
- w.mu.Lock()
- close(wgs.donec)
- wgs.cancel()
- if w.streams != nil {
- delete(w.streams, wgs.ctxKey)
- }
- w.mu.Unlock()
-}
-
-func (w *watchGrpcStream) addSubstream(resp *pb.WatchResponse, ws *watcherStream) {
- // check watch ID for backward compatibility (<= v3.3)
- if resp.WatchId == -1 || (resp.Canceled && resp.CancelReason != "") {
- w.closeErr = v3rpc.Error(errors.New(resp.CancelReason))
- // failed; no channel
- close(ws.recvc)
- return
- }
- ws.id = resp.WatchId
- w.substreams[ws.id] = ws
-}
-
-func (w *watchGrpcStream) sendCloseSubstream(ws *watcherStream, resp *WatchResponse) {
- select {
- case ws.outc <- *resp:
- case <-ws.initReq.ctx.Done():
- case <-time.After(closeSendErrTimeout):
- }
- close(ws.outc)
-}
-
-func (w *watchGrpcStream) closeSubstream(ws *watcherStream) {
- // send channel response in case stream was never established
- select {
- case ws.initReq.retc <- ws.outc:
- default:
- }
- // close subscriber's channel
- if closeErr := w.closeErr; closeErr != nil && ws.initReq.ctx.Err() == nil {
- go w.sendCloseSubstream(ws, &WatchResponse{Canceled: true, closeErr: w.closeErr})
- } else if ws.outc != nil {
- close(ws.outc)
- }
- if ws.id != -1 {
- delete(w.substreams, ws.id)
- return
- }
- for i := range w.resuming {
- if w.resuming[i] == ws {
- w.resuming[i] = nil
- return
- }
- }
-}
-
-// run is the root of the goroutines for managing a watcher client
-func (w *watchGrpcStream) run() {
- var wc pb.Watch_WatchClient
- var closeErr error
-
- // substreams marked to close but goroutine still running; needed for
- // avoiding double-closing recvc on grpc stream teardown
- closing := make(map[*watcherStream]struct{})
-
- defer func() {
- w.closeErr = closeErr
- // shutdown substreams and resuming substreams
- for _, ws := range w.substreams {
- if _, ok := closing[ws]; !ok {
- close(ws.recvc)
- closing[ws] = struct{}{}
- }
- }
- for _, ws := range w.resuming {
- if _, ok := closing[ws]; ws != nil && !ok {
- close(ws.recvc)
- closing[ws] = struct{}{}
- }
- }
- w.joinSubstreams()
- for range closing {
- w.closeSubstream(<-w.closingc)
- }
- w.wg.Wait()
- w.owner.closeStream(w)
- }()
-
- // start a stream with the etcd grpc server
- if wc, closeErr = w.newWatchClient(); closeErr != nil {
- return
- }
-
- cancelSet := make(map[int64]struct{})
-
- var cur *pb.WatchResponse
- for {
- select {
- // Watch() requested
- case req := <-w.reqc:
- switch wreq := req.(type) {
- case *watchRequest:
- outc := make(chan WatchResponse, 1)
- // TODO: pass custom watch ID?
- ws := &watcherStream{
- initReq: *wreq,
- id: -1,
- outc: outc,
- // unbuffered so resumes won't cause repeat events
- recvc: make(chan *WatchResponse),
- }
-
- ws.donec = make(chan struct{})
- w.wg.Add(1)
- go w.serveSubstream(ws, w.resumec)
-
- // queue up for watcher creation/resume
- w.resuming = append(w.resuming, ws)
- if len(w.resuming) == 1 {
- // head of resume queue, can register a new watcher
- if err := wc.Send(ws.initReq.toPB()); err != nil {
- w.lg.Debug("error when sending request", zap.Error(err))
- }
- }
- case *progressRequest:
- if err := wc.Send(wreq.toPB()); err != nil {
- w.lg.Debug("error when sending request", zap.Error(err))
- }
- }
-
- // new events from the watch client
- case pbresp := <-w.respc:
- if cur == nil || pbresp.Created || pbresp.Canceled {
- cur = pbresp
- } else if cur != nil && cur.WatchId == pbresp.WatchId {
- // merge new events
- cur.Events = append(cur.Events, pbresp.Events...)
- // update "Fragment" field; last response with "Fragment" == false
- cur.Fragment = pbresp.Fragment
- }
-
- switch {
- case pbresp.Created:
- // response to head of queue creation
- if ws := w.resuming[0]; ws != nil {
- w.addSubstream(pbresp, ws)
- w.dispatchEvent(pbresp)
- w.resuming[0] = nil
- }
-
- if ws := w.nextResume(); ws != nil {
- if err := wc.Send(ws.initReq.toPB()); err != nil {
- w.lg.Debug("error when sending request", zap.Error(err))
- }
- }
-
- // reset for next iteration
- cur = nil
-
- case pbresp.Canceled && pbresp.CompactRevision == 0:
- delete(cancelSet, pbresp.WatchId)
- if ws, ok := w.substreams[pbresp.WatchId]; ok {
- // signal to stream goroutine to update closingc
- close(ws.recvc)
- closing[ws] = struct{}{}
- }
-
- // reset for next iteration
- cur = nil
-
- case cur.Fragment:
- // watch response events are still fragmented
- // continue to fetch next fragmented event arrival
- continue
-
- default:
- // dispatch to appropriate watch stream
- ok := w.dispatchEvent(cur)
-
- // reset for next iteration
- cur = nil
-
- if ok {
- break
- }
-
- // watch response on unexpected watch id; cancel id
- if _, ok := cancelSet[pbresp.WatchId]; ok {
- break
- }
-
- cancelSet[pbresp.WatchId] = struct{}{}
- cr := &pb.WatchRequest_CancelRequest{
- CancelRequest: &pb.WatchCancelRequest{
- WatchId: pbresp.WatchId,
- },
- }
- req := &pb.WatchRequest{RequestUnion: cr}
- w.lg.Debug("sending watch cancel request for failed dispatch", zap.Int64("watch-id", pbresp.WatchId))
- if err := wc.Send(req); err != nil {
- w.lg.Debug("failed to send watch cancel request", zap.Int64("watch-id", pbresp.WatchId), zap.Error(err))
- }
- }
-
- // watch client failed on Recv; spawn another if possible
- case err := <-w.errc:
- if isHaltErr(w.ctx, err) || toErr(w.ctx, err) == v3rpc.ErrNoLeader {
- closeErr = err
- return
- }
- if wc, closeErr = w.newWatchClient(); closeErr != nil {
- return
- }
- if ws := w.nextResume(); ws != nil {
- if err := wc.Send(ws.initReq.toPB()); err != nil {
- w.lg.Debug("error when sending request", zap.Error(err))
- }
- }
- cancelSet = make(map[int64]struct{})
-
- case <-w.ctx.Done():
- return
-
- case ws := <-w.closingc:
- w.closeSubstream(ws)
- delete(closing, ws)
- // no more watchers on this stream, shutdown, skip cancellation
- if len(w.substreams)+len(w.resuming) == 0 {
- return
- }
- if ws.id != -1 {
- // client is closing an established watch; close it on the server proactively instead of waiting
- // to close when the next message arrives
- cancelSet[ws.id] = struct{}{}
- cr := &pb.WatchRequest_CancelRequest{
- CancelRequest: &pb.WatchCancelRequest{
- WatchId: ws.id,
- },
- }
- req := &pb.WatchRequest{RequestUnion: cr}
- w.lg.Debug("sending watch cancel request for closed watcher", zap.Int64("watch-id", ws.id))
- if err := wc.Send(req); err != nil {
- w.lg.Debug("failed to send watch cancel request", zap.Int64("watch-id", ws.id), zap.Error(err))
- }
- }
- }
- }
-}
-
-// nextResume chooses the next resuming to register with the grpc stream. Abandoned
-// streams are marked as nil in the queue since the head must wait for its inflight registration.
-func (w *watchGrpcStream) nextResume() *watcherStream {
- for len(w.resuming) != 0 {
- if w.resuming[0] != nil {
- return w.resuming[0]
- }
- w.resuming = w.resuming[1:len(w.resuming)]
- }
- return nil
-}
-
-// dispatchEvent sends a WatchResponse to the appropriate watcher stream
-func (w *watchGrpcStream) dispatchEvent(pbresp *pb.WatchResponse) bool {
- events := make([]*Event, len(pbresp.Events))
- for i, ev := range pbresp.Events {
- events[i] = (*Event)(ev)
- }
- // TODO: return watch ID?
- wr := &WatchResponse{
- Header: *pbresp.Header,
- Events: events,
- CompactRevision: pbresp.CompactRevision,
- Created: pbresp.Created,
- Canceled: pbresp.Canceled,
- cancelReason: pbresp.CancelReason,
- }
-
- // watch IDs are zero indexed, so request notify watch responses are assigned a watch ID of -1 to
- // indicate they should be broadcast.
- if wr.IsProgressNotify() && pbresp.WatchId == -1 {
- return w.broadcastResponse(wr)
- }
-
- return w.unicastResponse(wr, pbresp.WatchId)
-
-}
-
-// broadcastResponse send a watch response to all watch substreams.
-func (w *watchGrpcStream) broadcastResponse(wr *WatchResponse) bool {
- for _, ws := range w.substreams {
- select {
- case ws.recvc <- wr:
- case <-ws.donec:
- }
- }
- return true
-}
-
-// unicastResponse sends a watch response to a specific watch substream.
-func (w *watchGrpcStream) unicastResponse(wr *WatchResponse, watchId int64) bool {
- ws, ok := w.substreams[watchId]
- if !ok {
- return false
- }
- select {
- case ws.recvc <- wr:
- case <-ws.donec:
- return false
- }
- return true
-}
-
-// serveWatchClient forwards messages from the grpc stream to run()
-func (w *watchGrpcStream) serveWatchClient(wc pb.Watch_WatchClient) {
- for {
- resp, err := wc.Recv()
- if err != nil {
- select {
- case w.errc <- err:
- case <-w.donec:
- }
- return
- }
- select {
- case w.respc <- resp:
- case <-w.donec:
- return
- }
- }
-}
-
-// serveSubstream forwards watch responses from run() to the subscriber
-func (w *watchGrpcStream) serveSubstream(ws *watcherStream, resumec chan struct{}) {
- if ws.closing {
- panic("created substream goroutine but substream is closing")
- }
-
- // nextRev is the minimum expected next revision
- nextRev := ws.initReq.rev
- resuming := false
- defer func() {
- if !resuming {
- ws.closing = true
- }
- close(ws.donec)
- if !resuming {
- w.closingc <- ws
- }
- w.wg.Done()
- }()
-
- emptyWr := &WatchResponse{}
- for {
- curWr := emptyWr
- outc := ws.outc
-
- if len(ws.buf) > 0 {
- curWr = ws.buf[0]
- } else {
- outc = nil
- }
- select {
- case outc <- *curWr:
- if ws.buf[0].Err() != nil {
- return
- }
- ws.buf[0] = nil
- ws.buf = ws.buf[1:]
- case wr, ok := <-ws.recvc:
- if !ok {
- // shutdown from closeSubstream
- return
- }
-
- if wr.Created {
- if ws.initReq.retc != nil {
- ws.initReq.retc <- ws.outc
- // to prevent next write from taking the slot in buffered channel
- // and posting duplicate create events
- ws.initReq.retc = nil
-
- // send first creation event only if requested
- if ws.initReq.createdNotify {
- ws.outc <- *wr
- }
- // once the watch channel is returned, a current revision
- // watch must resume at the store revision. This is necessary
- // for the following case to work as expected:
- // wch := m1.Watch("a")
- // m2.Put("a", "b")
- // <-wch
- // If the revision is only bound on the first observed event,
- // if wch is disconnected before the Put is issued, then reconnects
- // after it is committed, it'll miss the Put.
- if ws.initReq.rev == 0 {
- nextRev = wr.Header.Revision
- }
- }
- } else {
- // current progress of watch; <= store revision
- nextRev = wr.Header.Revision
- }
-
- if len(wr.Events) > 0 {
- nextRev = wr.Events[len(wr.Events)-1].Kv.ModRevision + 1
- }
- ws.initReq.rev = nextRev
-
- // created event is already sent above,
- // watcher should not post duplicate events
- if wr.Created {
- continue
- }
-
- // TODO pause channel if buffer gets too large
- ws.buf = append(ws.buf, wr)
- case <-w.ctx.Done():
- return
- case <-ws.initReq.ctx.Done():
- return
- case <-resumec:
- resuming = true
- return
- }
- }
- // lazily send cancel message if events on missing id
-}
-
-func (w *watchGrpcStream) newWatchClient() (pb.Watch_WatchClient, error) {
- // mark all substreams as resuming
- close(w.resumec)
- w.resumec = make(chan struct{})
- w.joinSubstreams()
- for _, ws := range w.substreams {
- ws.id = -1
- w.resuming = append(w.resuming, ws)
- }
- // strip out nils, if any
- var resuming []*watcherStream
- for _, ws := range w.resuming {
- if ws != nil {
- resuming = append(resuming, ws)
- }
- }
- w.resuming = resuming
- w.substreams = make(map[int64]*watcherStream)
-
- // connect to grpc stream while accepting watcher cancelation
- stopc := make(chan struct{})
- donec := w.waitCancelSubstreams(stopc)
- wc, err := w.openWatchClient()
- close(stopc)
- <-donec
-
- // serve all non-closing streams, even if there's a client error
- // so that the teardown path can shutdown the streams as expected.
- for _, ws := range w.resuming {
- if ws.closing {
- continue
- }
- ws.donec = make(chan struct{})
- w.wg.Add(1)
- go w.serveSubstream(ws, w.resumec)
- }
-
- if err != nil {
- return nil, v3rpc.Error(err)
- }
-
- // receive data from new grpc stream
- go w.serveWatchClient(wc)
- return wc, nil
-}
-
-func (w *watchGrpcStream) waitCancelSubstreams(stopc <-chan struct{}) <-chan struct{} {
- var wg sync.WaitGroup
- wg.Add(len(w.resuming))
- donec := make(chan struct{})
- for i := range w.resuming {
- go func(ws *watcherStream) {
- defer wg.Done()
- if ws.closing {
- if ws.initReq.ctx.Err() != nil && ws.outc != nil {
- close(ws.outc)
- ws.outc = nil
- }
- return
- }
- select {
- case <-ws.initReq.ctx.Done():
- // closed ws will be removed from resuming
- ws.closing = true
- close(ws.outc)
- ws.outc = nil
- w.wg.Add(1)
- go func() {
- defer w.wg.Done()
- w.closingc <- ws
- }()
- case <-stopc:
- }
- }(w.resuming[i])
- }
- go func() {
- defer close(donec)
- wg.Wait()
- }()
- return donec
-}
-
-// joinSubstreams waits for all substream goroutines to complete.
-func (w *watchGrpcStream) joinSubstreams() {
- for _, ws := range w.substreams {
- <-ws.donec
- }
- for _, ws := range w.resuming {
- if ws != nil {
- <-ws.donec
- }
- }
-}
-
-var maxBackoff = 100 * time.Millisecond
-
-// openWatchClient retries opening a watch client until success or halt.
-// manually retry in case "ws==nil && err==nil"
-// TODO: remove FailFast=false
-func (w *watchGrpcStream) openWatchClient() (ws pb.Watch_WatchClient, err error) {
- backoff := time.Millisecond
- for {
- select {
- case <-w.ctx.Done():
- if err == nil {
- return nil, w.ctx.Err()
- }
- return nil, err
- default:
- }
- if ws, err = w.remote.Watch(w.ctx, w.callOpts...); ws != nil && err == nil {
- break
- }
- if isHaltErr(w.ctx, err) {
- return nil, v3rpc.Error(err)
- }
- if isUnavailableErr(w.ctx, err) {
- // retry, but backoff
- if backoff < maxBackoff {
- // 25% backoff factor
- backoff = backoff + backoff/4
- if backoff > maxBackoff {
- backoff = maxBackoff
- }
- }
- time.Sleep(backoff)
- }
- }
- return ws, nil
-}
-
-// toPB converts an internal watch request structure to its protobuf WatchRequest structure.
-func (wr *watchRequest) toPB() *pb.WatchRequest {
- req := &pb.WatchCreateRequest{
- StartRevision: wr.rev,
- Key: []byte(wr.key),
- RangeEnd: []byte(wr.end),
- ProgressNotify: wr.progressNotify,
- Filters: wr.filters,
- PrevKv: wr.prevKV,
- Fragment: wr.fragment,
- }
- cr := &pb.WatchRequest_CreateRequest{CreateRequest: req}
- return &pb.WatchRequest{RequestUnion: cr}
-}
-
-// toPB converts an internal progress request structure to its protobuf WatchRequest structure.
-func (pr *progressRequest) toPB() *pb.WatchRequest {
- req := &pb.WatchProgressRequest{}
- cr := &pb.WatchRequest_ProgressRequest{ProgressRequest: req}
- return &pb.WatchRequest{RequestUnion: cr}
-}
-
-func streamKeyFromCtx(ctx context.Context) string {
- if md, ok := metadata.FromOutgoingContext(ctx); ok {
- return fmt.Sprintf("%+v", md)
- }
- return ""
-}
diff --git a/etcd-fix/client/v3/watch_test.go b/etcd-fix/client/v3/watch_test.go
deleted file mode 100644
index 2a56ca4..0000000
--- a/etcd-fix/client/v3/watch_test.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package clientv3
-
-import (
- "testing"
-
- "go.etcd.io/etcd/api/v3/mvccpb"
-)
-
-func TestEvent(t *testing.T) {
- tests := []struct {
- ev *Event
- isCreate bool
- isModify bool
- }{{
- ev: &Event{
- Type: EventTypePut,
- Kv: &mvccpb.KeyValue{
- CreateRevision: 3,
- ModRevision: 3,
- },
- },
- isCreate: true,
- }, {
- ev: &Event{
- Type: EventTypePut,
- Kv: &mvccpb.KeyValue{
- CreateRevision: 3,
- ModRevision: 4,
- },
- },
- isModify: true,
- }}
- for i, tt := range tests {
- if tt.isCreate && !tt.ev.IsCreate() {
- t.Errorf("#%d: event should be Create event", i)
- }
- if tt.isModify && !tt.ev.IsModify() {
- t.Errorf("#%d: event should be Modify event", i)
- }
- }
-}
diff --git a/etcd-fix/client/v3/yaml/config.go b/etcd-fix/client/v3/yaml/config.go
deleted file mode 100644
index 015d06f..0000000
--- a/etcd-fix/client/v3/yaml/config.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2017 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package yaml handles yaml-formatted clientv3 configuration data.
-package yaml
-
-import (
- "crypto/tls"
- "crypto/x509"
- "io/ioutil"
-
- "sigs.k8s.io/yaml"
-
- "go.etcd.io/etcd/client/v3"
- "go.etcd.io/etcd/pkg/v3/tlsutil"
-)
-
-type yamlConfig struct {
- clientv3.Config
-
- InsecureTransport bool `json:"insecure-transport"`
- InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify"`
- Certfile string `json:"cert-file"`
- Keyfile string `json:"key-file"`
- TrustedCAfile string `json:"trusted-ca-file"`
-
- // CAfile is being deprecated. Use 'TrustedCAfile' instead.
- // TODO: deprecate this in v4
- CAfile string `json:"ca-file"`
-}
-
-// NewConfig creates a new clientv3.Config from a yaml file.
-func NewConfig(fpath string) (*clientv3.Config, error) {
- b, err := ioutil.ReadFile(fpath)
- if err != nil {
- return nil, err
- }
-
- yc := &yamlConfig{}
-
- err = yaml.Unmarshal(b, yc)
- if err != nil {
- return nil, err
- }
-
- if yc.InsecureTransport {
- return &yc.Config, nil
- }
-
- var (
- cert *tls.Certificate
- cp *x509.CertPool
- )
-
- if yc.Certfile != "" && yc.Keyfile != "" {
- cert, err = tlsutil.NewCert(yc.Certfile, yc.Keyfile, nil)
- if err != nil {
- return nil, err
- }
- }
-
- if yc.TrustedCAfile != "" {
- cp, err = tlsutil.NewCertPool([]string{yc.TrustedCAfile})
- if err != nil {
- return nil, err
- }
- }
-
- tlscfg := &tls.Config{
- MinVersion: tls.VersionTLS12,
- InsecureSkipVerify: yc.InsecureSkipTLSVerify,
- RootCAs: cp,
- }
- if cert != nil {
- tlscfg.Certificates = []tls.Certificate{*cert}
- }
- yc.Config.TLS = tlscfg
-
- return &yc.Config, nil
-}
diff --git a/etcd-fix/client/v3/yaml/config_test.go b/etcd-fix/client/v3/yaml/config_test.go
deleted file mode 100644
index e74a6a2..0000000
--- a/etcd-fix/client/v3/yaml/config_test.go
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package yaml
-
-import (
- "io/ioutil"
- "log"
- "os"
- "reflect"
- "testing"
-
- "sigs.k8s.io/yaml"
-)
-
-var (
- certPath = "../../../tests/fixtures/server.crt"
- privateKeyPath = "../../../tests/fixtures/server.key.insecure"
- caPath = "../../../tests/fixtures/ca.crt"
-)
-
-func TestConfigFromFile(t *testing.T) {
- tests := []struct {
- ym *yamlConfig
-
- werr bool
- }{
- {
- &yamlConfig{},
- false,
- },
- {
- &yamlConfig{
- InsecureTransport: true,
- },
- false,
- },
- {
- &yamlConfig{
- Keyfile: privateKeyPath,
- Certfile: certPath,
- TrustedCAfile: caPath,
- InsecureSkipTLSVerify: true,
- },
- false,
- },
- {
- &yamlConfig{
- Keyfile: "bad",
- Certfile: "bad",
- },
- true,
- },
- {
- &yamlConfig{
- Keyfile: privateKeyPath,
- Certfile: certPath,
- TrustedCAfile: "bad",
- },
- true,
- },
- }
-
- for i, tt := range tests {
- tmpfile, err := ioutil.TempFile("", "clientcfg")
- if err != nil {
- log.Fatal(err)
- }
-
- b, err := yaml.Marshal(tt.ym)
- if err != nil {
- t.Fatal(err)
- }
-
- _, err = tmpfile.Write(b)
- if err != nil {
- t.Fatal(err)
- }
- err = tmpfile.Close()
- if err != nil {
- t.Fatal(err)
- }
-
- cfg, cerr := NewConfig(tmpfile.Name())
- if cerr != nil && !tt.werr {
- t.Errorf("#%d: err = %v, want %v", i, cerr, tt.werr)
- continue
- }
- if cerr != nil {
- continue
- }
-
- if !reflect.DeepEqual(cfg.Endpoints, tt.ym.Endpoints) {
- t.Errorf("#%d: endpoint = %v, want %v", i, cfg.Endpoints, tt.ym.Endpoints)
- }
-
- if tt.ym.InsecureTransport != (cfg.TLS == nil) {
- t.Errorf("#%d: insecureTransport = %v, want %v", i, cfg.TLS == nil, tt.ym.InsecureTransport)
- }
-
- if !tt.ym.InsecureTransport {
- if tt.ym.Certfile != "" && len(cfg.TLS.Certificates) == 0 {
- t.Errorf("#%d: failed to load in cert", i)
- }
- if tt.ym.TrustedCAfile != "" && cfg.TLS.RootCAs == nil {
- t.Errorf("#%d: failed to load in ca cert", i)
- }
- if cfg.TLS.InsecureSkipVerify != tt.ym.InsecureSkipTLSVerify {
- t.Errorf("#%d: skipTLSVeify = %v, want %v", i, cfg.TLS.InsecureSkipVerify, tt.ym.InsecureSkipTLSVerify)
- }
- }
-
- os.Remove(tmpfile.Name())
- }
-}
diff --git a/etcd-fix/code-of-conduct.md b/etcd-fix/code-of-conduct.md
deleted file mode 100644
index d79cc54..0000000
--- a/etcd-fix/code-of-conduct.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## etcd Community Code of Conduct
-
-etcd follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).
diff --git a/etcd-fix/contrib/README.md b/etcd-fix/contrib/README.md
deleted file mode 100644
index b8cf466..0000000
--- a/etcd-fix/contrib/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## Contrib
-
-Scripts and files which may be useful but aren't part of the core etcd project.
-
-* [systemd](systemd) - an example unit file for deploying etcd on systemd-based distributions
-* [raftexample](raftexample) - an example distributed key-value store using raft
-* [systemd/etcd2-backup-coreos](systemd/etcd2-backup-coreos) - remote backup and restore procedures for etcd2 clusters on CoreOS Linux
-* [systemd/etcd3-multinode](systemd/etcd3-multinode) - multi-node cluster setup with systemd
diff --git a/etcd-fix/contrib/raftexample/Procfile b/etcd-fix/contrib/raftexample/Procfile
deleted file mode 100644
index 6b2f7cc..0000000
--- a/etcd-fix/contrib/raftexample/Procfile
+++ /dev/null
@@ -1,4 +0,0 @@
-# Use goreman to run `go get github.com/mattn/goreman`
-raftexample1: ./raftexample --id 1 --cluster http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379 --port 12380
-raftexample2: ./raftexample --id 2 --cluster http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379 --port 22380
-raftexample3: ./raftexample --id 3 --cluster http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379 --port 32380
diff --git a/etcd-fix/contrib/raftexample/README.md b/etcd-fix/contrib/raftexample/README.md
deleted file mode 100644
index 2e73996..0000000
--- a/etcd-fix/contrib/raftexample/README.md
+++ /dev/null
@@ -1,125 +0,0 @@
-# raftexample
-
-raftexample is an example usage of etcd's [raft library](../../raft). It provides a simple REST API for a key-value store cluster backed by the [Raft][raft] consensus algorithm.
-
-[raft]: http://raftconsensus.github.io/
-
-## Getting Started
-
-### Building raftexample
-
-Clone `etcd` to `/src/go.etcd.io/etcd`
-
-```sh
-export GOPATH=
-cd /src/go.etcd.io/etcd/contrib/raftexample
-go build -o raftexample
-```
-
-### Running single node raftexample
-
-First start a single-member cluster of raftexample:
-
-```sh
-raftexample --id 1 --cluster http://127.0.0.1:12379 --port 12380
-```
-
-Each raftexample process maintains a single raft instance and a key-value server.
-The process's list of comma separated peers (--cluster), its raft ID index into the peer list (--id), and http key-value server port (--port) are passed through the command line.
-
-Next, store a value ("hello") to a key ("my-key"):
-
-```
-curl -L http://127.0.0.1:12380/my-key -XPUT -d hello
-```
-
-Finally, retrieve the stored key:
-
-```
-curl -L http://127.0.0.1:12380/my-key
-```
-
-### Running a local cluster
-
-First install [goreman](https://github.com/mattn/goreman), which manages Procfile-based applications.
-
-The [Procfile script](./Procfile) will set up a local example cluster. Start it with:
-
-```sh
-goreman start
-```
-
-This will bring up three raftexample instances.
-
-Now it's possible to write a key-value pair to any member of the cluster and likewise retrieve it from any member.
-
-### Fault Tolerance
-
-To test cluster recovery, first start a cluster and write a value "foo":
-```sh
-goreman start
-curl -L http://127.0.0.1:12380/my-key -XPUT -d foo
-```
-
-Next, remove a node and replace the value with "bar" to check cluster availability:
-
-```sh
-goreman run stop raftexample2
-curl -L http://127.0.0.1:12380/my-key -XPUT -d bar
-curl -L http://127.0.0.1:32380/my-key
-```
-
-Finally, bring the node back up and verify it recovers with the updated value "bar":
-```sh
-goreman run start raftexample2
-curl -L http://127.0.0.1:22380/my-key
-```
-
-### Dynamic cluster reconfiguration
-
-Nodes can be added to or removed from a running cluster using requests to the REST API.
-
-For example, suppose we have a 3-node cluster that was started with the commands:
-```sh
-raftexample --id 1 --cluster http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379 --port 12380
-raftexample --id 2 --cluster http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379 --port 22380
-raftexample --id 3 --cluster http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379 --port 32380
-```
-
-A fourth node with ID 4 can be added by issuing a POST:
-```sh
-curl -L http://127.0.0.1:12380/4 -XPOST -d http://127.0.0.1:42379
-```
-
-Then the new node can be started as the others were, using the --join option:
-```sh
-raftexample --id 4 --cluster http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379,http://127.0.0.1:42379 --port 42380 --join
-```
-
-The new node should join the cluster and be able to service key/value requests.
-
-We can remove a node using a DELETE request:
-```sh
-curl -L http://127.0.0.1:12380/3 -XDELETE
-```
-
-Node 3 should shut itself down once the cluster has processed this request.
-
-## Design
-
-The raftexample consists of three components: a raft-backed key-value store, a REST API server, and a raft consensus server based on etcd's raft implementation.
-
-The raft-backed key-value store is a key-value map that holds all committed key-values.
-The store bridges communication between the raft server and the REST server.
-Key-value updates are issued through the store to the raft server.
-The store updates its map once raft reports the updates are committed.
-
-The REST server exposes the current raft consensus by accessing the raft-backed key-value store.
-A GET command looks up a key in the store and returns the value, if any.
-A key-value PUT command issues an update proposal to the store.
-
-The raft server participates in consensus with its cluster peers.
-When the REST server submits a proposal, the raft server transmits the proposal to its peers.
-When raft reaches a consensus, the server publishes all committed updates over a commit channel.
-For raftexample, this commit channel is consumed by the key-value store.
-
diff --git a/etcd-fix/contrib/raftexample/doc.go b/etcd-fix/contrib/raftexample/doc.go
deleted file mode 100644
index b2dc841..0000000
--- a/etcd-fix/contrib/raftexample/doc.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// raftexample is a simple KV store using the raft and rafthttp libraries.
-package main
diff --git a/etcd-fix/contrib/raftexample/httpapi.go b/etcd-fix/contrib/raftexample/httpapi.go
deleted file mode 100644
index 1344559..0000000
--- a/etcd-fix/contrib/raftexample/httpapi.go
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "io/ioutil"
- "log"
- "net/http"
- "strconv"
-
- "go.etcd.io/etcd/raft/v3/raftpb"
-)
-
-// Handler for a http based key-value store backed by raft
-type httpKVAPI struct {
- store *kvstore
- confChangeC chan<- raftpb.ConfChange
-}
-
-func (h *httpKVAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- key := r.RequestURI
- defer r.Body.Close()
- switch {
- case r.Method == "PUT":
- v, err := ioutil.ReadAll(r.Body)
- if err != nil {
- log.Printf("Failed to read on PUT (%v)\n", err)
- http.Error(w, "Failed on PUT", http.StatusBadRequest)
- return
- }
-
- h.store.Propose(key, string(v))
-
- // Optimistic-- no waiting for ack from raft. Value is not yet
- // committed so a subsequent GET on the key may return old value
- w.WriteHeader(http.StatusNoContent)
- case r.Method == "GET":
- if v, ok := h.store.Lookup(key); ok {
- w.Write([]byte(v))
- } else {
- http.Error(w, "Failed to GET", http.StatusNotFound)
- }
- case r.Method == "POST":
- url, err := ioutil.ReadAll(r.Body)
- if err != nil {
- log.Printf("Failed to read on POST (%v)\n", err)
- http.Error(w, "Failed on POST", http.StatusBadRequest)
- return
- }
-
- nodeId, err := strconv.ParseUint(key[1:], 0, 64)
- if err != nil {
- log.Printf("Failed to convert ID for conf change (%v)\n", err)
- http.Error(w, "Failed on POST", http.StatusBadRequest)
- return
- }
-
- cc := raftpb.ConfChange{
- Type: raftpb.ConfChangeAddNode,
- NodeID: nodeId,
- Context: url,
- }
- h.confChangeC <- cc
-
- // As above, optimistic that raft will apply the conf change
- w.WriteHeader(http.StatusNoContent)
- case r.Method == "DELETE":
- nodeId, err := strconv.ParseUint(key[1:], 0, 64)
- if err != nil {
- log.Printf("Failed to convert ID for conf change (%v)\n", err)
- http.Error(w, "Failed on DELETE", http.StatusBadRequest)
- return
- }
-
- cc := raftpb.ConfChange{
- Type: raftpb.ConfChangeRemoveNode,
- NodeID: nodeId,
- }
- h.confChangeC <- cc
-
- // As above, optimistic that raft will apply the conf change
- w.WriteHeader(http.StatusNoContent)
- default:
- w.Header().Set("Allow", "PUT")
- w.Header().Add("Allow", "GET")
- w.Header().Add("Allow", "POST")
- w.Header().Add("Allow", "DELETE")
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- }
-}
-
-// serveHttpKVAPI starts a key-value server with a GET/PUT API and listens.
-func serveHttpKVAPI(kv *kvstore, port int, confChangeC chan<- raftpb.ConfChange, errorC <-chan error) {
- srv := http.Server{
- Addr: ":" + strconv.Itoa(port),
- Handler: &httpKVAPI{
- store: kv,
- confChangeC: confChangeC,
- },
- }
- go func() {
- if err := srv.ListenAndServe(); err != nil {
- log.Fatal(err)
- }
- }()
-
- // exit when raft goes down
- if err, ok := <-errorC; ok {
- log.Fatal(err)
- }
-}
diff --git a/etcd-fix/contrib/raftexample/kvstore.go b/etcd-fix/contrib/raftexample/kvstore.go
deleted file mode 100644
index 7f69ef8..0000000
--- a/etcd-fix/contrib/raftexample/kvstore.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "bytes"
- "encoding/gob"
- "encoding/json"
- "log"
- "sync"
-
- "go.etcd.io/etcd/server/v3/etcdserver/api/snap"
-)
-
-// a key-value store backed by raft
-type kvstore struct {
- proposeC chan<- string // channel for proposing updates
- mu sync.RWMutex
- kvStore map[string]string // current committed key-value pairs
- snapshotter *snap.Snapshotter
-}
-
-type kv struct {
- Key string
- Val string
-}
-
-func newKVStore(snapshotter *snap.Snapshotter, proposeC chan<- string, commitC <-chan *string, errorC <-chan error) *kvstore {
- s := &kvstore{proposeC: proposeC, kvStore: make(map[string]string), snapshotter: snapshotter}
- // replay log into key-value map
- s.readCommits(commitC, errorC)
- // read commits from raft into kvStore map until error
- go s.readCommits(commitC, errorC)
- return s
-}
-
-func (s *kvstore) Lookup(key string) (string, bool) {
- s.mu.RLock()
- defer s.mu.RUnlock()
- v, ok := s.kvStore[key]
- return v, ok
-}
-
-func (s *kvstore) Propose(k string, v string) {
- var buf bytes.Buffer
- if err := gob.NewEncoder(&buf).Encode(kv{k, v}); err != nil {
- log.Fatal(err)
- }
- s.proposeC <- buf.String()
-}
-
-func (s *kvstore) readCommits(commitC <-chan *string, errorC <-chan error) {
- for data := range commitC {
- if data == nil {
- // done replaying log; new data incoming
- // OR signaled to load snapshot
- snapshot, err := s.snapshotter.Load()
- if err == snap.ErrNoSnapshot {
- return
- }
- if err != nil {
- log.Panic(err)
- }
- log.Printf("loading snapshot at term %d and index %d", snapshot.Metadata.Term, snapshot.Metadata.Index)
- if err := s.recoverFromSnapshot(snapshot.Data); err != nil {
- log.Panic(err)
- }
- continue
- }
-
- var dataKv kv
- dec := gob.NewDecoder(bytes.NewBufferString(*data))
- if err := dec.Decode(&dataKv); err != nil {
- log.Fatalf("raftexample: could not decode message (%v)", err)
- }
- s.mu.Lock()
- s.kvStore[dataKv.Key] = dataKv.Val
- s.mu.Unlock()
- }
- if err, ok := <-errorC; ok {
- log.Fatal(err)
- }
-}
-
-func (s *kvstore) getSnapshot() ([]byte, error) {
- s.mu.RLock()
- defer s.mu.RUnlock()
- return json.Marshal(s.kvStore)
-}
-
-func (s *kvstore) recoverFromSnapshot(snapshot []byte) error {
- var store map[string]string
- if err := json.Unmarshal(snapshot, &store); err != nil {
- return err
- }
- s.mu.Lock()
- defer s.mu.Unlock()
- s.kvStore = store
- return nil
-}
diff --git a/etcd-fix/contrib/raftexample/kvstore_test.go b/etcd-fix/contrib/raftexample/kvstore_test.go
deleted file mode 100644
index 231f778..0000000
--- a/etcd-fix/contrib/raftexample/kvstore_test.go
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2016 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "reflect"
- "testing"
-)
-
-func Test_kvstore_snapshot(t *testing.T) {
- tm := map[string]string{"foo": "bar"}
- s := &kvstore{kvStore: tm}
-
- v, _ := s.Lookup("foo")
- if v != "bar" {
- t.Fatalf("foo has unexpected value, got %s", v)
- }
-
- data, err := s.getSnapshot()
- if err != nil {
- t.Fatal(err)
- }
- s.kvStore = nil
-
- if err := s.recoverFromSnapshot(data); err != nil {
- t.Fatal(err)
- }
- v, _ = s.Lookup("foo")
- if v != "bar" {
- t.Fatalf("foo has unexpected value, got %s", v)
- }
- if !reflect.DeepEqual(s.kvStore, tm) {
- t.Fatalf("store expected %+v, got %+v", tm, s.kvStore)
- }
-}
diff --git a/etcd-fix/contrib/raftexample/listener.go b/etcd-fix/contrib/raftexample/listener.go
deleted file mode 100644
index d67e16f..0000000
--- a/etcd-fix/contrib/raftexample/listener.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "errors"
- "net"
- "time"
-)
-
-// stoppableListener sets TCP keep-alive timeouts on accepted
-// connections and waits on stopc message
-type stoppableListener struct {
- *net.TCPListener
- stopc <-chan struct{}
-}
-
-func newStoppableListener(addr string, stopc <-chan struct{}) (*stoppableListener, error) {
- ln, err := net.Listen("tcp", addr)
- if err != nil {
- return nil, err
- }
- return &stoppableListener{ln.(*net.TCPListener), stopc}, nil
-}
-
-func (ln stoppableListener) Accept() (c net.Conn, err error) {
- connc := make(chan *net.TCPConn, 1)
- errc := make(chan error, 1)
- go func() {
- tc, err := ln.AcceptTCP()
- if err != nil {
- errc <- err
- return
- }
- connc <- tc
- }()
- select {
- case <-ln.stopc:
- return nil, errors.New("server stopped")
- case err := <-errc:
- return nil, err
- case tc := <-connc:
- tc.SetKeepAlive(true)
- tc.SetKeepAlivePeriod(3 * time.Minute)
- return tc, nil
- }
-}
diff --git a/etcd-fix/contrib/raftexample/main.go b/etcd-fix/contrib/raftexample/main.go
deleted file mode 100644
index b52a1fb..0000000
--- a/etcd-fix/contrib/raftexample/main.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "flag"
- "strings"
-
- "go.etcd.io/etcd/raft/v3/raftpb"
-)
-
-func main() {
- cluster := flag.String("cluster", "http://127.0.0.1:9021", "comma separated cluster peers")
- id := flag.Int("id", 1, "node ID")
- kvport := flag.Int("port", 9121, "key-value server port")
- join := flag.Bool("join", false, "join an existing cluster")
- flag.Parse()
-
- proposeC := make(chan string)
- defer close(proposeC)
- confChangeC := make(chan raftpb.ConfChange)
- defer close(confChangeC)
-
- // raft provides a commit stream for the proposals from the http api
- var kvs *kvstore
- getSnapshot := func() ([]byte, error) { return kvs.getSnapshot() }
- commitC, errorC, snapshotterReady := newRaftNode(*id, strings.Split(*cluster, ","), *join, getSnapshot, proposeC, confChangeC)
-
- kvs = newKVStore(<-snapshotterReady, proposeC, commitC, errorC)
-
- // the key-value http handler will propose updates to raft
- serveHttpKVAPI(kvs, *kvport, confChangeC, errorC)
-}
diff --git a/etcd-fix/contrib/raftexample/raft.go b/etcd-fix/contrib/raftexample/raft.go
deleted file mode 100644
index 399252f..0000000
--- a/etcd-fix/contrib/raftexample/raft.go
+++ /dev/null
@@ -1,482 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "context"
- "fmt"
- "log"
- "net/http"
- "net/url"
- "os"
- "strconv"
- "time"
-
- "go.etcd.io/etcd/pkg/v3/fileutil"
- "go.etcd.io/etcd/pkg/v3/types"
- "go.etcd.io/etcd/raft/v3"
- "go.etcd.io/etcd/raft/v3/raftpb"
- "go.etcd.io/etcd/server/v3/etcdserver/api/rafthttp"
- "go.etcd.io/etcd/server/v3/etcdserver/api/snap"
- stats "go.etcd.io/etcd/server/v3/etcdserver/api/v2stats"
- "go.etcd.io/etcd/server/v3/wal"
- "go.etcd.io/etcd/server/v3/wal/walpb"
-
- "go.uber.org/zap"
-)
-
-// A key-value stream backed by raft
-type raftNode struct {
- proposeC <-chan string // proposed messages (k,v)
- confChangeC <-chan raftpb.ConfChange // proposed cluster config changes
- commitC chan<- *string // entries committed to log (k,v)
- errorC chan<- error // errors from raft session
-
- id int // client ID for raft session
- peers []string // raft peer URLs
- join bool // node is joining an existing cluster
- waldir string // path to WAL directory
- snapdir string // path to snapshot directory
- getSnapshot func() ([]byte, error)
- lastIndex uint64 // index of log at start
-
- confState raftpb.ConfState
- snapshotIndex uint64
- appliedIndex uint64
-
- // raft backing for the commit/error channel
- node raft.Node
- raftStorage *raft.MemoryStorage
- wal *wal.WAL
-
- snapshotter *snap.Snapshotter
- snapshotterReady chan *snap.Snapshotter // signals when snapshotter is ready
-
- snapCount uint64
- transport *rafthttp.Transport
- stopc chan struct{} // signals proposal channel closed
- httpstopc chan struct{} // signals http server to shutdown
- httpdonec chan struct{} // signals http server shutdown complete
-}
-
-var defaultSnapshotCount uint64 = 10000
-
-// newRaftNode initiates a raft instance and returns a committed log entry
-// channel and error channel. Proposals for log updates are sent over the
-// provided the proposal channel. All log entries are replayed over the
-// commit channel, followed by a nil message (to indicate the channel is
-// current), then new log entries. To shutdown, close proposeC and read errorC.
-func newRaftNode(id int, peers []string, join bool, getSnapshot func() ([]byte, error), proposeC <-chan string,
- confChangeC <-chan raftpb.ConfChange) (<-chan *string, <-chan error, <-chan *snap.Snapshotter) {
-
- commitC := make(chan *string)
- errorC := make(chan error)
-
- rc := &raftNode{
- proposeC: proposeC,
- confChangeC: confChangeC,
- commitC: commitC,
- errorC: errorC,
- id: id,
- peers: peers,
- join: join,
- waldir: fmt.Sprintf("raftexample-%d", id),
- snapdir: fmt.Sprintf("raftexample-%d-snap", id),
- getSnapshot: getSnapshot,
- snapCount: defaultSnapshotCount,
- stopc: make(chan struct{}),
- httpstopc: make(chan struct{}),
- httpdonec: make(chan struct{}),
-
- snapshotterReady: make(chan *snap.Snapshotter, 1),
- // rest of structure populated after WAL replay
- }
- go rc.startRaft()
- return commitC, errorC, rc.snapshotterReady
-}
-
-func (rc *raftNode) saveSnap(snap raftpb.Snapshot) error {
- // must save the snapshot index to the WAL before saving the
- // snapshot to maintain the invariant that we only Open the
- // wal at previously-saved snapshot indexes.
- walSnap := walpb.Snapshot{
- Index: snap.Metadata.Index,
- Term: snap.Metadata.Term,
- }
- if err := rc.wal.SaveSnapshot(walSnap); err != nil {
- return err
- }
- if err := rc.snapshotter.SaveSnap(snap); err != nil {
- return err
- }
- return rc.wal.ReleaseLockTo(snap.Metadata.Index)
-}
-
-func (rc *raftNode) entriesToApply(ents []raftpb.Entry) (nents []raftpb.Entry) {
- if len(ents) == 0 {
- return ents
- }
- firstIdx := ents[0].Index
- if firstIdx > rc.appliedIndex+1 {
- log.Fatalf("first index of committed entry[%d] should <= progress.appliedIndex[%d]+1", firstIdx, rc.appliedIndex)
- }
- if rc.appliedIndex-firstIdx+1 < uint64(len(ents)) {
- nents = ents[rc.appliedIndex-firstIdx+1:]
- }
- return nents
-}
-
-// publishEntries writes committed log entries to commit channel and returns
-// whether all entries could be published.
-func (rc *raftNode) publishEntries(ents []raftpb.Entry) bool {
- for i := range ents {
- switch ents[i].Type {
- case raftpb.EntryNormal:
- if len(ents[i].Data) == 0 {
- // ignore empty messages
- break
- }
- s := string(ents[i].Data)
- select {
- case rc.commitC <- &s:
- case <-rc.stopc:
- return false
- }
-
- case raftpb.EntryConfChange:
- var cc raftpb.ConfChange
- cc.Unmarshal(ents[i].Data)
- rc.confState = *rc.node.ApplyConfChange(cc)
- switch cc.Type {
- case raftpb.ConfChangeAddNode:
- if len(cc.Context) > 0 {
- rc.transport.AddPeer(types.ID(cc.NodeID), []string{string(cc.Context)})
- }
- case raftpb.ConfChangeRemoveNode:
- if cc.NodeID == uint64(rc.id) {
- log.Println("I've been removed from the cluster! Shutting down.")
- return false
- }
- rc.transport.RemovePeer(types.ID(cc.NodeID))
- }
- }
-
- // after commit, update appliedIndex
- rc.appliedIndex = ents[i].Index
-
- // special nil commit to signal replay has finished
- if ents[i].Index == rc.lastIndex {
- select {
- case rc.commitC <- nil:
- case <-rc.stopc:
- return false
- }
- }
- }
- return true
-}
-
-func (rc *raftNode) loadSnapshot() *raftpb.Snapshot {
- snapshot, err := rc.snapshotter.Load()
- if err != nil && err != snap.ErrNoSnapshot {
- log.Fatalf("raftexample: error loading snapshot (%v)", err)
- }
- return snapshot
-}
-
-// openWAL returns a WAL ready for reading.
-func (rc *raftNode) openWAL(snapshot *raftpb.Snapshot) *wal.WAL {
- if !wal.Exist(rc.waldir) {
- if err := os.Mkdir(rc.waldir, 0750); err != nil {
- log.Fatalf("raftexample: cannot create dir for wal (%v)", err)
- }
-
- w, err := wal.Create(zap.NewExample(), rc.waldir, nil)
- if err != nil {
- log.Fatalf("raftexample: create wal error (%v)", err)
- }
- w.Close()
- }
-
- walsnap := walpb.Snapshot{}
- if snapshot != nil {
- walsnap.Index, walsnap.Term = snapshot.Metadata.Index, snapshot.Metadata.Term
- }
- log.Printf("loading WAL at term %d and index %d", walsnap.Term, walsnap.Index)
- w, err := wal.Open(zap.NewExample(), rc.waldir, walsnap)
- if err != nil {
- log.Fatalf("raftexample: error loading wal (%v)", err)
- }
-
- return w
-}
-
-// replayWAL replays WAL entries into the raft instance.
-func (rc *raftNode) replayWAL() *wal.WAL {
- log.Printf("replaying WAL of member %d", rc.id)
- snapshot := rc.loadSnapshot()
- w := rc.openWAL(snapshot)
- _, st, ents, err := w.ReadAll()
- if err != nil {
- log.Fatalf("raftexample: failed to read WAL (%v)", err)
- }
- rc.raftStorage = raft.NewMemoryStorage()
- if snapshot != nil {
- rc.raftStorage.ApplySnapshot(*snapshot)
- }
- rc.raftStorage.SetHardState(st)
-
- // append to storage so raft starts at the right place in log
- rc.raftStorage.Append(ents)
- // send nil once lastIndex is published so client knows commit channel is current
- if len(ents) > 0 {
- rc.lastIndex = ents[len(ents)-1].Index
- } else {
- rc.commitC <- nil
- }
- return w
-}
-
-func (rc *raftNode) writeError(err error) {
- rc.stopHTTP()
- close(rc.commitC)
- rc.errorC <- err
- close(rc.errorC)
- rc.node.Stop()
-}
-
-func (rc *raftNode) startRaft() {
- if !fileutil.Exist(rc.snapdir) {
- if err := os.Mkdir(rc.snapdir, 0750); err != nil {
- log.Fatalf("raftexample: cannot create dir for snapshot (%v)", err)
- }
- }
- rc.snapshotter = snap.New(zap.NewExample(), rc.snapdir)
- rc.snapshotterReady <- rc.snapshotter
-
- oldwal := wal.Exist(rc.waldir)
- rc.wal = rc.replayWAL()
-
- rpeers := make([]raft.Peer, len(rc.peers))
- for i := range rpeers {
- rpeers[i] = raft.Peer{ID: uint64(i + 1)}
- }
- c := &raft.Config{
- ID: uint64(rc.id),
- ElectionTick: 10,
- HeartbeatTick: 1,
- Storage: rc.raftStorage,
- MaxSizePerMsg: 1024 * 1024,
- MaxInflightMsgs: 256,
- MaxUncommittedEntriesSize: 1 << 30,
- }
-
- if oldwal {
- rc.node = raft.RestartNode(c)
- } else {
- startPeers := rpeers
- if rc.join {
- startPeers = nil
- }
- rc.node = raft.StartNode(c, startPeers)
- }
-
- rc.transport = &rafthttp.Transport{
- Logger: zap.NewExample(),
- ID: types.ID(rc.id),
- ClusterID: 0x1000,
- Raft: rc,
- ServerStats: stats.NewServerStats("", ""),
- LeaderStats: stats.NewLeaderStats(zap.NewExample(), strconv.Itoa(rc.id)),
- ErrorC: make(chan error),
- }
-
- rc.transport.Start()
- for i := range rc.peers {
- if i+1 != rc.id {
- rc.transport.AddPeer(types.ID(i+1), []string{rc.peers[i]})
- }
- }
-
- go rc.serveRaft()
- go rc.serveChannels()
-}
-
-// stop closes http, closes all channels, and stops raft.
-func (rc *raftNode) stop() {
- rc.stopHTTP()
- close(rc.commitC)
- close(rc.errorC)
- rc.node.Stop()
-}
-
-func (rc *raftNode) stopHTTP() {
- rc.transport.Stop()
- close(rc.httpstopc)
- <-rc.httpdonec
-}
-
-func (rc *raftNode) publishSnapshot(snapshotToSave raftpb.Snapshot) {
- if raft.IsEmptySnap(snapshotToSave) {
- return
- }
-
- log.Printf("publishing snapshot at index %d", rc.snapshotIndex)
- defer log.Printf("finished publishing snapshot at index %d", rc.snapshotIndex)
-
- if snapshotToSave.Metadata.Index <= rc.appliedIndex {
- log.Fatalf("snapshot index [%d] should > progress.appliedIndex [%d]", snapshotToSave.Metadata.Index, rc.appliedIndex)
- }
- rc.commitC <- nil // trigger kvstore to load snapshot
-
- rc.confState = snapshotToSave.Metadata.ConfState
- rc.snapshotIndex = snapshotToSave.Metadata.Index
- rc.appliedIndex = snapshotToSave.Metadata.Index
-}
-
-var snapshotCatchUpEntriesN uint64 = 10000
-
-func (rc *raftNode) maybeTriggerSnapshot() {
- if rc.appliedIndex-rc.snapshotIndex <= rc.snapCount {
- return
- }
-
- log.Printf("start snapshot [applied index: %d | last snapshot index: %d]", rc.appliedIndex, rc.snapshotIndex)
- data, err := rc.getSnapshot()
- if err != nil {
- log.Panic(err)
- }
- snap, err := rc.raftStorage.CreateSnapshot(rc.appliedIndex, &rc.confState, data)
- if err != nil {
- panic(err)
- }
- if err := rc.saveSnap(snap); err != nil {
- panic(err)
- }
-
- compactIndex := uint64(1)
- if rc.appliedIndex > snapshotCatchUpEntriesN {
- compactIndex = rc.appliedIndex - snapshotCatchUpEntriesN
- }
- if err := rc.raftStorage.Compact(compactIndex); err != nil {
- panic(err)
- }
-
- log.Printf("compacted log at index %d", compactIndex)
- rc.snapshotIndex = rc.appliedIndex
-}
-
-func (rc *raftNode) serveChannels() {
- snap, err := rc.raftStorage.Snapshot()
- if err != nil {
- panic(err)
- }
- rc.confState = snap.Metadata.ConfState
- rc.snapshotIndex = snap.Metadata.Index
- rc.appliedIndex = snap.Metadata.Index
-
- defer rc.wal.Close()
-
- ticker := time.NewTicker(100 * time.Millisecond)
- defer ticker.Stop()
-
- // send proposals over raft
- go func() {
- confChangeCount := uint64(0)
-
- for rc.proposeC != nil && rc.confChangeC != nil {
- select {
- case prop, ok := <-rc.proposeC:
- if !ok {
- rc.proposeC = nil
- } else {
- // blocks until accepted by raft state machine
- rc.node.Propose(context.TODO(), []byte(prop))
- }
-
- case cc, ok := <-rc.confChangeC:
- if !ok {
- rc.confChangeC = nil
- } else {
- confChangeCount++
- cc.ID = confChangeCount
- rc.node.ProposeConfChange(context.TODO(), cc)
- }
- }
- }
- // client closed channel; shutdown raft if not already
- close(rc.stopc)
- }()
-
- // event loop on raft state machine updates
- for {
- select {
- case <-ticker.C:
- rc.node.Tick()
-
- // store raft entries to wal, then publish over commit channel
- case rd := <-rc.node.Ready():
- rc.wal.Save(rd.HardState, rd.Entries)
- if !raft.IsEmptySnap(rd.Snapshot) {
- rc.saveSnap(rd.Snapshot)
- rc.raftStorage.ApplySnapshot(rd.Snapshot)
- rc.publishSnapshot(rd.Snapshot)
- }
- rc.raftStorage.Append(rd.Entries)
- rc.transport.Send(rd.Messages)
- if ok := rc.publishEntries(rc.entriesToApply(rd.CommittedEntries)); !ok {
- rc.stop()
- return
- }
- rc.maybeTriggerSnapshot()
- rc.node.Advance()
-
- case err := <-rc.transport.ErrorC:
- rc.writeError(err)
- return
-
- case <-rc.stopc:
- rc.stop()
- return
- }
- }
-}
-
-func (rc *raftNode) serveRaft() {
- url, err := url.Parse(rc.peers[rc.id-1])
- if err != nil {
- log.Fatalf("raftexample: Failed parsing URL (%v)", err)
- }
-
- ln, err := newStoppableListener(url.Host, rc.httpstopc)
- if err != nil {
- log.Fatalf("raftexample: Failed to listen rafthttp (%v)", err)
- }
-
- err = (&http.Server{Handler: rc.transport.Handler()}).Serve(ln)
- select {
- case <-rc.httpstopc:
- default:
- log.Fatalf("raftexample: Failed to serve rafthttp (%v)", err)
- }
- close(rc.httpdonec)
-}
-
-func (rc *raftNode) Process(ctx context.Context, m raftpb.Message) error {
- return rc.node.Step(ctx, m)
-}
-func (rc *raftNode) IsIDRemoved(id uint64) bool { return false }
-func (rc *raftNode) ReportUnreachable(id uint64) {}
-func (rc *raftNode) ReportSnapshot(id uint64, status raft.SnapshotStatus) {}
diff --git a/etcd-fix/contrib/raftexample/raftexample_test.go b/etcd-fix/contrib/raftexample/raftexample_test.go
deleted file mode 100644
index 6c0b629..0000000
--- a/etcd-fix/contrib/raftexample/raftexample_test.go
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "bytes"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/http/httptest"
- "os"
- "testing"
- "time"
-
- "go.etcd.io/etcd/raft/v3/raftpb"
-)
-
-type cluster struct {
- peers []string
- commitC []<-chan *string
- errorC []<-chan error
- proposeC []chan string
- confChangeC []chan raftpb.ConfChange
-}
-
-// newCluster creates a cluster of n nodes
-func newCluster(n int) *cluster {
- peers := make([]string, n)
- for i := range peers {
- peers[i] = fmt.Sprintf("http://127.0.0.1:%d", 10000+i)
- }
-
- clus := &cluster{
- peers: peers,
- commitC: make([]<-chan *string, len(peers)),
- errorC: make([]<-chan error, len(peers)),
- proposeC: make([]chan string, len(peers)),
- confChangeC: make([]chan raftpb.ConfChange, len(peers)),
- }
-
- for i := range clus.peers {
- os.RemoveAll(fmt.Sprintf("raftexample-%d", i+1))
- os.RemoveAll(fmt.Sprintf("raftexample-%d-snap", i+1))
- clus.proposeC[i] = make(chan string, 1)
- clus.confChangeC[i] = make(chan raftpb.ConfChange, 1)
- clus.commitC[i], clus.errorC[i], _ = newRaftNode(i+1, clus.peers, false, nil, clus.proposeC[i], clus.confChangeC[i])
- }
-
- return clus
-}
-
-// sinkReplay reads all commits in each node's local log.
-func (clus *cluster) sinkReplay() {
- for i := range clus.peers {
- for s := range clus.commitC[i] {
- if s == nil {
- break
- }
- }
- }
-}
-
-// Close closes all cluster nodes and returns an error if any failed.
-func (clus *cluster) Close() (err error) {
- for i := range clus.peers {
- close(clus.proposeC[i])
- for range clus.commitC[i] {
- // drain pending commits
- }
- // wait for channel to close
- if erri := <-clus.errorC[i]; erri != nil {
- err = erri
- }
- // clean intermediates
- os.RemoveAll(fmt.Sprintf("raftexample-%d", i+1))
- os.RemoveAll(fmt.Sprintf("raftexample-%d-snap", i+1))
- }
- return err
-}
-
-func (clus *cluster) closeNoErrors(t *testing.T) {
- if err := clus.Close(); err != nil {
- t.Fatal(err)
- }
-}
-
-// TestProposeOnCommit starts three nodes and feeds commits back into the proposal
-// channel. The intent is to ensure blocking on a proposal won't block raft progress.
-func TestProposeOnCommit(t *testing.T) {
- clus := newCluster(3)
- defer clus.closeNoErrors(t)
-
- clus.sinkReplay()
-
- donec := make(chan struct{})
- for i := range clus.peers {
- // feedback for "n" committed entries, then update donec
- go func(pC chan<- string, cC <-chan *string, eC <-chan error) {
- for n := 0; n < 100; n++ {
- s, ok := <-cC
- if !ok {
- pC = nil
- }
- select {
- case pC <- *s:
- continue
- case err := <-eC:
- t.Errorf("eC message (%v)", err)
- }
- }
- donec <- struct{}{}
- for range cC {
- // acknowledge the commits from other nodes so
- // raft continues to make progress
- }
- }(clus.proposeC[i], clus.commitC[i], clus.errorC[i])
-
- // one message feedback per node
- go func(i int) { clus.proposeC[i] <- "foo" }(i)
- }
-
- for range clus.peers {
- <-donec
- }
-}
-
-// TestCloseProposerBeforeReplay tests closing the producer before raft starts.
-func TestCloseProposerBeforeReplay(t *testing.T) {
- clus := newCluster(1)
- // close before replay so raft never starts
- defer clus.closeNoErrors(t)
-}
-
-// TestCloseProposerInflight tests closing the producer while
-// committed messages are being published to the client.
-func TestCloseProposerInflight(t *testing.T) {
- clus := newCluster(1)
- defer clus.closeNoErrors(t)
-
- clus.sinkReplay()
-
- // some inflight ops
- go func() {
- clus.proposeC[0] <- "foo"
- clus.proposeC[0] <- "bar"
- }()
-
- // wait for one message
- if c, ok := <-clus.commitC[0]; *c != "foo" || !ok {
- t.Fatalf("Commit failed")
- }
-}
-
-func TestPutAndGetKeyValue(t *testing.T) {
- clusters := []string{"http://127.0.0.1:9021"}
-
- proposeC := make(chan string)
- defer close(proposeC)
-
- confChangeC := make(chan raftpb.ConfChange)
- defer close(confChangeC)
-
- var kvs *kvstore
- getSnapshot := func() ([]byte, error) { return kvs.getSnapshot() }
- commitC, errorC, snapshotterReady := newRaftNode(1, clusters, false, getSnapshot, proposeC, confChangeC)
-
- kvs = newKVStore(<-snapshotterReady, proposeC, commitC, errorC)
-
- srv := httptest.NewServer(&httpKVAPI{
- store: kvs,
- confChangeC: confChangeC,
- })
- defer srv.Close()
-
- // wait server started
- <-time.After(time.Second * 3)
-
- wantKey, wantValue := "test-key", "test-value"
- url := fmt.Sprintf("%s/%s", srv.URL, wantKey)
- body := bytes.NewBufferString(wantValue)
- cli := srv.Client()
-
- req, err := http.NewRequest("PUT", url, body)
- if err != nil {
- t.Fatal(err)
- }
- req.Header.Set("Content-Type", "text/html; charset=utf-8")
- _, err = cli.Do(req)
- if err != nil {
- t.Fatal(err)
- }
-
- // wait for a moment for processing message, otherwise get would be failed.
- <-time.After(time.Second)
-
- resp, err := cli.Get(url)
- if err != nil {
- t.Fatal(err)
- }
-
- data, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- t.Fatal(err)
- }
- defer resp.Body.Close()
-
- if gotValue := string(data); wantValue != gotValue {
- t.Fatalf("expect %s, got %s", wantValue, gotValue)
- }
-}
diff --git a/etcd-fix/contrib/systemd/etcd.service b/etcd-fix/contrib/systemd/etcd.service
deleted file mode 100644
index 787413c..0000000
--- a/etcd-fix/contrib/systemd/etcd.service
+++ /dev/null
@@ -1,17 +0,0 @@
-[Unit]
-Description=etcd key-value store
-Documentation=https://github.com/etcd-io/etcd
-After=network.target
-
-[Service]
-User=etcd
-Type=notify
-Environment=ETCD_DATA_DIR=/var/lib/etcd
-Environment=ETCD_NAME=%m
-ExecStart=/usr/bin/etcd
-Restart=always
-RestartSec=10s
-LimitNOFILE=40000
-
-[Install]
-WantedBy=multi-user.target
diff --git a/etcd-fix/contrib/systemd/etcd3-multinode/README.md b/etcd-fix/contrib/systemd/etcd3-multinode/README.md
deleted file mode 100644
index cab9ab4..0000000
--- a/etcd-fix/contrib/systemd/etcd3-multinode/README.md
+++ /dev/null
@@ -1,173 +0,0 @@
-# etcd3 multi-node cluster
-
-Here's how to deploy etcd cluster with systemd.
-
-## Set up data directory
-
-etcd needs data directory on host machine. Configure the data directory accessible to systemd as:
-
-```
-sudo mkdir -p /var/lib/etcd
-sudo chown -R root:$(whoami) /var/lib/etcd
-sudo chmod -R a+rw /var/lib/etcd
-```
-
-## Write systemd service file
-
-In each machine, write etcd systemd service files:
-
-```
-cat > /tmp/my-etcd-1.service < /tmp/my-etcd-2.service < /tmp/my-etcd-3.service < \
-
-PUT assigns the specified value with the specified key. If key already holds a value, it is overwritten.
-
-RPC: Put
-
-#### Options
-
-- lease -- lease ID (in hexadecimal) to attach to the key.
-
-- prev-kv -- return the previous key-value pair before modification.
-
-- ignore-value -- updates the key using its current value.
-
-- ignore-lease -- updates the key using its current lease.
-
-#### Output
-
-`OK`
-
-#### Examples
-
-```bash
-./etcdctl put foo bar --lease=1234abcd
-# OK
-./etcdctl get foo
-# foo
-# bar
-./etcdctl put foo --ignore-value # to detache lease
-# OK
-```
-
-```bash
-./etcdctl put foo bar --lease=1234abcd
-# OK
-./etcdctl put foo bar1 --ignore-lease # to use existing lease 1234abcd
-# OK
-./etcdctl get foo
-# foo
-# bar1
-```
-
-```bash
-./etcdctl put foo bar1 --prev-kv
-# OK
-# foo
-# bar
-./etcdctl get foo
-# foo
-# bar1
-```
-
-#### Remarks
-
-If \ isn't given as command line argument, this command tries to read the value from standard input.
-
-When \ begins with '-', \ is interpreted as a flag.
-Insert '--' for workaround:
-
-```bash
-./etcdctl put --
-./etcdctl put --
-```
-
-Providing \ in a new line after using `carriage return` is not supported and etcdctl may hang in that case. For example, following case is not supported:
-
-```bash
-./etcdctl put \r
-
-```
-
-A \ can have multiple lines or spaces but it must be provided with a double-quote as demonstrated below:
-
-```bash
-./etcdctl put foo "bar1 2 3"
-```
-
-### GET [options] \ [range_end]
-
-GET gets the key or a range of keys [key, range_end) if range_end is given.
-
-RPC: Range
-
-#### Options
-
-- hex -- print out key and value as hex encode string
-
-- limit -- maximum number of results
-
-- prefix -- get keys by matching prefix
-
-- order -- order of results; ASCEND or DESCEND
-
-- sort-by -- sort target; CREATE, KEY, MODIFY, VALUE, or VERSION
-
-- rev -- specify the kv revision
-
-- print-value-only -- print only value when used with write-out=simple
-
-- consistency -- Linearizable(l) or Serializable(s)
-
-- from-key -- Get keys that are greater than or equal to the given key using byte compare
-
-- keys-only -- Get only the keys
-
-#### Output
-
-\\n\\n\\n\...
-
-#### Examples
-
-First, populate etcd with some keys:
-
-```bash
-./etcdctl put foo bar
-# OK
-./etcdctl put foo1 bar1
-# OK
-./etcdctl put foo2 bar2
-# OK
-./etcdctl put foo3 bar3
-# OK
-```
-
-Get the key named `foo`:
-
-```bash
-./etcdctl get foo
-# foo
-# bar
-```
-
-Get all keys:
-
-```bash
-./etcdctl get --from-key ''
-# foo
-# bar
-# foo1
-# bar1
-# foo2
-# foo2
-# foo3
-# bar3
-```
-
-Get all keys with names greater than or equal to `foo1`:
-
-```bash
-./etcdctl get --from-key foo1
-# foo1
-# bar1
-# foo2
-# bar2
-# foo3
-# bar3
-```
-
-Get keys with names greater than or equal to `foo1` and less than `foo3`:
-
-```bash
-./etcdctl get foo1 foo3
-# foo1
-# bar1
-# foo2
-# bar2
-```
-
-#### Remarks
-
-If any key or value contains non-printable characters or control characters, simple formatted output can be ambiguous due to new lines. To resolve this issue, set `--hex` to hex encode all strings.
-
-### DEL [options] \ [range_end]
-
-Removes the specified key or range of keys [key, range_end) if range_end is given.
-
-RPC: DeleteRange
-
-#### Options
-
-- prefix -- delete keys by matching prefix
-
-- prev-kv -- return deleted key-value pairs
-
-- from-key -- delete keys that are greater than or equal to the given key using byte compare
-
-#### Output
-
-Prints the number of keys that were removed in decimal if DEL succeeded.
-
-#### Examples
-
-```bash
-./etcdctl put foo bar
-# OK
-./etcdctl del foo
-# 1
-./etcdctl get foo
-```
-
-```bash
-./etcdctl put key val
-# OK
-./etcdctl del --prev-kv key
-# 1
-# key
-# val
-./etcdctl get key
-```
-
-```bash
-./etcdctl put a 123
-# OK
-./etcdctl put b 456
-# OK
-./etcdctl put z 789
-# OK
-./etcdctl del --from-key a
-# 3
-./etcdctl get --from-key a
-```
-
-```bash
-./etcdctl put zoo val
-# OK
-./etcdctl put zoo1 val1
-# OK
-./etcdctl put zoo2 val2
-# OK
-./etcdctl del --prefix zoo
-# 3
-./etcdctl get zoo2
-```
-
-### TXN [options]
-
-TXN reads multiple etcd requests from standard input and applies them as a single atomic transaction.
-A transaction consists of list of conditions, a list of requests to apply if all the conditions are true, and a list of requests to apply if any condition is false.
-
-RPC: Txn
-
-#### Options
-
-- hex -- print out keys and values as hex encoded strings.
-
-- interactive -- input transaction with interactive prompting.
-
-#### Input Format
-```ebnf
- ::= * "\n" "\n" "\n"
- ::= (||||) "\n"
- ::= "<" | "=" | ">"
- := ("c"|"create")"("")"
- ::= ("m"|"mod")"("")"
- ::= ("val"|"value")"("")"
- ::= ("ver"|"version")"("")"
- ::= "lease("")"
- ::= *
- ::= *
- ::= ((see put, get, del etcdctl command syntax)) "\n"
- ::= (%q formatted string)
- ::= (%q formatted string)
- ::= "\""[0-9]+"\""
- ::= "\""[0-9]+"\""
- ::= "\""[0-9]+\""
-```
-
-#### Output
-
-`SUCCESS` if etcd processed the transaction success list, `FAILURE` if etcd processed the transaction failure list. Prints the output for each command in the executed request list, each separated by a blank line.
-
-#### Examples
-
-txn in interactive mode:
-```bash
-./etcdctl txn -i
-# compares:
-mod("key1") > "0"
-
-# success requests (get, put, delete):
-put key1 "overwrote-key1"
-
-# failure requests (get, put, delete):
-put key1 "created-key1"
-put key2 "some extra key"
-
-# FAILURE
-
-# OK
-
-# OK
-```
-
-txn in non-interactive mode:
-```bash
-./etcdctl txn <<<'mod("key1") > "0"
-
-put key1 "overwrote-key1"
-
-put key1 "created-key1"
-put key2 "some extra key"
-
-'
-
-# FAILURE
-
-# OK
-
-# OK
-```
-
-#### Remarks
-
-When using multi-line values within a TXN command, newlines must be represented as `\n`. Literal newlines will cause parsing failures. This differs from other commands (such as PUT) where the shell will convert literal newlines for us. For example:
-
-```bash
-./etcdctl txn <<<'mod("key1") > "0"
-
-put key1 "overwrote-key1"
-
-put key1 "created-key1"
-put key2 "this is\na multi-line\nvalue"
-
-'
-
-# FAILURE
-
-# OK
-
-# OK
-```
-
-### COMPACTION [options] \
-
-COMPACTION discards all etcd event history prior to a given revision. Since etcd uses a multiversion concurrency control
-model, it preserves all key updates as event history. When the event history up to some revision is no longer needed,
-all superseded keys may be compacted away to reclaim storage space in the etcd backend database.
-
-RPC: Compact
-
-#### Options
-
-- physical -- 'true' to wait for compaction to physically remove all old revisions
-
-#### Output
-
-Prints the compacted revision.
-
-#### Example
-```bash
-./etcdctl compaction 1234
-# compacted revision 1234
-```
-
-### WATCH [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...]
-
-Watch watches events stream on keys or prefixes, [key or prefix, range_end) if range_end is given. The watch command runs until it encounters an error or is terminated by the user. If range_end is given, it must be lexicographically greater than key or "\x00".
-
-RPC: Watch
-
-#### Options
-
-- hex -- print out key and value as hex encode string
-
-- interactive -- begins an interactive watch session
-
-- prefix -- watch on a prefix if prefix is set.
-
-- prev-kv -- get the previous key-value pair before the event happens.
-
-- rev -- the revision to start watching. Specifying a revision is useful for observing past events.
-
-#### Input format
-
-Input is only accepted for interactive mode.
-
-```
-watch [options] \n
-```
-
-#### Output
-
-\[\n\\n\]\n\\n\\n\\n\\n\\n...
-
-#### Examples
-
-##### Non-interactive
-
-```bash
-./etcdctl watch foo
-# PUT
-# foo
-# bar
-```
-
-```bash
-ETCDCTL_WATCH_KEY=foo ./etcdctl watch
-# PUT
-# foo
-# bar
-```
-
-Receive events and execute `echo watch event received`:
-
-```bash
-./etcdctl watch foo -- echo watch event received
-# PUT
-# foo
-# bar
-# watch event received
-```
-
-Watch response is set via `ETCD_WATCH_*` environmental variables:
-
-```bash
-./etcdctl watch foo -- sh -c "env | grep ETCD_WATCH_"
-
-# PUT
-# foo
-# bar
-# ETCD_WATCH_REVISION=11
-# ETCD_WATCH_KEY="foo"
-# ETCD_WATCH_EVENT_TYPE="PUT"
-# ETCD_WATCH_VALUE="bar"
-```
-
-Watch with environmental variables and execute `echo watch event received`:
-
-```bash
-export ETCDCTL_WATCH_KEY=foo
-./etcdctl watch -- echo watch event received
-# PUT
-# foo
-# bar
-# watch event received
-```
-
-```bash
-export ETCDCTL_WATCH_KEY=foo
-export ETCDCTL_WATCH_RANGE_END=foox
-./etcdctl watch -- echo watch event received
-# PUT
-# fob
-# bar
-# watch event received
-```
-
-##### Interactive
-
-```bash
-./etcdctl watch -i
-watch foo
-watch foo
-# PUT
-# foo
-# bar
-# PUT
-# foo
-# bar
-```
-
-Receive events and execute `echo watch event received`:
-
-```bash
-./etcdctl watch -i
-watch foo -- echo watch event received
-# PUT
-# foo
-# bar
-# watch event received
-```
-
-Watch with environmental variables and execute `echo watch event received`:
-
-```bash
-export ETCDCTL_WATCH_KEY=foo
-./etcdctl watch -i
-watch -- echo watch event received
-# PUT
-# foo
-# bar
-# watch event received
-```
-
-```bash
-export ETCDCTL_WATCH_KEY=foo
-export ETCDCTL_WATCH_RANGE_END=foox
-./etcdctl watch -i
-watch -- echo watch event received
-# PUT
-# fob
-# bar
-# watch event received
-```
-
-### LEASE \
-
-LEASE provides commands for key lease management.
-
-### LEASE GRANT \
-
-LEASE GRANT creates a fresh lease with a server-selected time-to-live in seconds
-greater than or equal to the requested TTL value.
-
-RPC: LeaseGrant
-
-#### Output
-
-Prints a message with the granted lease ID.
-
-#### Example
-
-```bash
-./etcdctl lease grant 60
-# lease 32695410dcc0ca06 granted with TTL(60s)
-```
-
-### LEASE REVOKE \
-
-LEASE REVOKE destroys a given lease, deleting all attached keys.
-
-RPC: LeaseRevoke
-
-#### Output
-
-Prints a message indicating the lease is revoked.
-
-#### Example
-
-```bash
-./etcdctl lease revoke 32695410dcc0ca06
-# lease 32695410dcc0ca06 revoked
-```
-
-### LEASE TIMETOLIVE \ [options]
-
-LEASE TIMETOLIVE retrieves the lease information with the given lease ID.
-
-RPC: LeaseTimeToLive
-
-#### Options
-
-- keys -- Get keys attached to this lease
-
-#### Output
-
-Prints lease information.
-
-#### Example
-
-```bash
-./etcdctl lease grant 500
-# lease 2d8257079fa1bc0c granted with TTL(500s)
-
-./etcdctl put foo1 bar --lease=2d8257079fa1bc0c
-# OK
-
-./etcdctl put foo2 bar --lease=2d8257079fa1bc0c
-# OK
-
-./etcdctl lease timetolive 2d8257079fa1bc0c
-# lease 2d8257079fa1bc0c granted with TTL(500s), remaining(481s)
-
-./etcdctl lease timetolive 2d8257079fa1bc0c --keys
-# lease 2d8257079fa1bc0c granted with TTL(500s), remaining(472s), attached keys([foo2 foo1])
-
-./etcdctl lease timetolive 2d8257079fa1bc0c --write-out=json
-# {"cluster_id":17186838941855831277,"member_id":4845372305070271874,"revision":3,"raft_term":2,"id":3279279168933706764,"ttl":465,"granted-ttl":500,"keys":null}
-
-./etcdctl lease timetolive 2d8257079fa1bc0c --write-out=json --keys
-# {"cluster_id":17186838941855831277,"member_id":4845372305070271874,"revision":3,"raft_term":2,"id":3279279168933706764,"ttl":459,"granted-ttl":500,"keys":["Zm9vMQ==","Zm9vMg=="]}
-
-./etcdctl lease timetolive 2d8257079fa1bc0c
-# lease 2d8257079fa1bc0c already expired
-```
-
-### LEASE LIST
-
-LEASE LIST lists all active leases.
-
-RPC: LeaseLeases
-
-#### Output
-
-Prints a message with a list of active leases.
-
-#### Example
-
-```bash
-./etcdctl lease grant 60
-# lease 32695410dcc0ca06 granted with TTL(60s)
-
-./etcdctl lease list
-32695410dcc0ca06
-```
-
-### LEASE KEEP-ALIVE \
-
-LEASE KEEP-ALIVE periodically refreshes a lease so it does not expire.
-
-RPC: LeaseKeepAlive
-
-#### Output
-
-Prints a message for every keep alive sent or prints a message indicating the lease is gone.
-
-#### Example
-```bash
-./etcdctl lease keep-alive 32695410dcc0ca0
-# lease 32695410dcc0ca0 keepalived with TTL(100)
-# lease 32695410dcc0ca0 keepalived with TTL(100)
-# lease 32695410dcc0ca0 keepalived with TTL(100)
-...
-```
-
-## Cluster maintenance commands
-
-### MEMBER \
-
-MEMBER provides commands for managing etcd cluster membership.
-
-### MEMBER ADD \ [options]
-
-MEMBER ADD introduces a new member into the etcd cluster as a new peer.
-
-RPC: MemberAdd
-
-#### Options
-
-- peer-urls -- comma separated list of URLs to associate with the new member.
-
-#### Output
-
-Prints the member ID of the new member and the cluster ID.
-
-#### Example
-
-```bash
-./etcdctl member add newMember --peer-urls=https://127.0.0.1:12345
-
-Member ced000fda4d05edf added to cluster 8c4281cc65c7b112
-
-ETCD_NAME="newMember"
-ETCD_INITIAL_CLUSTER="newMember=https://127.0.0.1:12345,default=http://10.0.0.30:2380"
-ETCD_INITIAL_CLUSTER_STATE="existing"
-```
-
-### MEMBER UPDATE \ [options]
-
-MEMBER UPDATE sets the peer URLs for an existing member in the etcd cluster.
-
-RPC: MemberUpdate
-
-#### Options
-
-- peer-urls -- comma separated list of URLs to associate with the updated member.
-
-#### Output
-
-Prints the member ID of the updated member and the cluster ID.
-
-#### Example
-
-```bash
-./etcdctl member update 2be1eb8f84b7f63e --peer-urls=https://127.0.0.1:11112
-# Member 2be1eb8f84b7f63e updated in cluster ef37ad9dc622a7c4
-```
-
-### MEMBER REMOVE \
-
-MEMBER REMOVE removes a member of an etcd cluster from participating in cluster consensus.
-
-RPC: MemberRemove
-
-#### Output
-
-Prints the member ID of the removed member and the cluster ID.
-
-#### Example
-
-```bash
-./etcdctl member remove 2be1eb8f84b7f63e
-# Member 2be1eb8f84b7f63e removed from cluster ef37ad9dc622a7c4
-```
-
-### MEMBER LIST
-
-MEMBER LIST prints the member details for all members associated with an etcd cluster.
-
-RPC: MemberList
-
-#### Output
-
-Prints a humanized table of the member IDs, statuses, names, peer addresses, and client addresses.
-
-#### Examples
-
-```bash
-./etcdctl member list
-# 8211f1d0f64f3269, started, infra1, http://127.0.0.1:12380, http://127.0.0.1:2379
-# 91bc3c398fb3c146, started, infra2, http://127.0.0.1:22380, http://127.0.0.1:22379
-# fd422379fda50e48, started, infra3, http://127.0.0.1:32380, http://127.0.0.1:32379
-```
-
-```bash
-./etcdctl -w json member list
-# {"header":{"cluster_id":17237436991929493444,"member_id":9372538179322589801,"raft_term":2},"members":[{"ID":9372538179322589801,"name":"infra1","peerURLs":["http://127.0.0.1:12380"],"clientURLs":["http://127.0.0.1:2379"]},{"ID":10501334649042878790,"name":"infra2","peerURLs":["http://127.0.0.1:22380"],"clientURLs":["http://127.0.0.1:22379"]},{"ID":18249187646912138824,"name":"infra3","peerURLs":["http://127.0.0.1:32380"],"clientURLs":["http://127.0.0.1:32379"]}]}
-```
-
-```bash
-./etcdctl -w table member list
-+------------------+---------+--------+------------------------+------------------------+
-| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |
-+------------------+---------+--------+------------------------+------------------------+
-| 8211f1d0f64f3269 | started | infra1 | http://127.0.0.1:12380 | http://127.0.0.1:2379 |
-| 91bc3c398fb3c146 | started | infra2 | http://127.0.0.1:22380 | http://127.0.0.1:22379 |
-| fd422379fda50e48 | started | infra3 | http://127.0.0.1:32380 | http://127.0.0.1:32379 |
-+------------------+---------+--------+------------------------+------------------------+
-```
-
-### ENDPOINT \
-
-ENDPOINT provides commands for querying individual endpoints.
-
-#### Options
-
-- cluster -- fetch and use all endpoints from the etcd cluster member list
-
-### ENDPOINT HEALTH
-
-ENDPOINT HEALTH checks the health of the list of endpoints with respect to cluster. An endpoint is unhealthy
-when it cannot participate in consensus with the rest of the cluster.
-
-#### Output
-
-If an endpoint can participate in consensus, prints a message indicating the endpoint is healthy. If an endpoint fails to participate in consensus, prints a message indicating the endpoint is unhealthy.
-
-#### Example
-
-Check the default endpoint's health:
-
-```bash
-./etcdctl endpoint health
-# 127.0.0.1:2379 is healthy: successfully committed proposal: took = 2.095242ms
-```
-
-Check all endpoints for the cluster associated with the default endpoint:
-
-```bash
-./etcdctl endpoint --cluster health
-# http://127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.060091ms
-# http://127.0.0.1:22379 is healthy: successfully committed proposal: took = 903.138µs
-# http://127.0.0.1:32379 is healthy: successfully committed proposal: took = 1.113848ms
-```
-
-### ENDPOINT STATUS
-
-ENDPOINT STATUS queries the status of each endpoint in the given endpoint list.
-
-#### Output
-
-##### Simple format
-
-Prints a humanized table of each endpoint URL, ID, version, database size, leadership status, raft term, and raft status.
-
-##### JSON format
-
-Prints a line of JSON encoding each endpoint URL, ID, version, database size, leadership status, raft term, and raft status.
-
-#### Examples
-
-Get the status for the default endpoint:
-
-```bash
-./etcdctl endpoint status
-# 127.0.0.1:2379, 8211f1d0f64f3269, 3.0.0, 25 kB, false, 2, 63
-```
-
-Get the status for the default endpoint as JSON:
-
-```bash
-./etcdctl -w json endpoint status
-# [{"Endpoint":"127.0.0.1:2379","Status":{"header":{"cluster_id":17237436991929493444,"member_id":9372538179322589801,"revision":2,"raft_term":2},"version":"3.0.0","dbSize":24576,"leader":18249187646912138824,"raftIndex":32623,"raftTerm":2}}]
-```
-
-Get the status for all endpoints in the cluster associated with the default endpoint:
-
-```bash
-./etcdctl -w table endpoint --cluster status
-+------------------------+------------------+----------------+---------+-----------+-----------+------------+
-| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
-+------------------------+------------------+----------------+---------+-----------+-----------+------------+
-| http://127.0.0.1:2379 | 8211f1d0f64f3269 | 3.2.0-rc.1+git | 25 kB | false | 2 | 8 |
-| http://127.0.0.1:22379 | 91bc3c398fb3c146 | 3.2.0-rc.1+git | 25 kB | false | 2 | 8 |
-| http://127.0.0.1:32379 | fd422379fda50e48 | 3.2.0-rc.1+git | 25 kB | true | 2 | 8 |
-+------------------------+------------------+----------------+---------+-----------+-----------+------------+
-```
-
-### ENDPOINT HASHKV
-
-ENDPOINT HASHKV fetches the hash of the key-value store of an endpoint.
-
-#### Output
-
-##### Simple format
-
-Prints a humanized table of each endpoint URL and KV history hash.
-
-##### JSON format
-
-Prints a line of JSON encoding each endpoint URL and KV history hash.
-
-#### Examples
-
-Get the hash for the default endpoint:
-
-```bash
-./etcdctl endpoint hashkv
-# 127.0.0.1:2379, 1084519789
-```
-
-Get the status for the default endpoint as JSON:
-
-```bash
-./etcdctl -w json endpoint hashkv
-# [{"Endpoint":"127.0.0.1:2379","Hash":{"header":{"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":1,"raft_term":3},"hash":1084519789,"compact_revision":-1}}]
-```
-
-Get the status for all endpoints in the cluster associated with the default endpoint:
-
-```bash
-./etcdctl -w table endpoint --cluster hashkv
-+------------------------+------------+
-| ENDPOINT | HASH |
-+------------------------+------------+
-| http://127.0.0.1:2379 | 1084519789 |
-| http://127.0.0.1:22379 | 1084519789 |
-| http://127.0.0.1:32379 | 1084519789 |
-+------------------------+------------+
-```
-
-### ALARM \
-
-Provides alarm related commands
-
-### ALARM DISARM
-
-`alarm disarm` Disarms all alarms
-
-RPC: Alarm
-
-#### Output
-
-`alarm:` if alarm is present and disarmed.
-
-#### Examples
-
-```bash
-./etcdctl alarm disarm
-```
-
-If NOSPACE alarm is present:
-
-```bash
-./etcdctl alarm disarm
-# alarm:NOSPACE
-```
-
-### ALARM LIST
-
-`alarm list` lists all alarms.
-
-RPC: Alarm
-
-#### Output
-
-`alarm:` if alarm is present, empty string if no alarms present.
-
-#### Examples
-
-```bash
-./etcdctl alarm list
-```
-
-If NOSPACE alarm is present:
-
-```bash
-./etcdctl alarm list
-# alarm:NOSPACE
-```
-
-### DEFRAG [options]
-
-DEFRAG defragments the backend database file for a set of given endpoints while etcd is running, or directly defragments an etcd data directory while etcd is not running. When an etcd member reclaims storage space from deleted and compacted keys, the space is kept in a free list and the database file remains the same size. By defragmenting the database, the etcd member releases this free space back to the file system.
-
-**Note that defragmentation to a live member blocks the system from reading and writing data while rebuilding its states.**
-
-**Note that defragmentation request does not get replicated over cluster. That is, the request is only applied to the local node. Specify all members in `--endpoints` flag or `--cluster` flag to automatically find all cluster members.**
-
-#### Options
-
-- data-dir -- Optional. If present, defragments a data directory not in use by etcd.
-
-#### Output
-
-For each endpoints, prints a message indicating whether the endpoint was successfully defragmented.
-
-#### Example
-
-```bash
-./etcdctl --endpoints=localhost:2379,badendpoint:2379 defrag
-# Finished defragmenting etcd member[localhost:2379]
-# Failed to defragment etcd member[badendpoint:2379] (grpc: timed out trying to connect)
-```
-
-Run defragment operations for all endpoints in the cluster associated with the default endpoint:
-
-```bash
-./etcdctl defrag --cluster
-Finished defragmenting etcd member[http://127.0.0.1:2379]
-Finished defragmenting etcd member[http://127.0.0.1:22379]
-Finished defragmenting etcd member[http://127.0.0.1:32379]
-```
-
-To defragment a data directory directly, use the `--data-dir` flag:
-
-``` bash
-# Defragment while etcd is not running
-./etcdctl defrag --data-dir default.etcd
-# success (exit status 0)
-# Error: cannot open database at default.etcd/member/snap/db
-```
-
-#### Remarks
-
-DEFRAG returns a zero exit code only if it succeeded defragmenting all given endpoints.
-
-### SNAPSHOT \
-
-SNAPSHOT provides commands to restore a snapshot of a running etcd server into a fresh cluster.
-
-### SNAPSHOT SAVE \
-
-SNAPSHOT SAVE writes a point-in-time snapshot of the etcd backend database to a file.
-
-#### Output
-
-The backend snapshot is written to the given file path.
-
-#### Example
-
-Save a snapshot to "snapshot.db":
-```
-./etcdctl snapshot save snapshot.db
-```
-
-### SNAPSHOT RESTORE [options] \
-
-SNAPSHOT RESTORE creates an etcd data directory for an etcd cluster member from a backend database snapshot and a new cluster configuration. Restoring the snapshot into each member for a new cluster configuration will initialize a new etcd cluster preloaded by the snapshot data.
-
-#### Options
-
-The snapshot restore options closely resemble to those used in the `etcd` command for defining a cluster.
-
-- data-dir -- Path to the data directory. Uses \.etcd if none given.
-
-- wal-dir -- Path to the WAL directory. Uses data directory if none given.
-
-- initial-cluster -- The initial cluster configuration for the restored etcd cluster.
-
-- initial-cluster-token -- Initial cluster token for the restored etcd cluster.
-
-- initial-advertise-peer-urls -- List of peer URLs for the member being restored.
-
-- name -- Human-readable name for the etcd cluster member being restored.
-
-- skip-hash-check -- Ignore snapshot integrity hash value (required if copied from data directory)
-
-#### Output
-
-A new etcd data directory initialized with the snapshot.
-
-#### Example
-
-Save a snapshot, restore into a new 3 node cluster, and start the cluster:
-```
-./etcdctl snapshot save snapshot.db
-
-# restore members
-bin/etcdctl snapshot restore snapshot.db --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://127.0.0.1:12380 --name sshot1 --initial-cluster 'sshot1=http://127.0.0.1:12380,sshot2=http://127.0.0.1:22380,sshot3=http://127.0.0.1:32380'
-bin/etcdctl snapshot restore snapshot.db --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://127.0.0.1:22380 --name sshot2 --initial-cluster 'sshot1=http://127.0.0.1:12380,sshot2=http://127.0.0.1:22380,sshot3=http://127.0.0.1:32380'
-bin/etcdctl snapshot restore snapshot.db --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://127.0.0.1:32380 --name sshot3 --initial-cluster 'sshot1=http://127.0.0.1:12380,sshot2=http://127.0.0.1:22380,sshot3=http://127.0.0.1:32380'
-
-# launch members
-bin/etcd --name sshot1 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:12380 &
-bin/etcd --name sshot2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 &
-bin/etcd --name sshot3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 &
-```
-
-### SNAPSHOT STATUS \
-
-SNAPSHOT STATUS lists information about a given backend database snapshot file.
-
-#### Output
-
-##### Simple format
-
-Prints a humanized table of the database hash, revision, total keys, and size.
-
-##### JSON format
-
-Prints a line of JSON encoding the database hash, revision, total keys, and size.
-
-#### Examples
-```bash
-./etcdctl snapshot status file.db
-# cf1550fb, 3, 3, 25 kB
-```
-
-```bash
-./etcdctl -write-out=json snapshot status file.db
-# {"hash":3474280699,"revision":3,"totalKey":3,"totalSize":24576}
-```
-
-```bash
-./etcdctl -write-out=table snapshot status file.db
-+----------+----------+------------+------------+
-| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
-+----------+----------+------------+------------+
-| cf1550fb | 3 | 3 | 25 kB |
-+----------+----------+------------+------------+
-```
-
-### MOVE-LEADER \
-
-MOVE-LEADER transfers leadership from the leader to another member in the cluster.
-
-#### Example
-
-```bash
-# to choose transferee
-transferee_id=$(./etcdctl \
- --endpoints localhost:2379,localhost:22379,localhost:32379 \
- endpoint status | grep -m 1 "false" | awk -F', ' '{print $2}')
-echo ${transferee_id}
-# c89feb932daef420
-
-# endpoints should include leader node
-./etcdctl --endpoints ${transferee_ep} move-leader ${transferee_id}
-# Error: no leader endpoint given at [localhost:22379 localhost:32379]
-
-# request to leader with target node ID
-./etcdctl --endpoints ${leader_ep} move-leader ${transferee_id}
-# Leadership transferred from 45ddc0e800e20b93 to c89feb932daef420
-```
-
-## Concurrency commands
-
-### LOCK [options] \ [command arg1 arg2 ...]
-
-LOCK acquires a distributed mutex with a given name. Once the lock is acquired, it will be held until etcdctl is terminated.
-
-#### Options
-
-- ttl - time out in seconds of lock session.
-
-#### Output
-
-Once the lock is acquired but no command is given, the result for the GET on the unique lock holder key is displayed.
-
-If a command is given, it will be executed with environment variables `ETCD_LOCK_KEY` and `ETCD_LOCK_REV` set to the lock's holder key and revision.
-
-#### Example
-
-Acquire lock with standard output display:
-
-```bash
-./etcdctl lock mylock
-# mylock/1234534535445
-```
-
-Acquire lock and execute `echo lock acquired`:
-
-```bash
-./etcdctl lock mylock echo lock acquired
-# lock acquired
-```
-
-Acquire lock and execute `etcdctl put` command
-```bash
-./etcdctl lock mylock ./etcdctl put foo bar
-# OK
-```
-
-#### Remarks
-
-LOCK returns a zero exit code only if it is terminated by a signal and releases the lock.
-
-If LOCK is abnormally terminated or fails to contact the cluster to release the lock, the lock will remain held until the lease expires. Progress may be delayed by up to the default lease length of 60 seconds.
-
-### ELECT [options] \ [proposal]
-
-ELECT participates on a named election. A node announces its candidacy in the election by providing
-a proposal value. If a node wishes to observe the election, ELECT listens for new leaders values.
-Whenever a leader is elected, its proposal is given as output.
-
-#### Options
-
-- listen -- observe the election.
-
-#### Output
-
-- If a candidate, ELECT displays the GET on the leader key once the node is elected election.
-
-- If observing, ELECT streams the result for a GET on the leader key for the current election and all future elections.
-
-#### Example
-
-```bash
-./etcdctl elect myelection foo
-# myelection/1456952310051373265
-# foo
-```
-
-#### Remarks
-
-ELECT returns a zero exit code only if it is terminated by a signal and can revoke its candidacy or leadership, if any.
-
-If a candidate is abnormally terminated, election rogress may be delayed by up to the default lease length of 60 seconds.
-
-## Authentication commands
-
-### AUTH \
-
-`auth enable` activates authentication on an etcd cluster and `auth disable` deactivates. When authentication is enabled, etcd checks all requests for appropriate authorization.
-
-RPC: AuthEnable/AuthDisable
-
-#### Output
-
-`Authentication Enabled`.
-
-#### Examples
-
-```bash
-./etcdctl user add root
-# Password of root:#type password for root
-# Type password of root again for confirmation:#re-type password for root
-# User root created
-./etcdctl user grant-role root root
-# Role root is granted to user root
-./etcdctl user get root
-# User: root
-# Roles: root
-./etcdctl role add root
-# Role root created
-./etcdctl role get root
-# Role root
-# KV Read:
-# KV Write:
-./etcdctl auth enable
-# Authentication Enabled
-```
-
-### ROLE \
-
-ROLE is used to specify different roles which can be assigned to etcd user(s).
-
-### ROLE ADD \
-
-`role add` creates a role.
-
-RPC: RoleAdd
-
-#### Output
-
-`Role created`.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 role add myrole
-# Role myrole created
-```
-
-### ROLE GET \
-
-`role get` lists detailed role information.
-
-RPC: RoleGet
-
-#### Output
-
-Detailed role information.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 role get myrole
-# Role myrole
-# KV Read:
-# foo
-# KV Write:
-# foo
-```
-
-### ROLE DELETE \
-
-`role delete` deletes a role.
-
-RPC: RoleDelete
-
-#### Output
-
-`Role deleted`.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 role delete myrole
-# Role myrole deleted
-```
-
-### ROLE LIST \
-
-`role list` lists all roles in etcd.
-
-RPC: RoleList
-
-#### Output
-
-A role per line.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 role list
-# roleA
-# roleB
-# myrole
-```
-
-### ROLE GRANT-PERMISSION [options] \ \ \ [endkey]
-
-`role grant-permission` grants a key to a role.
-
-RPC: RoleGrantPermission
-
-#### Options
-
-- from-key -- grant a permission of keys that are greater than or equal to the given key using byte compare
-
-- prefix -- grant a prefix permission
-
-#### Output
-
-`Role updated`.
-
-#### Examples
-
-Grant read and write permission on the key `foo` to role `myrole`:
-
-```bash
-./etcdctl --user=root:123 role grant-permission myrole readwrite foo
-# Role myrole updated
-```
-
-Grant read permission on the wildcard key pattern `foo/*` to role `myrole`:
-
-```bash
-./etcdctl --user=root:123 role grant-permission --prefix myrole readwrite foo/
-# Role myrole updated
-```
-
-### ROLE REVOKE-PERMISSION \ \ \ [endkey]
-
-`role revoke-permission` revokes a key from a role.
-
-RPC: RoleRevokePermission
-
-#### Options
-
-- from-key -- revoke a permission of keys that are greater than or equal to the given key using byte compare
-
-- prefix -- revoke a prefix permission
-
-#### Output
-
-`Permission of key is revoked from role ` for single key. `Permission of range [, ) is revoked from role ` for a key range. Exit code is zero.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 role revoke-permission myrole foo
-# Permission of key foo is revoked from role myrole
-```
-
-### USER \
-
-USER provides commands for managing users of etcd.
-
-### USER ADD \ [options]
-
-`user add` creates a user.
-
-RPC: UserAdd
-
-#### Options
-
-- interactive -- Read password from stdin instead of interactive terminal
-
-#### Output
-
-`User created`.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 user add myuser
-# Password of myuser: #type password for my user
-# Type password of myuser again for confirmation:#re-type password for my user
-# User myuser created
-```
-
-### USER GET \ [options]
-
-`user get` lists detailed user information.
-
-RPC: UserGet
-
-#### Options
-
-- detail -- Show permissions of roles granted to the user
-
-#### Output
-
-Detailed user information.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 user get myuser
-# User: myuser
-# Roles:
-```
-
-### USER DELETE \
-
-`user delete` deletes a user.
-
-RPC: UserDelete
-
-#### Output
-
-`User deleted`.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 user delete myuser
-# User myuser deleted
-```
-
-### USER LIST
-
-`user list` lists detailed user information.
-
-RPC: UserList
-
-#### Output
-
-- List of users, one per line.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 user list
-# user1
-# user2
-# myuser
-```
-
-### USER PASSWD \ [options]
-
-`user passwd` changes a user's password.
-
-RPC: UserChangePassword
-
-#### Options
-
-- interactive -- if true, read password in interactive terminal
-
-#### Output
-
-`Password updated`.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 user passwd myuser
-# Password of myuser: #type new password for my user
-# Type password of myuser again for confirmation: #re-type the new password for my user
-# Password updated
-```
-
-### USER GRANT-ROLE \ \
-
-`user grant-role` grants a role to a user
-
-RPC: UserGrantRole
-
-#### Output
-
-`Role is granted to user `.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 user grant-role userA roleA
-# Role roleA is granted to user userA
-```
-
-### USER REVOKE-ROLE \ \
-
-`user revoke-role` revokes a role from a user
-
-RPC: UserRevokeRole
-
-#### Output
-
-`Role is revoked from user `.
-
-#### Examples
-
-```bash
-./etcdctl --user=root:123 user revoke-role userA roleA
-# Role roleA is revoked from user userA
-```
-
-## Utility commands
-
-### MAKE-MIRROR [options] \
-
-[make-mirror][mirror] mirrors a key prefix in an etcd cluster to a destination etcd cluster.
-
-#### Options
-
-- dest-cacert -- TLS certificate authority file for destination cluster
-
-- dest-cert -- TLS certificate file for destination cluster
-
-- dest-key -- TLS key file for destination cluster
-
-- prefix -- The key-value prefix to mirror
-
-- dest-prefix -- The destination prefix to mirror a prefix to a different prefix in the destination cluster
-
-- no-dest-prefix -- Mirror key-values to the root of the destination cluster
-
-- dest-insecure-transport -- Disable transport security for client connections
-
-#### Output
-
-The approximate total number of keys transferred to the destination cluster, updated every 30 seconds.
-
-#### Examples
-
-```
-./etcdctl make-mirror mirror.example.com:2379
-# 10
-# 18
-```
-
-[mirror]: ./doc/mirror_maker.md
-
-### MIGRATE [options]
-
-Migrates keys in a v2 store to a v3 mvcc store. Users should run migration command for all members in the cluster.
-
-#### Options
-
-- data-dir -- Path to the data directory
-
-- wal-dir -- Path to the WAL directory
-
-- transformer -- Path to the user-provided transformer program (default if not provided)
-
-#### Output
-
-No output on success.
-
-#### Default transformer
-
-If user does not provide a transformer program, migrate command will use the default transformer. The default transformer transforms `storev2` formatted keys into `mvcc` formatted keys according to the following Go program:
-
-```go
-func transform(n *storev2.Node) *mvccpb.KeyValue {
- if n.Dir {
- return nil
- }
- kv := &mvccpb.KeyValue{
- Key: []byte(n.Key),
- Value: []byte(n.Value),
- CreateRevision: int64(n.CreatedIndex),
- ModRevision: int64(n.ModifiedIndex),
- Version: 1,
- }
- return kv
-}
-```
-
-#### User-provided transformer
-
-Users can provide a customized 1:n transformer function that transforms a key from the v2 store to any number of keys in the mvcc store. The migration program writes JSON formatted [v2 store keys][v2key] to the transformer program's stdin, reads protobuf formatted [mvcc keys][v3key] back from the transformer program's stdout, and finishes migration by saving the transformed keys into the mvcc store.
-
-The provided transformer should read until EOF and flush the stdout before exiting to ensure data integrity.
-
-#### Example
-
-```
-./etcdctl migrate --data-dir=/var/etcd --transformer=k8s-transformer
-# finished transforming keys
-```
-
-### VERSION
-
-Prints the version of etcdctl.
-
-#### Output
-
-Prints etcd version and API version.
-
-#### Examples
-
-```bash
-./etcdctl version
-# etcdctl version: 3.1.0-alpha.0+git
-# API version: 3.1
-```
-
-### CHECK \
-
-CHECK provides commands for checking properties of the etcd cluster.
-
-### CHECK PERF [options]
-
-CHECK PERF checks the performance of the etcd cluster for 60 seconds. Running the `check perf` often can create a large keyspace history which can be auto compacted and defragmented using the `--auto-compact` and `--auto-defrag` options as described below.
-
-RPC: CheckPerf
-
-#### Options
-
-- load -- the performance check's workload model. Accepted workloads: s(small), m(medium), l(large), xl(xLarge)
-
-- prefix -- the prefix for writing the performance check's keys.
-
-- auto-compact -- if true, compact storage with last revision after test is finished.
-
-- auto-defrag -- if true, defragment storage after test is finished.
-
-#### Output
-
-Prints the result of performance check on different criteria like throughput. Also prints an overall status of the check as pass or fail.
-
-#### Examples
-
-Shows examples of both, pass and fail, status. The failure is due to the fact that a large workload was tried on a single node etcd cluster running on a laptop environment created for development and testing purpose.
-
-```bash
-./etcdctl check perf --load="s"
-# 60 / 60 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00%1m0s
-# PASS: Throughput is 150 writes/s
-# PASS: Slowest request took 0.087509s
-# PASS: Stddev is 0.011084s
-# PASS
-./etcdctl check perf --load="l"
-# 60 / 60 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00%1m0s
-# FAIL: Throughput too low: 6808 writes/s
-# PASS: Slowest request took 0.228191s
-# PASS: Stddev is 0.033547s
-# FAIL
-```
-
-### CHECK DATASCALE [options]
-
-CHECK DATASCALE checks the memory usage of holding data for different workloads on a given server endpoint. Running the `check datascale` often can create a large keyspace history which can be auto compacted and defragmented using the `--auto-compact` and `--auto-defrag` options as described below.
-
-RPC: CheckDatascale
-
-#### Options
-
-- load -- the datascale check's workload model. Accepted workloads: s(small), m(medium), l(large), xl(xLarge)
-
-- prefix -- the prefix for writing the datascale check's keys.
-
-- auto-compact -- if true, compact storage with last revision after test is finished.
-
-- auto-defrag -- if true, defragment storage after test is finished.
-
-#### Output
-
-Prints the system memory usage for a given workload. Also prints status of compact and defragment if related options are passed.
-
-#### Examples
-
-```bash
-./etcdctl check datascale --load="s" --auto-compact=true --auto-defrag=true
-# Start data scale check for work load [10000 key-value pairs, 1024 bytes per key-value, 50 concurrent clients].
-# Compacting with revision 18346204
-# Compacted with revision 18346204
-# Defragmenting "127.0.0.1:2379"
-# Defragmented "127.0.0.1:2379"
-# PASS: Approximate system memory used : 64.30 MB.
-```
-
-## Exit codes
-
-For all commands, a successful execution return a zero exit code. All failures will return non-zero exit codes.
-
-## Output formats
-
-All commands accept an output format by setting `-w` or `--write-out`. All commands default to the "simple" output format, which is meant to be human-readable. The simple format is listed in each command's `Output` description since it is customized for each command. If a command has a corresponding RPC, it will respect all output formats.
-
-If a command fails, returning a non-zero exit code, an error string will be written to standard error regardless of output format.
-
-### Simple
-
-A format meant to be easy to parse and human-readable. Specific to each command.
-
-### JSON
-
-The JSON encoding of the command's [RPC response][etcdrpc]. Since etcd's RPCs use byte strings, the JSON output will encode keys and values in base64.
-
-Some commands without an RPC also support JSON; see the command's `Output` description.
-
-### Protobuf
-
-The protobuf encoding of the command's [RPC response][etcdrpc]. If an RPC is streaming, the stream messages will be concetenated. If an RPC is not given for a command, the protobuf output is not defined.
-
-### Fields
-
-An output format similar to JSON but meant to parse with coreutils. For an integer field named `Field`, it writes a line in the format `"Field" : %d` where `%d` is go's integer formatting. For byte array fields, it writes `"Field" : %q` where `%q` is go's quoted string formatting (e.g., `[]byte{'a', '\n'}` is written as `"a\n"`).
-
-## Compatibility Support
-
-etcdctl is still in its early stage. We try out best to ensure fully compatible releases, however we might break compatibility to fix bugs or improve commands. If we intend to release a version of etcdctl with backward incompatibilities, we will provide notice prior to release and have instructions on how to upgrade.
-
-### Input Compatibility
-
-Input includes the command name, its flags, and its arguments. We ensure backward compatibility of the input of normal commands in non-interactive mode.
-
-### Output Compatibility
-
-Output includes output from etcdctl and its exit code. etcdctl provides `simple` output format by default.
-We ensure compatibility for the `simple` output format of normal commands in non-interactive mode. Currently, we do not ensure
-backward compatibility for `JSON` format and the format in non-interactive mode. Currently, we do not ensure backward compatibility of utility commands.
-
-### TODO: compatibility with etcd server
-
-[etcd]: https://github.com/coreos/etcd
-[READMEv2]: READMEv2.md
-[v2key]: ../store/node_extern.go#L28-L37
-[v3key]: ../api/mvccpb/kv.proto#L12-L29
-[etcdrpc]: ../api/etcdserverpb/rpc.proto
-[storagerpc]: ../api/mvccpb/kv.proto
diff --git a/etcd-fix/etcdctl/READMEv2.md b/etcd-fix/etcdctl/READMEv2.md
deleted file mode 100644
index 5ee2329..0000000
--- a/etcd-fix/etcdctl/READMEv2.md
+++ /dev/null
@@ -1,336 +0,0 @@
-etcdctl
-========
-
-`etcdctl` is a command line client for [etcd][etcd].
-It can be used in scripts or for administrators to explore an etcd cluster.
-
-## Getting etcdctl
-
-The latest release is available as a binary at [Github][github-release] along with etcd.
-
-etcdctl can also be built from source using the build script found in the parent directory.
-
-## Configuration
-### --debug
-+ output cURL commands which can be used to reproduce the request
-
-### --no-sync
-+ don't synchronize cluster information before sending request
-+ Use this to access non-published client endpoints
-+ Without this flag, values from `--endpoint` flag will be overwritten by etcd cluster when it does internal sync.
-
-### --output, -o
-+ output response in the given format (`simple`, `extended` or `json`)
-+ default: `"simple"`
-
-### --discovery-srv, -D
-+ domain name to query for SRV records describing cluster endpoints
-+ default: none
-+ env variable: ETCDCTL_DISCOVERY_SRV
-
-### --peers
-+ a comma-delimited list of machine addresses in the cluster
-+ default: `"http://127.0.0.1:2379"`
-+ env variable: ETCDCTL_PEERS
-
-### --endpoint
-+ a comma-delimited list of machine addresses in the cluster
-+ default: `"http://127.0.0.1:2379"`
-+ env variable: ETCDCTL_ENDPOINT
-+ Without `--no-sync` flag, this will be overwritten by etcd cluster when it does internal sync.
-
-### --cert-file
-+ identify HTTPS client using this SSL certificate file
-+ default: none
-+ env variable: ETCDCTL_CERT_FILE
-
-### --key-file
-+ identify HTTPS client using this SSL key file
-+ default: none
-+ env variable: ETCDCTL_KEY_FILE
-
-### --ca-file
-+ verify certificates of HTTPS-enabled servers using this CA bundle
-+ default: none
-+ env variable: ETCDCTL_CA_FILE
-
-### --username, -u
-+ provide username[:password] and prompt if password is not supplied
-+ default: none
-+ env variable: ETCDCTL_USERNAME
-
-### --timeout
-+ connection timeout per request
-+ default: `"1s"`
-
-### --total-timeout
-+ timeout for the command execution (except watch)
-+ default: `"5s"`
-
-## Usage
-
-### Setting Key Values
-
-Set a value on the `/foo/bar` key:
-
-```sh
-$ etcdctl set /foo/bar "Hello world"
-Hello world
-```
-
-Set a value on the `/foo/bar` key with a value that expires in 60 seconds:
-
-```sh
-$ etcdctl set /foo/bar "Hello world" --ttl 60
-Hello world
-```
-
-Conditionally set a value on `/foo/bar` if the previous value was "Hello world":
-
-```sh
-$ etcdctl set /foo/bar "Goodbye world" --swap-with-value "Hello world"
-Goodbye world
-```
-
-Conditionally set a value on `/foo/bar` if the previous etcd index was 12:
-
-```sh
-$ etcdctl set /foo/bar "Goodbye world" --swap-with-index 12
-Goodbye world
-```
-
-Create a new key `/foo/bar`, only if the key did not previously exist:
-
-```sh
-$ etcdctl mk /foo/new_bar "Hello world"
-Hello world
-```
-
-Create a new in-order key under dir `/fooDir`:
-
-```sh
-$ etcdctl mk --in-order /fooDir "Hello world"
-```
-
-Create a new dir `/fooDir`, only if the key did not previously exist:
-
-```sh
-$ etcdctl mkdir /fooDir
-```
-
-Update an existing key `/foo/bar`, only if the key already existed:
-
-```sh
-$ etcdctl update /foo/bar "Hola mundo"
-Hola mundo
-```
-
-Create or update a directory called `/mydir`:
-
-```sh
-$ etcdctl setdir /mydir
-```
-
-
-### Retrieving a key value
-
-Get the current value for a single key in the local etcd node:
-
-```sh
-$ etcdctl get /foo/bar
-Hello world
-```
-
-Get the value of a key with additional metadata in a parseable format:
-
-```sh
-$ etcdctl -o extended get /foo/bar
-Key: /foo/bar
-Modified-Index: 72
-TTL: 0
-Etcd-Index: 72
-Raft-Index: 5611
-Raft-Term: 1
-
-Hello World
-```
-
-### Listing a directory
-
-Explore the keyspace using the `ls` command
-
-```sh
-$ etcdctl ls
-/akey
-/adir
-$ etcdctl ls /adir
-/adir/key1
-/adir/key2
-```
-
-Add `--recursive` to recursively list subdirectories encountered.
-
-```sh
-$ etcdctl ls --recursive
-/akey
-/adir
-/adir/key1
-/adir/key2
-```
-
-Directories can also have a trailing `/` added to output using `-p`.
-
-```sh
-$ etcdctl ls -p
-/akey
-/adir/
-```
-
-### Deleting a key
-
-Delete a key:
-
-```sh
-$ etcdctl rm /foo/bar
-```
-
-Delete an empty directory or a key-value pair
-
-```sh
-$ etcdctl rmdir /path/to/dir
-```
-
-or
-
-```sh
-$ etcdctl rm /path/to/dir --dir
-```
-
-Recursively delete a key and all child keys:
-
-```sh
-$ etcdctl rm /path/to/dir --recursive
-```
-
-Conditionally delete `/foo/bar` if the previous value was "Hello world":
-
-```sh
-$ etcdctl rm /foo/bar --with-value "Hello world"
-```
-
-Conditionally delete `/foo/bar` if the previous etcd index was 12:
-
-```sh
-$ etcdctl rm /foo/bar --with-index 12
-```
-
-### Watching for changes
-
-Watch for only the next change on a key:
-
-```sh
-$ etcdctl watch /foo/bar
-Hello world
-```
-
-Continuously watch a key:
-
-```sh
-$ etcdctl watch /foo/bar --forever
-Hello world
-.... client hangs forever until ctrl+C printing values as key change
-```
-
-Continuously watch a key, starting with a given etcd index:
-
-```sh
-$ etcdctl watch /foo/bar --forever --index 12
-Hello world
-.... client hangs forever until ctrl+C printing values as key change
-```
-
-Continuously watch a key and exec a program:
-
-```sh
-$ etcdctl exec-watch /foo/bar -- sh -c "env | grep ETCD"
-ETCD_WATCH_ACTION=set
-ETCD_WATCH_VALUE=My configuration stuff
-ETCD_WATCH_MODIFIED_INDEX=1999
-ETCD_WATCH_KEY=/foo/bar
-ETCD_WATCH_ACTION=set
-ETCD_WATCH_VALUE=My new configuration stuff
-ETCD_WATCH_MODIFIED_INDEX=2000
-ETCD_WATCH_KEY=/foo/bar
-```
-
-Continuously and recursively watch a key and exec a program:
-```sh
-$ etcdctl exec-watch --recursive /foo -- sh -c "env | grep ETCD"
-ETCD_WATCH_ACTION=set
-ETCD_WATCH_VALUE=My configuration stuff
-ETCD_WATCH_MODIFIED_INDEX=1999
-ETCD_WATCH_KEY=/foo/bar
-ETCD_WATCH_ACTION=set
-ETCD_WATCH_VALUE=My new configuration stuff
-ETCD_WATCH_MODIFIED_INDEX=2000
-ETCD_WATCH_KEY=/foo/barbar
-```
-
-## Return Codes
-
-The following exit codes can be returned from etcdctl:
-
-```
-0 Success
-1 Malformed etcdctl arguments
-2 Failed to connect to host
-3 Failed to auth (client cert rejected, ca validation failure, etc)
-4 400 error from etcd
-5 500 error from etcd
-```
-
-## Endpoint
-
-If the etcd cluster isn't available on `http://127.0.0.1:2379`, specify a `--endpoint` flag or `ETCDCTL_ENDPOINT` environment variable. One endpoint or a comma-separated list of endpoints can be listed. This option is ignored if the `--discovery-srv` option is provided.
-
-```sh
-ETCDCTL_ENDPOINT="http://10.0.28.1:4002" etcdctl set my-key to-a-value
-ETCDCTL_ENDPOINT="http://10.0.28.1:4002,http://10.0.28.2:4002,http://10.0.28.3:4002" etcdctl set my-key to-a-value
-etcdctl --endpoint http://10.0.28.1:4002 my-key to-a-value
-etcdctl --endpoint http://10.0.28.1:4002,http://10.0.28.2:4002,http://10.0.28.3:4002 etcdctl set my-key to-a-value
-```
-
-## Username and Password
-
-If the etcd cluster is protected by [authentication][authentication], specify username and password using the [`--username`][username-flag] or `ETCDCTL_USERNAME` environment variable. When `--username` flag or `ETCDCTL_USERNAME` environment variable doesn't contain password, etcdctl will prompt password in interactive mode.
-
-```sh
-ETCDCTL_USERNAME="root:password" etcdctl set my-key to-a-value
-```
-
-## DNS Discovery
-
-To discover the etcd cluster through domain SRV records, specify a `--discovery-srv` flag or `ETCDCTL_DISCOVERY_SRV` environment variable. This option takes precedence over the `--endpoint` flag.
-
-```sh
-ETCDCTL_DISCOVERY_SRV="some-domain" etcdctl set my-key to-a-value
-etcdctl --discovery-srv some-domain set my-key to-a-value
-```
-
-## Project Details
-
-### Versioning
-
-etcdctl uses [semantic versioning][semver].
-Releases will follow lockstep with the etcd release cycle.
-
-### License
-
-etcdctl is under the Apache 2.0 license. See the [LICENSE][license] file for details.
-
-[authentication]: ../Documentation/v2/authentication.md
-[etcd]: https://github.com/coreos/etcd
-[github-release]: https://github.com/coreos/etcd/releases/
-[license]: ../LICENSE
-[semver]: http://semver.org/
-[username-flag]: #--username--u
diff --git a/etcd-fix/etcdctl/ctlv2/command/auth_commands.go b/etcd-fix/etcdctl/ctlv2/command/auth_commands.go
deleted file mode 100644
index fa19200..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/auth_commands.go
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "fmt"
- "os"
- "strings"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-func NewAuthCommands() cli.Command {
- return cli.Command{
- Name: "auth",
- Usage: "overall auth controls",
- Subcommands: []cli.Command{
- {
- Name: "enable",
- Usage: "enable auth access controls",
- ArgsUsage: " ",
- Action: actionAuthEnable,
- },
- {
- Name: "disable",
- Usage: "disable auth access controls",
- ArgsUsage: " ",
- Action: actionAuthDisable,
- },
- },
- }
-}
-
-func actionAuthEnable(c *cli.Context) error {
- authEnableDisable(c, true)
- return nil
-}
-
-func actionAuthDisable(c *cli.Context) error {
- authEnableDisable(c, false)
- return nil
-}
-
-func mustNewAuthAPI(c *cli.Context) client.AuthAPI {
- hc := mustNewClient(c)
-
- if c.GlobalBool("debug") {
- fmt.Fprintf(os.Stderr, "Cluster-Endpoints: %s\n", strings.Join(hc.Endpoints(), ", "))
- }
-
- return client.NewAuthAPI(hc)
-}
-
-func authEnableDisable(c *cli.Context, enable bool) {
- if len(c.Args()) != 0 {
- fmt.Fprintln(os.Stderr, "No arguments accepted")
- os.Exit(1)
- }
- s := mustNewAuthAPI(c)
- ctx, cancel := contextWithTotalTimeout(c)
- var err error
- if enable {
- err = s.Enable(ctx)
- } else {
- err = s.Disable(ctx)
- }
- cancel()
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
- if enable {
- fmt.Println("Authentication Enabled")
- } else {
- fmt.Println("Authentication Disabled")
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/backup_command.go b/etcd-fix/etcdctl/ctlv2/command/backup_command.go
deleted file mode 100644
index 2fbdbb3..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/backup_command.go
+++ /dev/null
@@ -1,257 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "encoding/binary"
- "log"
- "os"
- "path"
- "path/filepath"
- "regexp"
- "time"
-
- "go.etcd.io/etcd/api/v3/etcdserverpb"
- "go.etcd.io/etcd/pkg/v3/fileutil"
- "go.etcd.io/etcd/pkg/v3/idutil"
- "go.etcd.io/etcd/pkg/v3/pbutil"
- "go.etcd.io/etcd/raft/v3/raftpb"
- "go.etcd.io/etcd/server/v3/etcdserver/api/membership"
- "go.etcd.io/etcd/server/v3/etcdserver/api/snap"
- "go.etcd.io/etcd/server/v3/wal"
- "go.etcd.io/etcd/server/v3/wal/walpb"
-
- "github.com/urfave/cli"
- bolt "go.etcd.io/bbolt"
- "go.uber.org/zap"
-)
-
-func NewBackupCommand() cli.Command {
- return cli.Command{
- Name: "backup",
- Usage: "backup an etcd directory",
- ArgsUsage: " ",
- Flags: []cli.Flag{
- cli.StringFlag{Name: "data-dir", Value: "", Usage: "Path to the etcd data dir"},
- cli.StringFlag{Name: "wal-dir", Value: "", Usage: "Path to the etcd wal dir"},
- cli.StringFlag{Name: "backup-dir", Value: "", Usage: "Path to the backup dir"},
- cli.StringFlag{Name: "backup-wal-dir", Value: "", Usage: "Path to the backup wal dir"},
- cli.BoolFlag{Name: "with-v3", Usage: "Backup v3 backend data"},
- },
- Action: handleBackup,
- }
-}
-
-// handleBackup handles a request that intends to do a backup.
-func handleBackup(c *cli.Context) error {
- var srcWAL string
- var destWAL string
-
- withV3 := c.Bool("with-v3")
- srcSnap := filepath.Join(c.String("data-dir"), "member", "snap")
- destSnap := filepath.Join(c.String("backup-dir"), "member", "snap")
-
- if c.String("wal-dir") != "" {
- srcWAL = c.String("wal-dir")
- } else {
- srcWAL = filepath.Join(c.String("data-dir"), "member", "wal")
- }
-
- if c.String("backup-wal-dir") != "" {
- destWAL = c.String("backup-wal-dir")
- } else {
- destWAL = filepath.Join(c.String("backup-dir"), "member", "wal")
- }
-
- if err := fileutil.CreateDirAll(destSnap); err != nil {
- log.Fatalf("failed creating backup snapshot dir %v: %v", destSnap, err)
- }
-
- walsnap := saveSnap(destSnap, srcSnap)
- metadata, state, ents := loadWAL(srcWAL, walsnap, withV3)
- saveDB(filepath.Join(destSnap, "db"), filepath.Join(srcSnap, "db"), state.Commit, withV3)
-
- idgen := idutil.NewGenerator(0, time.Now())
- metadata.NodeID = idgen.Next()
- metadata.ClusterID = idgen.Next()
-
- neww, err := wal.Create(zap.NewExample(), destWAL, pbutil.MustMarshal(&metadata))
- if err != nil {
- log.Fatal(err)
- }
- defer neww.Close()
- if err := neww.Save(state, ents); err != nil {
- log.Fatal(err)
- }
- if err := neww.SaveSnapshot(walsnap); err != nil {
- log.Fatal(err)
- }
-
- return nil
-}
-
-func saveSnap(destSnap, srcSnap string) (walsnap walpb.Snapshot) {
- ss := snap.New(zap.NewExample(), srcSnap)
- snapshot, err := ss.Load()
- if err != nil && err != snap.ErrNoSnapshot {
- log.Fatal(err)
- }
- if snapshot != nil {
- walsnap.Index, walsnap.Term = snapshot.Metadata.Index, snapshot.Metadata.Term
- newss := snap.New(zap.NewExample(), destSnap)
- if err = newss.SaveSnap(*snapshot); err != nil {
- log.Fatal(err)
- }
- }
- return walsnap
-}
-
-func loadWAL(srcWAL string, walsnap walpb.Snapshot, v3 bool) (etcdserverpb.Metadata, raftpb.HardState, []raftpb.Entry) {
- w, err := wal.OpenForRead(zap.NewExample(), srcWAL, walsnap)
- if err != nil {
- log.Fatal(err)
- }
- defer w.Close()
- wmetadata, state, ents, err := w.ReadAll()
- switch err {
- case nil:
- case wal.ErrSnapshotNotFound:
- log.Printf("Failed to find the match snapshot record %+v in wal %v.", walsnap, srcWAL)
- log.Printf("etcdctl will add it back. Start auto fixing...")
- default:
- log.Fatal(err)
- }
-
- re := path.Join(membership.StoreMembersPrefix, "[[:xdigit:]]{1,16}", "attributes")
- memberAttrRE := regexp.MustCompile(re)
-
- removed := uint64(0)
- i := 0
- remove := func() {
- ents = append(ents[:i], ents[i+1:]...)
- removed++
- i--
- }
- for i = 0; i < len(ents); i++ {
- ents[i].Index -= removed
- if ents[i].Type == raftpb.EntryConfChange {
- log.Println("ignoring EntryConfChange raft entry")
- remove()
- continue
- }
-
- var raftReq etcdserverpb.InternalRaftRequest
- var v2Req *etcdserverpb.Request
- if pbutil.MaybeUnmarshal(&raftReq, ents[i].Data) {
- v2Req = raftReq.V2
- } else {
- v2Req = &etcdserverpb.Request{}
- pbutil.MustUnmarshal(v2Req, ents[i].Data)
- }
-
- if v2Req != nil && v2Req.Method == "PUT" && memberAttrRE.MatchString(v2Req.Path) {
- log.Println("ignoring member attribute update on", v2Req.Path)
- remove()
- continue
- }
-
- if v2Req != nil {
- continue
- }
-
- if v3 || raftReq.Header == nil {
- continue
- }
- log.Println("ignoring v3 raft entry")
- remove()
- }
- state.Commit -= removed
- var metadata etcdserverpb.Metadata
- pbutil.MustUnmarshal(&metadata, wmetadata)
- return metadata, state, ents
-}
-
-// saveDB copies the v3 backend and strips cluster information.
-func saveDB(destDB, srcDB string, idx uint64, v3 bool) {
- // open src db to safely copy db state
- if v3 {
- var src *bolt.DB
- ch := make(chan *bolt.DB, 1)
- go func() {
- db, err := bolt.Open(srcDB, 0444, &bolt.Options{ReadOnly: true})
- if err != nil {
- log.Fatal(err)
- }
- ch <- db
- }()
- select {
- case src = <-ch:
- case <-time.After(time.Second):
- log.Println("waiting to acquire lock on", srcDB)
- src = <-ch
- }
- defer src.Close()
-
- tx, err := src.Begin(false)
- if err != nil {
- log.Fatal(err)
- }
-
- // copy srcDB to destDB
- dest, err := os.Create(destDB)
- if err != nil {
- log.Fatal(err)
- }
- if _, err := tx.WriteTo(dest); err != nil {
- log.Fatal(err)
- }
- dest.Close()
- if err := tx.Rollback(); err != nil {
- log.Fatal(err)
- }
- }
-
- db, err := bolt.Open(destDB, 0644, &bolt.Options{})
- if err != nil {
- log.Fatal(err)
- }
- tx, err := db.Begin(true)
- if err != nil {
- log.Fatal(err)
- }
-
- // remove membership information; should be clobbered by --force-new-cluster
- for _, bucket := range []string{"members", "members_removed", "cluster"} {
- tx.DeleteBucket([]byte(bucket))
- }
-
- // update consistent index to match hard state
- if !v3 {
- idxBytes := make([]byte, 8)
- binary.BigEndian.PutUint64(idxBytes, idx)
- b, err := tx.CreateBucketIfNotExists([]byte("meta"))
- if err != nil {
- log.Fatal(err)
- }
- b.Put([]byte("consistent_index"), idxBytes)
- }
-
- if err := tx.Commit(); err != nil {
- log.Fatal(err)
- }
- if err := db.Close(); err != nil {
- log.Fatal(err)
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/cluster_health.go b/etcd-fix/etcdctl/ctlv2/command/cluster_health.go
deleted file mode 100644
index aa31196..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/cluster_health.go
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "os"
- "os/signal"
- "time"
-
- "go.etcd.io/etcd/client/v2"
-
- "github.com/urfave/cli"
-)
-
-func NewClusterHealthCommand() cli.Command {
- return cli.Command{
- Name: "cluster-health",
- Usage: "check the health of the etcd cluster",
- ArgsUsage: " ",
- Flags: []cli.Flag{
- cli.BoolFlag{Name: "forever, f", Usage: "forever check the health every 10 second until CTRL+C"},
- },
- Action: handleClusterHealth,
- }
-}
-
-func handleClusterHealth(c *cli.Context) error {
- forever := c.Bool("forever")
- if forever {
- sigch := make(chan os.Signal, 1)
- signal.Notify(sigch, os.Interrupt)
-
- go func() {
- <-sigch
- os.Exit(0)
- }()
- }
-
- tr, err := getTransport(c)
- if err != nil {
- handleError(c, ExitServerError, err)
- }
-
- hc := http.Client{
- Transport: tr,
- }
-
- cln := mustNewClientNoSync(c)
- mi := client.NewMembersAPI(cln)
- ms, err := mi.List(context.TODO())
- if err != nil {
- fmt.Println("cluster may be unhealthy: failed to list members")
- handleError(c, ExitServerError, err)
- }
-
- for {
- healthyMembers := 0
- for _, m := range ms {
- if len(m.ClientURLs) == 0 {
- fmt.Printf("member %s is unreachable: no available published client urls\n", m.ID)
- continue
- }
-
- checked := false
- for _, url := range m.ClientURLs {
- resp, err := hc.Get(url + "/health")
- if err != nil {
- fmt.Printf("failed to check the health of member %s on %s: %v\n", m.ID, url, err)
- continue
- }
-
- result := struct{ Health string }{}
- nresult := struct{ Health bool }{}
- bytes, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- fmt.Printf("failed to check the health of member %s on %s: %v\n", m.ID, url, err)
- continue
- }
- resp.Body.Close()
-
- err = json.Unmarshal(bytes, &result)
- if err != nil {
- err = json.Unmarshal(bytes, &nresult)
- }
- if err != nil {
- fmt.Printf("failed to check the health of member %s on %s: %v\n", m.ID, url, err)
- continue
- }
-
- checked = true
- if result.Health == "true" || nresult.Health {
- fmt.Printf("member %s is healthy: got healthy result from %s\n", m.ID, url)
- healthyMembers++
- } else {
- fmt.Printf("member %s is unhealthy: got unhealthy result from %s\n", m.ID, url)
- }
- break
- }
- if !checked {
- fmt.Printf("member %s is unreachable: %v are all unreachable\n", m.ID, m.ClientURLs)
- }
- }
- switch healthyMembers {
- case len(ms):
- fmt.Println("cluster is healthy")
- case 0:
- fmt.Println("cluster is unavailable")
- default:
- fmt.Println("cluster is degraded")
- }
-
- if !forever {
- if healthyMembers == len(ms) {
- os.Exit(ExitSuccess)
- }
- os.Exit(ExitClusterNotHealthy)
- }
-
- fmt.Printf("\nnext check after 10 second...\n\n")
- time.Sleep(10 * time.Second)
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/doc.go b/etcd-fix/etcdctl/ctlv2/command/doc.go
deleted file mode 100644
index cedf3f7..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/doc.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package command is a set of libraries for etcdctl commands.
-package command
diff --git a/etcd-fix/etcdctl/ctlv2/command/error.go b/etcd-fix/etcdctl/ctlv2/command/error.go
deleted file mode 100644
index b86a97d..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/error.go
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "encoding/json"
- "fmt"
- "os"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-const (
- ExitSuccess = iota
- ExitBadArgs
- ExitBadConnection
- ExitBadAuth
- ExitServerError
- ExitClusterNotHealthy
-)
-
-func handleError(c *cli.Context, code int, err error) {
- if c.GlobalString("output") == "json" {
- if err, ok := err.(*client.Error); ok {
- b, err := json.Marshal(err)
- if err != nil {
- panic(err)
- }
- fmt.Fprintln(os.Stderr, string(b))
- os.Exit(code)
- }
- }
-
- fmt.Fprintln(os.Stderr, "Error: ", err)
- if cerr, ok := err.(*client.ClusterError); ok {
- fmt.Fprintln(os.Stderr, cerr.Detail())
- }
- os.Exit(code)
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/exec_watch_command.go b/etcd-fix/etcdctl/ctlv2/command/exec_watch_command.go
deleted file mode 100644
index 2bded02..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/exec_watch_command.go
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "context"
- "errors"
- "fmt"
- "os"
- "os/exec"
- "os/signal"
-
- "go.etcd.io/etcd/client/v2"
-
- "github.com/urfave/cli"
-)
-
-// NewExecWatchCommand returns the CLI command for "exec-watch".
-func NewExecWatchCommand() cli.Command {
- return cli.Command{
- Name: "exec-watch",
- Usage: "watch a key for changes and exec an executable",
- ArgsUsage: " [args...]",
- Flags: []cli.Flag{
- cli.IntFlag{Name: "after-index", Value: 0, Usage: "watch after the given index"},
- cli.BoolFlag{Name: "recursive, r", Usage: "watch all values for key and child keys"},
- },
- Action: func(c *cli.Context) error {
- execWatchCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// execWatchCommandFunc executes the "exec-watch" command.
-func execWatchCommandFunc(c *cli.Context, ki client.KeysAPI) {
- args := c.Args()
- argslen := len(args)
-
- if argslen < 2 {
- handleError(c, ExitBadArgs, errors.New("key and command to exec required"))
- }
-
- var (
- key string
- cmdArgs []string
- )
-
- foundSep := false
- for i := range args {
- if args[i] == "--" && i != 0 {
- foundSep = true
- break
- }
- }
-
- if foundSep {
- key = args[0]
- cmdArgs = args[2:]
- } else {
- // If no flag is parsed, the order of key and cmdArgs will be switched and
- // args will not contain `--`.
- key = args[argslen-1]
- cmdArgs = args[:argslen-1]
- }
-
- index := c.Uint64("after-index")
-
- recursive := c.Bool("recursive")
-
- sigch := make(chan os.Signal, 1)
- signal.Notify(sigch, os.Interrupt)
-
- go func() {
- <-sigch
- os.Exit(0)
- }()
-
- w := ki.Watcher(key, &client.WatcherOptions{AfterIndex: uint64(index), Recursive: recursive})
-
- for {
- resp, err := w.Next(context.TODO())
- if err != nil {
- handleError(c, ExitServerError, err)
- }
- if resp.Node.Dir {
- fmt.Fprintf(os.Stderr, "Ignored dir %s change\n", resp.Node.Key)
- continue
- }
-
- cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...)
- cmd.Env = environResponse(resp, os.Environ())
-
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
-
- go func() {
- err := cmd.Start()
- if err != nil {
- fmt.Fprintf(os.Stderr, err.Error())
- os.Exit(1)
- }
- cmd.Wait()
- }()
- }
-}
-
-func environResponse(resp *client.Response, env []string) []string {
- env = append(env, "ETCD_WATCH_ACTION="+resp.Action)
- env = append(env, "ETCD_WATCH_MODIFIED_INDEX="+fmt.Sprintf("%d", resp.Node.ModifiedIndex))
- env = append(env, "ETCD_WATCH_KEY="+resp.Node.Key)
- env = append(env, "ETCD_WATCH_VALUE="+resp.Node.Value)
- return env
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/format.go b/etcd-fix/etcdctl/ctlv2/command/format.go
deleted file mode 100644
index 58ca0ef..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/format.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "encoding/json"
- "fmt"
- "os"
-
- "go.etcd.io/etcd/client/v2"
-)
-
-// printResponseKey only supports to print key correctly.
-func printResponseKey(resp *client.Response, format string) {
- // Format the result.
- switch format {
- case "simple":
- if resp.Action != "delete" {
- fmt.Println(resp.Node.Value)
- } else {
- fmt.Println("PrevNode.Value:", resp.PrevNode.Value)
- }
- case "extended":
- // Extended prints in a rfc2822 style format
- fmt.Println("Key:", resp.Node.Key)
- fmt.Println("Created-Index:", resp.Node.CreatedIndex)
- fmt.Println("Modified-Index:", resp.Node.ModifiedIndex)
-
- if resp.PrevNode != nil {
- fmt.Println("PrevNode.Value:", resp.PrevNode.Value)
- }
-
- fmt.Println("TTL:", resp.Node.TTL)
- fmt.Println("Index:", resp.Index)
- if resp.Action != "delete" {
- fmt.Println("")
- fmt.Println(resp.Node.Value)
- }
- case "json":
- b, err := json.Marshal(resp)
- if err != nil {
- panic(err)
- }
- fmt.Println(string(b))
- default:
- fmt.Fprintln(os.Stderr, "Unsupported output format:", format)
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/get_command.go b/etcd-fix/etcdctl/ctlv2/command/get_command.go
deleted file mode 100644
index 56eaa32..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/get_command.go
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
- "fmt"
- "os"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewGetCommand returns the CLI command for "get".
-func NewGetCommand() cli.Command {
- return cli.Command{
- Name: "get",
- Usage: "retrieve the value of a key",
- ArgsUsage: "",
- Flags: []cli.Flag{
- cli.BoolFlag{Name: "sort", Usage: "returns result in sorted order"},
- cli.BoolFlag{Name: "quorum, q", Usage: "require quorum for get request"},
- },
- Action: func(c *cli.Context) error {
- getCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// getCommandFunc executes the "get" command.
-func getCommandFunc(c *cli.Context, ki client.KeysAPI) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
-
- key := c.Args()[0]
- sorted := c.Bool("sort")
- quorum := c.Bool("quorum")
-
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Get(ctx, key, &client.GetOptions{Sort: sorted, Quorum: quorum})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
-
- if resp.Node.Dir {
- fmt.Fprintln(os.Stderr, fmt.Sprintf("%s: is a directory", resp.Node.Key))
- os.Exit(1)
- }
-
- printResponseKey(resp, c.GlobalString("output"))
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/ls_command.go b/etcd-fix/etcdctl/ctlv2/command/ls_command.go
deleted file mode 100644
index 363a3c4..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/ls_command.go
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "fmt"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-func NewLsCommand() cli.Command {
- return cli.Command{
- Name: "ls",
- Usage: "retrieve a directory",
- ArgsUsage: "[key]",
- Flags: []cli.Flag{
- cli.BoolFlag{Name: "sort", Usage: "returns result in sorted order"},
- cli.BoolFlag{Name: "recursive, r", Usage: "returns all key names recursively for the given path"},
- cli.BoolFlag{Name: "p", Usage: "append slash (/) to directories"},
- cli.BoolFlag{Name: "quorum, q", Usage: "require quorum for get request"},
- },
- Action: func(c *cli.Context) error {
- lsCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// lsCommandFunc executes the "ls" command.
-func lsCommandFunc(c *cli.Context, ki client.KeysAPI) {
- key := "/"
- if len(c.Args()) != 0 {
- key = c.Args()[0]
- }
-
- sort := c.Bool("sort")
- recursive := c.Bool("recursive")
- quorum := c.Bool("quorum")
-
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Get(ctx, key, &client.GetOptions{Sort: sort, Recursive: recursive, Quorum: quorum})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
-
- printLs(c, resp)
-}
-
-// printLs writes a response out in a manner similar to the `ls` command in unix.
-// Non-empty directories list their contents and files list their name.
-func printLs(c *cli.Context, resp *client.Response) {
- if c.GlobalString("output") == "simple" {
- if !resp.Node.Dir {
- fmt.Println(resp.Node.Key)
- }
- for _, node := range resp.Node.Nodes {
- rPrint(c, node)
- }
- } else {
- // user wants JSON or extended output
- printResponseKey(resp, c.GlobalString("output"))
- }
-}
-
-// rPrint recursively prints out the nodes in the node structure.
-func rPrint(c *cli.Context, n *client.Node) {
- if n.Dir && c.Bool("p") {
- fmt.Println(fmt.Sprintf("%v/", n.Key))
- } else {
- fmt.Println(n.Key)
- }
-
- for _, node := range n.Nodes {
- rPrint(c, node)
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/member_commands.go b/etcd-fix/etcdctl/ctlv2/command/member_commands.go
deleted file mode 100644
index 84a9634..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/member_commands.go
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "fmt"
- "os"
- "strings"
-
- "github.com/urfave/cli"
-)
-
-func NewMemberCommand() cli.Command {
- return cli.Command{
- Name: "member",
- Usage: "member add, remove and list subcommands",
- Subcommands: []cli.Command{
- {
- Name: "list",
- Usage: "enumerate existing cluster members",
- ArgsUsage: " ",
- Action: actionMemberList,
- },
- {
- Name: "add",
- Usage: "add a new member to the etcd cluster",
- ArgsUsage: " ",
- Action: actionMemberAdd,
- },
- {
- Name: "remove",
- Usage: "remove an existing member from the etcd cluster",
- ArgsUsage: "",
- Action: actionMemberRemove,
- },
- {
- Name: "update",
- Usage: "update an existing member in the etcd cluster",
- ArgsUsage: " ",
- Action: actionMemberUpdate,
- },
- },
- }
-}
-
-func actionMemberList(c *cli.Context) error {
- if len(c.Args()) != 0 {
- fmt.Fprintln(os.Stderr, "No arguments accepted")
- os.Exit(1)
- }
- mAPI := mustNewMembersAPI(c)
- ctx, cancel := contextWithTotalTimeout(c)
- defer cancel()
-
- members, err := mAPI.List(ctx)
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
- leader, err := mAPI.Leader(ctx)
- if err != nil {
- fmt.Fprintln(os.Stderr, "Failed to get leader: ", err)
- os.Exit(1)
- }
-
- for _, m := range members {
- isLeader := false
- if m.ID == leader.ID {
- isLeader = true
- }
- if len(m.Name) == 0 {
- fmt.Printf("%s[unstarted]: peerURLs=%s\n", m.ID, strings.Join(m.PeerURLs, ","))
- } else {
- fmt.Printf("%s: name=%s peerURLs=%s clientURLs=%s isLeader=%v\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ","), isLeader)
- }
- }
-
- return nil
-}
-
-func actionMemberAdd(c *cli.Context) error {
- args := c.Args()
- if len(args) != 2 {
- fmt.Fprintln(os.Stderr, "Provide a name and a single member peerURL")
- os.Exit(1)
- }
-
- mAPI := mustNewMembersAPI(c)
-
- url := args[1]
- ctx, cancel := contextWithTotalTimeout(c)
- defer cancel()
-
- m, err := mAPI.Add(ctx, url)
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
-
- newID := m.ID
- newName := args[0]
- fmt.Printf("Added member named %s with ID %s to cluster\n", newName, newID)
-
- members, err := mAPI.List(ctx)
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
-
- conf := []string{}
- for _, memb := range members {
- for _, u := range memb.PeerURLs {
- n := memb.Name
- if memb.ID == newID {
- n = newName
- }
- conf = append(conf, fmt.Sprintf("%s=%s", n, u))
- }
- }
-
- fmt.Print("\n")
- fmt.Printf("ETCD_NAME=%q\n", newName)
- fmt.Printf("ETCD_INITIAL_CLUSTER=%q\n", strings.Join(conf, ","))
- fmt.Printf("ETCD_INITIAL_CLUSTER_STATE=\"existing\"\n")
- return nil
-}
-
-func actionMemberRemove(c *cli.Context) error {
- args := c.Args()
- if len(args) != 1 {
- fmt.Fprintln(os.Stderr, "Provide a single member ID")
- os.Exit(1)
- }
- removalID := args[0]
-
- mAPI := mustNewMembersAPI(c)
-
- ctx, cancel := contextWithTotalTimeout(c)
- defer cancel()
- // Get the list of members.
- members, err := mAPI.List(ctx)
- if err != nil {
- fmt.Fprintln(os.Stderr, "Error while verifying ID against known members:", err.Error())
- os.Exit(1)
- }
- // Sanity check the input.
- foundID := false
- for _, m := range members {
- if m.ID == removalID {
- foundID = true
- }
- if m.Name == removalID {
- // Note that, so long as it's not ambiguous, we *could* do the right thing by name here.
- fmt.Fprintf(os.Stderr, "Found a member named %s; if this is correct, please use its ID, eg:\n\tetcdctl member remove %s\n", m.Name, m.ID)
- fmt.Fprintf(os.Stderr, "For more details, read the documentation at https://github.com/etcd-io/etcd/blob/master/Documentation/runtime-configuration.md#remove-a-member\n\n")
- }
- }
- if !foundID {
- fmt.Fprintf(os.Stderr, "Couldn't find a member in the cluster with an ID of %s.\n", removalID)
- os.Exit(1)
- }
-
- // Actually attempt to remove the member.
- err = mAPI.Remove(ctx, removalID)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Received an error trying to remove member %s: %s", removalID, err.Error())
- os.Exit(1)
- }
-
- fmt.Printf("Removed member %s from cluster\n", removalID)
- return nil
-}
-
-func actionMemberUpdate(c *cli.Context) error {
- args := c.Args()
- if len(args) != 2 {
- fmt.Fprintln(os.Stderr, "Provide an ID and a list of comma separated peerURL (0xabcd http://example.com,http://example1.com)")
- os.Exit(1)
- }
-
- mAPI := mustNewMembersAPI(c)
-
- mid := args[0]
- urls := args[1]
- ctx, cancel := contextWithTotalTimeout(c)
- err := mAPI.Update(ctx, mid, strings.Split(urls, ","))
- cancel()
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
-
- fmt.Printf("Updated member with ID %s in cluster\n", mid)
- return nil
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/mk_command.go b/etcd-fix/etcdctl/ctlv2/command/mk_command.go
deleted file mode 100644
index ae9ec82..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/mk_command.go
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
- "os"
- "time"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewMakeCommand returns the CLI command for "mk".
-func NewMakeCommand() cli.Command {
- return cli.Command{
- Name: "mk",
- Usage: "make a new key with a given value",
- ArgsUsage: " ",
- Flags: []cli.Flag{
- cli.BoolFlag{Name: "in-order", Usage: "create in-order key under directory "},
- cli.IntFlag{Name: "ttl", Value: 0, Usage: "key time-to-live in seconds"},
- },
- Action: func(c *cli.Context) error {
- mkCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// mkCommandFunc executes the "mk" command.
-func mkCommandFunc(c *cli.Context, ki client.KeysAPI) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
- key := c.Args()[0]
- value, err := argOrStdin(c.Args(), os.Stdin, 1)
- if err != nil {
- handleError(c, ExitBadArgs, errors.New("value required"))
- }
-
- ttl := c.Int("ttl")
- inorder := c.Bool("in-order")
-
- var resp *client.Response
- ctx, cancel := contextWithTotalTimeout(c)
- if !inorder {
- // Since PrevNoExist means that the Node must not exist previously,
- // this Set method always creates a new key. Therefore, mk command
- // succeeds only if the key did not previously exist, and the command
- // prevents one from overwriting values accidentally.
- resp, err = ki.Set(ctx, key, value, &client.SetOptions{TTL: time.Duration(ttl) * time.Second, PrevExist: client.PrevNoExist})
- } else {
- // If in-order flag is specified then create an inorder key under
- // the directory identified by the key argument.
- resp, err = ki.CreateInOrder(ctx, key, value, &client.CreateInOrderOptions{TTL: time.Duration(ttl) * time.Second})
- }
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
-
- printResponseKey(resp, c.GlobalString("output"))
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/mkdir_command.go b/etcd-fix/etcdctl/ctlv2/command/mkdir_command.go
deleted file mode 100644
index 9417402..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/mkdir_command.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
- "time"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewMakeDirCommand returns the CLI command for "mkdir".
-func NewMakeDirCommand() cli.Command {
- return cli.Command{
- Name: "mkdir",
- Usage: "make a new directory",
- ArgsUsage: "",
- Flags: []cli.Flag{
- cli.IntFlag{Name: "ttl", Value: 0, Usage: "key time-to-live in seconds"},
- },
- Action: func(c *cli.Context) error {
- mkdirCommandFunc(c, mustNewKeyAPI(c), client.PrevNoExist)
- return nil
- },
- }
-}
-
-// mkdirCommandFunc executes the "mkdir" command.
-func mkdirCommandFunc(c *cli.Context, ki client.KeysAPI, prevExist client.PrevExistType) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
-
- key := c.Args()[0]
- ttl := c.Int("ttl")
-
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Set(ctx, key, "", &client.SetOptions{TTL: time.Duration(ttl) * time.Second, Dir: true, PrevExist: prevExist})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
- if c.GlobalString("output") != "simple" {
- printResponseKey(resp, c.GlobalString("output"))
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/rm_command.go b/etcd-fix/etcdctl/ctlv2/command/rm_command.go
deleted file mode 100644
index 515a72a..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/rm_command.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewRemoveCommand returns the CLI command for "rm".
-func NewRemoveCommand() cli.Command {
- return cli.Command{
- Name: "rm",
- Usage: "remove a key or a directory",
- ArgsUsage: "",
- Flags: []cli.Flag{
- cli.BoolFlag{Name: "dir", Usage: "removes the key if it is an empty directory or a key-value pair"},
- cli.BoolFlag{Name: "recursive, r", Usage: "removes the key and all child keys(if it is a directory)"},
- cli.StringFlag{Name: "with-value", Value: "", Usage: "previous value"},
- cli.IntFlag{Name: "with-index", Value: 0, Usage: "previous index"},
- },
- Action: func(c *cli.Context) error {
- rmCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// rmCommandFunc executes the "rm" command.
-func rmCommandFunc(c *cli.Context, ki client.KeysAPI) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
- key := c.Args()[0]
- recursive := c.Bool("recursive")
- dir := c.Bool("dir")
- prevValue := c.String("with-value")
- prevIndex := c.Int("with-index")
-
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Delete(ctx, key, &client.DeleteOptions{PrevIndex: uint64(prevIndex), PrevValue: prevValue, Dir: dir, Recursive: recursive})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
- if !resp.Node.Dir || c.GlobalString("output") != "simple" {
- printResponseKey(resp, c.GlobalString("output"))
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/rmdir_command.go b/etcd-fix/etcdctl/ctlv2/command/rmdir_command.go
deleted file mode 100644
index 09ca545..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/rmdir_command.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewRemoveDirCommand returns the CLI command for "rmdir".
-func NewRemoveDirCommand() cli.Command {
- return cli.Command{
- Name: "rmdir",
- Usage: "removes the key if it is an empty directory or a key-value pair",
- ArgsUsage: "",
- Action: func(c *cli.Context) error {
- rmdirCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// rmdirCommandFunc executes the "rmdir" command.
-func rmdirCommandFunc(c *cli.Context, ki client.KeysAPI) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
- key := c.Args()[0]
-
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Delete(ctx, key, &client.DeleteOptions{Dir: true})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
-
- if !resp.Node.Dir || c.GlobalString("output") != "simple" {
- printResponseKey(resp, c.GlobalString("output"))
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/role_commands.go b/etcd-fix/etcdctl/ctlv2/command/role_commands.go
deleted file mode 100644
index 7173a1e..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/role_commands.go
+++ /dev/null
@@ -1,255 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "fmt"
- "os"
- "reflect"
- "strings"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
- "go.etcd.io/etcd/pkg/v3/pathutil"
-)
-
-func NewRoleCommands() cli.Command {
- return cli.Command{
- Name: "role",
- Usage: "role add, grant and revoke subcommands",
- Subcommands: []cli.Command{
- {
- Name: "add",
- Usage: "add a new role for the etcd cluster",
- ArgsUsage: " ",
- Action: actionRoleAdd,
- },
- {
- Name: "get",
- Usage: "get details for a role",
- ArgsUsage: "",
- Action: actionRoleGet,
- },
- {
- Name: "list",
- Usage: "list all roles",
- ArgsUsage: " ",
- Action: actionRoleList,
- },
- {
- Name: "remove",
- Usage: "remove a role from the etcd cluster",
- ArgsUsage: "",
- Action: actionRoleRemove,
- },
- {
- Name: "grant",
- Usage: "grant path matches to an etcd role",
- ArgsUsage: "",
- Flags: []cli.Flag{
- cli.StringFlag{Name: "path", Value: "", Usage: "Path granted for the role to access"},
- cli.BoolFlag{Name: "read", Usage: "Grant read-only access"},
- cli.BoolFlag{Name: "write", Usage: "Grant write-only access"},
- cli.BoolFlag{Name: "readwrite, rw", Usage: "Grant read-write access"},
- },
- Action: actionRoleGrant,
- },
- {
- Name: "revoke",
- Usage: "revoke path matches for an etcd role",
- ArgsUsage: "",
- Flags: []cli.Flag{
- cli.StringFlag{Name: "path", Value: "", Usage: "Path revoked for the role to access"},
- cli.BoolFlag{Name: "read", Usage: "Revoke read access"},
- cli.BoolFlag{Name: "write", Usage: "Revoke write access"},
- cli.BoolFlag{Name: "readwrite, rw", Usage: "Revoke read-write access"},
- },
- Action: actionRoleRevoke,
- },
- },
- }
-}
-
-func mustNewAuthRoleAPI(c *cli.Context) client.AuthRoleAPI {
- hc := mustNewClient(c)
-
- if c.GlobalBool("debug") {
- fmt.Fprintf(os.Stderr, "Cluster-Endpoints: %s\n", strings.Join(hc.Endpoints(), ", "))
- }
-
- return client.NewAuthRoleAPI(hc)
-}
-
-func actionRoleList(c *cli.Context) error {
- if len(c.Args()) != 0 {
- fmt.Fprintln(os.Stderr, "No arguments accepted")
- os.Exit(1)
- }
- r := mustNewAuthRoleAPI(c)
- ctx, cancel := contextWithTotalTimeout(c)
- roles, err := r.ListRoles(ctx)
- cancel()
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
-
- for _, role := range roles {
- fmt.Printf("%s\n", role)
- }
-
- return nil
-}
-
-func actionRoleAdd(c *cli.Context) error {
- api, role := mustRoleAPIAndName(c)
- ctx, cancel := contextWithTotalTimeout(c)
- defer cancel()
- currentRole, _ := api.GetRole(ctx, role)
- if currentRole != nil {
- fmt.Fprintf(os.Stderr, "Role %s already exists\n", role)
- os.Exit(1)
- }
-
- err := api.AddRole(ctx, role)
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
-
- fmt.Printf("Role %s created\n", role)
- return nil
-}
-
-func actionRoleRemove(c *cli.Context) error {
- api, role := mustRoleAPIAndName(c)
- ctx, cancel := contextWithTotalTimeout(c)
- err := api.RemoveRole(ctx, role)
- cancel()
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
-
- fmt.Printf("Role %s removed\n", role)
- return nil
-}
-
-func actionRoleGrant(c *cli.Context) error {
- roleGrantRevoke(c, true)
- return nil
-}
-
-func actionRoleRevoke(c *cli.Context) error {
- roleGrantRevoke(c, false)
- return nil
-}
-
-func roleGrantRevoke(c *cli.Context, grant bool) {
- path := c.String("path")
- if path == "" {
- fmt.Fprintln(os.Stderr, "No path specified; please use `--path`")
- os.Exit(1)
- }
- if pathutil.CanonicalURLPath(path) != path {
- fmt.Fprintf(os.Stderr, "Not canonical path; please use `--path=%s`\n", pathutil.CanonicalURLPath(path))
- os.Exit(1)
- }
-
- read := c.Bool("read")
- write := c.Bool("write")
- rw := c.Bool("readwrite")
- permcount := 0
- for _, v := range []bool{read, write, rw} {
- if v {
- permcount++
- }
- }
- if permcount != 1 {
- fmt.Fprintln(os.Stderr, "Please specify exactly one of --read, --write or --readwrite")
- os.Exit(1)
- }
- var permType client.PermissionType
- switch {
- case read:
- permType = client.ReadPermission
- case write:
- permType = client.WritePermission
- case rw:
- permType = client.ReadWritePermission
- }
-
- api, role := mustRoleAPIAndName(c)
- ctx, cancel := contextWithTotalTimeout(c)
- defer cancel()
- currentRole, err := api.GetRole(ctx, role)
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
- var newRole *client.Role
- if grant {
- newRole, err = api.GrantRoleKV(ctx, role, []string{path}, permType)
- } else {
- newRole, err = api.RevokeRoleKV(ctx, role, []string{path}, permType)
- }
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
- if reflect.DeepEqual(newRole, currentRole) {
- if grant {
- fmt.Printf("Role unchanged; already granted")
- } else {
- fmt.Printf("Role unchanged; already revoked")
- }
- }
-
- fmt.Printf("Role %s updated\n", role)
-}
-
-func actionRoleGet(c *cli.Context) error {
- api, rolename := mustRoleAPIAndName(c)
-
- ctx, cancel := contextWithTotalTimeout(c)
- role, err := api.GetRole(ctx, rolename)
- cancel()
- if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
- os.Exit(1)
- }
- fmt.Printf("Role: %s\n", role.Role)
- fmt.Printf("KV Read:\n")
- for _, v := range role.Permissions.KV.Read {
- fmt.Printf("\t%s\n", v)
- }
- fmt.Printf("KV Write:\n")
- for _, v := range role.Permissions.KV.Write {
- fmt.Printf("\t%s\n", v)
- }
- return nil
-}
-
-func mustRoleAPIAndName(c *cli.Context) (client.AuthRoleAPI, string) {
- args := c.Args()
- if len(args) != 1 {
- fmt.Fprintln(os.Stderr, "Please provide a role name")
- os.Exit(1)
- }
-
- name := args[0]
- api := mustNewAuthRoleAPI(c)
- return api, name
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/set_command.go b/etcd-fix/etcdctl/ctlv2/command/set_command.go
deleted file mode 100644
index 619eef1..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/set_command.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
- "os"
- "time"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewSetCommand returns the CLI command for "set".
-func NewSetCommand() cli.Command {
- return cli.Command{
- Name: "set",
- Usage: "set the value of a key",
- ArgsUsage: " ",
- Description: `Set sets the value of a key.
-
- When begins with '-', is interpreted as a flag.
- Insert '--' for workaround:
-
- $ set -- `,
- Flags: []cli.Flag{
- cli.IntFlag{Name: "ttl", Value: 0, Usage: "key time-to-live in seconds"},
- cli.StringFlag{Name: "swap-with-value", Value: "", Usage: "previous value"},
- cli.IntFlag{Name: "swap-with-index", Value: 0, Usage: "previous index"},
- },
- Action: func(c *cli.Context) error {
- setCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// setCommandFunc executes the "set" command.
-func setCommandFunc(c *cli.Context, ki client.KeysAPI) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
- key := c.Args()[0]
- value, err := argOrStdin(c.Args(), os.Stdin, 1)
- if err != nil {
- handleError(c, ExitBadArgs, errors.New("value required"))
- }
-
- ttl := c.Int("ttl")
- prevValue := c.String("swap-with-value")
- prevIndex := c.Int("swap-with-index")
-
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Set(ctx, key, value, &client.SetOptions{TTL: time.Duration(ttl) * time.Second, PrevIndex: uint64(prevIndex), PrevValue: prevValue})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
-
- printResponseKey(resp, c.GlobalString("output"))
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/set_dir_command.go b/etcd-fix/etcdctl/ctlv2/command/set_dir_command.go
deleted file mode 100644
index ed85ad5..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/set_dir_command.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewSetDirCommand returns the CLI command for "setDir".
-func NewSetDirCommand() cli.Command {
- return cli.Command{
- Name: "setdir",
- Usage: "create a new directory or update an existing directory TTL",
- ArgsUsage: "",
- Flags: []cli.Flag{
- cli.IntFlag{Name: "ttl", Value: 0, Usage: "key time-to-live in seconds"},
- },
- Action: func(c *cli.Context) error {
- mkdirCommandFunc(c, mustNewKeyAPI(c), client.PrevIgnore)
- return nil
- },
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/update_command.go b/etcd-fix/etcdctl/ctlv2/command/update_command.go
deleted file mode 100644
index b429d5d..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/update_command.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
- "os"
- "time"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewUpdateCommand returns the CLI command for "update".
-func NewUpdateCommand() cli.Command {
- return cli.Command{
- Name: "update",
- Usage: "update an existing key with a given value",
- ArgsUsage: " ",
- Flags: []cli.Flag{
- cli.IntFlag{Name: "ttl", Value: 0, Usage: "key time-to-live in seconds"},
- },
- Action: func(c *cli.Context) error {
- updateCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// updateCommandFunc executes the "update" command.
-func updateCommandFunc(c *cli.Context, ki client.KeysAPI) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
- key := c.Args()[0]
- value, err := argOrStdin(c.Args(), os.Stdin, 1)
- if err != nil {
- handleError(c, ExitBadArgs, errors.New("value required"))
- }
-
- ttl := c.Int("ttl")
-
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Set(ctx, key, value, &client.SetOptions{TTL: time.Duration(ttl) * time.Second, PrevExist: client.PrevExist})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
-
- printResponseKey(resp, c.GlobalString("output"))
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/update_dir_command.go b/etcd-fix/etcdctl/ctlv2/command/update_dir_command.go
deleted file mode 100644
index 389e581..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/update_dir_command.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "errors"
- "time"
-
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-// NewUpdateDirCommand returns the CLI command for "updatedir".
-func NewUpdateDirCommand() cli.Command {
- return cli.Command{
- Name: "updatedir",
- Usage: "update an existing directory",
- ArgsUsage: " ",
- Flags: []cli.Flag{
- cli.IntFlag{Name: "ttl", Value: 0, Usage: "key time-to-live in seconds"},
- },
- Action: func(c *cli.Context) error {
- updatedirCommandFunc(c, mustNewKeyAPI(c))
- return nil
- },
- }
-}
-
-// updatedirCommandFunc executes the "updatedir" command.
-func updatedirCommandFunc(c *cli.Context, ki client.KeysAPI) {
- if len(c.Args()) == 0 {
- handleError(c, ExitBadArgs, errors.New("key required"))
- }
- key := c.Args()[0]
- ttl := c.Int("ttl")
- ctx, cancel := contextWithTotalTimeout(c)
- resp, err := ki.Set(ctx, key, "", &client.SetOptions{TTL: time.Duration(ttl) * time.Second, Dir: true, PrevExist: client.PrevExist})
- cancel()
- if err != nil {
- handleError(c, ExitServerError, err)
- }
- if c.GlobalString("output") != "simple" {
- printResponseKey(resp, c.GlobalString("output"))
- }
-}
diff --git a/etcd-fix/etcdctl/ctlv2/command/user_commands.go b/etcd-fix/etcdctl/ctlv2/command/user_commands.go
deleted file mode 100644
index 5da1175..0000000
--- a/etcd-fix/etcdctl/ctlv2/command/user_commands.go
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright 2015 The etcd Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package command
-
-import (
- "fmt"
- "os"
- "strings"
-
- "github.com/bgentry/speakeasy"
- "github.com/urfave/cli"
- "go.etcd.io/etcd/client/v2"
-)
-
-func NewUserCommands() cli.Command {
- return cli.Command{
- Name: "user",
- Usage: "user add, grant and revoke subcommands",
- Subcommands: []cli.Command{
- {
- Name: "add",
- Usage: "add a new user for the etcd cluster",
- ArgsUsage: "",
- Action: actionUserAdd,
- },
- {
- Name: "get",
- Usage: "get details for a user",
- ArgsUsage: "",
- Action: actionUserGet,
- },
- {
- Name: "list",
- Usage: "list all current users",
- ArgsUsage: "",
- Action: actionUserList,
- },
- {
- Name: "remove",
- Usage: "remove a user for the etcd cluster",
- ArgsUsage: "",
- Action: actionUserRemove,
- },
- {
- Name: "grant",
- Usage: "grant roles to an etcd user",
- ArgsUsage: "",
- Flags: []cli.Flag{cli.StringSliceFlag{Name: "roles", Value: new(cli.StringSlice), Usage: "List of roles to grant or revoke"}},
- Action: actionUserGrant,
- },
- {
- Name: "revoke",
- Usage: "revoke roles for an etcd user",
- ArgsUsage: "",
- Flags: []cli.Flag{cli.StringSliceFlag{Name: "roles", Value: new(cli.StringSlice), Usage: "List of roles to grant or revoke"}},
- Action: actionUserRevoke,
- },
- {
- Name: "passwd",
- Usage: "change password for a user",
- ArgsUsage: "