You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#9047 allows custom gRPC message size limit in clientv3. But neither in v3 etcdctl nor grpc-proxy. If anybody needs this setting in etcdctl or grpc-proxy, here's the git diff.
v3 etcdctl
commit ccb7c9805a5c52312837379e6cc07d31cfdf3163
Author: Gyuho Lee <[email protected]>
Date: Tue Dec 19 21:49:38 2017 -0800
Documentation/upgrades: highlight request limit changes in v3.2, v3.3
Signed-off-by: Gyuho Lee <[email protected]>
diff --git a/Documentation/upgrades/upgrade_3_2.md b/Documentation/upgrades/upgrade_3_2.md
index 441a0c482..8c877fad6 100644
--- a/Documentation/upgrades/upgrade_3_2.md+++ b/Documentation/upgrades/upgrade_3_2.md@@ -64,6 +64,101 @@ if err == context.DeadlineExceeded {
}
'''
+#### Change in 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**.++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.5 KiB+etcd --max-request-bytes 1536++etcdctl put foo bar+# OK++# request exceeding server send limit+etcdctl put foo [2 KiB value...]+# etcdserver: request is too large++# request exceeding client send limit+etcdctl put foo bar --max-send-bytes 1+# Error: rpc error: code = ResourceExhausted desc = grpc: trying to send message larger than max (10 vs. 1)++# request exceeding client receive limit+etcdctl get foo bar --max-send-bytes 5 --max-recv-bytes 5+# Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (48 vs. 5)+'''++With clientv3:++'''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 1.5 MiB and receive limit to `math.MaxInt32`**. Please see [clientv3 godoc](https://godoc.org/github.com/coreos/etcd/clientv3#Config) for more detail.+
#### 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`.
diff --git a/Documentation/upgrades/upgrade_3_3.md b/Documentation/upgrades/upgrade_3_3.md
index 2e724a464..ad92bed02 100644
--- a/Documentation/upgrades/upgrade_3_3.md+++ b/Documentation/upgrades/upgrade_3_3.md@@ -111,6 +111,99 @@ curl -L http://localhost:2379/v3beta/kv/put \
Requests to `/v3alpha` endpoints will redirect to `/v3beta`, and `/v3alpha` will be removed in 3.4 release.
+#### Change in maximum request size limits++3.3 now allows custom request size limits for both server and **client side**.++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.5 KiB+etcd --max-request-bytes 1536++etcdctl put foo bar+# OK++# request exceeding server send limit+etcdctl put foo [2 KiB value...]+# etcdserver: request is too large++# request exceeding client send limit+etcdctl put foo bar --max-send-bytes 1+# Error: rpc error: code = ResourceExhausted desc = grpc: trying to send message larger than max (10 vs. 1)++# request exceeding client receive limit+etcdctl get foo bar --max-send-bytes 5 --max-recv-bytes 5+# Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (48 vs. 5)+'''++With clientv3:++'''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)"+'''+
#### Change in 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.
#9047 allows custom gRPC message size limit in clientv3. But neither in v3
etcdctl
norgrpc-proxy
. If anybody needs this setting inetcdctl
orgrpc-proxy
, here's the git diff.v3
etcdctl
grpc-proxy
The text was updated successfully, but these errors were encountered: