Merge PR #4285: Update REST Client to Support Custom R/W Timeouts

This commit is contained in:
Alexander Bezobchuk 2019-05-07 13:04:48 -04:00 committed by GitHub
parent 7301dc9a49
commit 99df748dda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 8 deletions

View File

@ -0,0 +1 @@
#4263 RestServer#Start now takes read and write timeout arguments.

View File

@ -0,0 +1,2 @@
#4263 Add `--read-timeout` and `--write-timeout` args to the `rest-server` command
to support custom RPC R/W timeouts.

View File

@ -49,6 +49,8 @@ const (
FlagListenAddr = "laddr"
FlagCORS = "cors"
FlagMaxOpenConnections = "max-open"
FlagRPCReadTimeout = "read-timeout"
FlagRPCWriteTimeout = "write-timeout"
FlagOutputDocument = "output-document" // inspired by wget -O
FlagSkipConfirmation = "yes"
)
@ -116,7 +118,9 @@ func RegisterRestServerFlags(cmd *cobra.Command) *cobra.Command {
cmd = GetCommands(cmd)[0]
cmd.Flags().String(FlagListenAddr, "tcp://localhost:1317", "The address for the server to listen on")
cmd.Flags().String(FlagCORS, "", "Set the domains that can make CORS requests (* for all)")
cmd.Flags().Int(FlagMaxOpenConnections, 1000, "The number of maximum open connections")
cmd.Flags().Uint(FlagMaxOpenConnections, 1000, "The number of maximum open connections")
cmd.Flags().Uint(FlagRPCReadTimeout, 10, "The RPC read timeout (in seconds)")
cmd.Flags().Uint(FlagRPCWriteTimeout, 10, "The RPC write timeout (in seconds)")
return cmd
}

View File

@ -5,6 +5,7 @@ import (
"net"
"net/http"
"os"
"time"
"github.com/gorilla/mux"
"github.com/rakyll/statik/fs"
@ -45,20 +46,22 @@ func NewRestServer(cdc *codec.Codec) *RestServer {
Mux: r,
CliCtx: cliCtx,
Cdc: cdc,
log: logger,
log: logger,
}
}
// Start starts the rest server
func (rs *RestServer) Start(listenAddr string, maxOpen int) (err error) {
func (rs *RestServer) Start(listenAddr string, maxOpen int, readTimeout, writeTimeout uint) (err error) {
server.TrapSignal(func() {
err := rs.listener.Close()
rs.log.Error("error closing listener", "err", err)
})
cfg := rpcserver.DefaultConfig()
cfg.MaxOpenConnections = maxOpen
cfg := &rpcserver.Config{
MaxOpenConnections: maxOpen,
ReadTimeout: time.Duration(readTimeout) * time.Second,
WriteTimeout: time.Duration(writeTimeout) * time.Second,
}
rs.listener, err = rpcserver.Listen(listenAddr, cfg)
if err != nil {
@ -87,8 +90,12 @@ func ServeCommand(cdc *codec.Codec, registerRoutesFn func(*RestServer)) *cobra.C
registerRoutesFn(rs)
// Start the rest server and return error if one exists
err = rs.Start(viper.GetString(client.FlagListenAddr),
viper.GetInt(client.FlagMaxOpenConnections))
err = rs.Start(
viper.GetString(client.FlagListenAddr),
viper.GetInt(client.FlagMaxOpenConnections),
uint(viper.GetInt(client.FlagRPCReadTimeout)),
uint(viper.GetInt(client.FlagRPCWriteTimeout)),
)
return err
},