diff --git a/changelog/12666.txt b/changelog/12666.txt new file mode 100644 index 0000000000000..a6e008773a363 --- /dev/null +++ b/changelog/12666.txt @@ -0,0 +1,4 @@ + +```release-note:improvement +storage/etcd: Make etcd parameter MaxCallSendMsgSize configurable +``` diff --git a/physical/etcd/etcd3.go b/physical/etcd/etcd3.go index 05372e80269b8..5529ac2706479 100644 --- a/physical/etcd/etcd3.go +++ b/physical/etcd/etcd3.go @@ -122,6 +122,15 @@ func newEtcd3Backend(conf map[string]string, logger log.Logger) (physical.Backen cfg.MaxCallRecvMsgSize = int(val) } + if maxSend, ok := conf["max_send_size"]; ok { + // grpc converts this to uint32 internally, so parse as that to avoid passing invalid values + val, err := strconv.ParseUint(maxSend, 10, 32) + if err != nil { + return nil, fmt.Errorf("value of 'max_send_size' (%v) could not be understood: %w", maxSend, err) + } + cfg.MaxCallSendMsgSize = int(val) + } + etcd, err := clientv3.New(cfg) if err != nil { return nil, err diff --git a/website/content/docs/configuration/storage/etcd.mdx b/website/content/docs/configuration/storage/etcd.mdx index 8c69eb2fb7ec0..6dbc234a8ce62 100644 --- a/website/content/docs/configuration/storage/etcd.mdx +++ b/website/content/docs/configuration/storage/etcd.mdx @@ -92,7 +92,15 @@ storage "etcd" { - `lock_timeout` `(string: "15s")` – Specifies lock timeout for master Vault instance. Set bigger value if you don't need faster recovery. -## `etcd` examples +- `max_receive_size` `(int)` – Specifies the client-side response receive limit. +Make sure that "max_receive_size" >= server-side default send/recv limit. +("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes"). + +- `max_send_size` `(int)` – Specifies the client-side request send limit in bytes. +Make sure that "max_send_size" < server-side default send/recv limit. +("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes"). + +## `etcd` Examples ### DNS discovery of cluster members