dex/vendor/go.etcd.io/etcd/clientv3/README.md

86 lines
2.8 KiB
Markdown
Raw Normal View History

2018-11-28 22:41:16 +05:30
# etcd/clientv3
2020-01-31 15:02:00 +05:30
[![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)
2018-11-28 22:41:16 +05:30
`etcd/clientv3` is the official Go etcd client for v3.
## Install
```bash
2020-01-31 15:02:00 +05:30
go get go.etcd.io/etcd/clientv3
2018-11-28 22:41:16 +05:30
```
## 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()
```
2020-01-31 15:02:00 +05:30
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.
2018-11-28 22:41:16 +05:30
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
```
2020-01-31 15:02:00 +05:30
For full compatibility, it is recommended to vendor builds using etcd's vendored packages, using tools like `golang/dep`, as in [vendor directories](https://golang.org/cmd/go/#hdr-Vendor_Directories).
2018-11-28 22:41:16 +05:30
## Error Handling
etcd client returns 2 types of errors:
1. context error: canceled or deadline exceeded.
2020-01-31 15:02:00 +05:30
2. gRPC error: see [api/v3rpc/rpctypes](https://godoc.org/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes).
2018-11-28 22:41:16 +05:30
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
2020-01-31 15:02:00 +05:30
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).
2018-11-28 22:41:16 +05:30
## Namespacing
2020-01-31 15:02:00 +05:30
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`.
2018-11-28 22:41:16 +05:30
## Examples
2020-01-31 15:02:00 +05:30
More code examples can be found at [GoDoc](https://godoc.org/go.etcd.io/etcd/clientv3).