Increase the allowed concurrent gRPC streams (#16327)

* Increase the allowed concurrent gRPC streams

* Add a env override for the max streams setting

* Add changelog

* go fmt

* fix builds on 32bit systems
This commit is contained in:
Brian Kassouf 2022-07-20 12:26:52 -07:00 committed by GitHub
parent c6b659c060
commit d6bb62a0ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 0 deletions

3
changelog/16327.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
core: Increase the allowed concurrent gRPC streams over the cluster port.
```

View File

@ -6,9 +6,11 @@ import (
"crypto/x509" "crypto/x509"
"errors" "errors"
"fmt" "fmt"
"math"
"net" "net"
"net/url" "net/url"
"os" "os"
"strconv"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@ -73,6 +75,17 @@ type Listener struct {
} }
func NewListener(networkLayer NetworkLayer, cipherSuites []uint16, logger log.Logger, idleTimeout time.Duration) *Listener { func NewListener(networkLayer NetworkLayer, cipherSuites []uint16, logger log.Logger, idleTimeout time.Duration) *Listener {
var maxStreams uint32 = math.MaxUint32
if override := os.Getenv("VAULT_GRPC_MAX_STREAMS"); override != "" {
i, err := strconv.ParseUint(override, 10, 32)
if err != nil {
logger.Warn("vault grpc max streams override must be an uint32 integer", "value", override)
} else {
maxStreams = uint32(i)
logger.Info("overriding grpc max streams", "value", i)
}
}
// Create the HTTP/2 server that will be shared by both RPC and regular // Create the HTTP/2 server that will be shared by both RPC and regular
// duties. Doing it this way instead of listening via the server and gRPC // duties. Doing it this way instead of listening via the server and gRPC
// allows us to re-use the same port via ALPN. We can just tell the server // allows us to re-use the same port via ALPN. We can just tell the server
@ -81,6 +94,10 @@ func NewListener(networkLayer NetworkLayer, cipherSuites []uint16, logger log.Lo
// Our forwarding connections heartbeat regularly so anything else we // Our forwarding connections heartbeat regularly so anything else we
// want to go away/get cleaned up pretty rapidly // want to go away/get cleaned up pretty rapidly
IdleTimeout: idleTimeout, IdleTimeout: idleTimeout,
// By default this is 250 which can be too small on high traffic
// clusters with many forwarded or replication gRPC connections.
MaxConcurrentStreams: maxStreams,
} }
return &Listener{ return &Listener{