From 5ab7dd89e79bd3bd0aba3a63c888791ba2c6ba16 Mon Sep 17 00:00:00 2001 From: fguisso Date: Tue, 17 Mar 2020 16:43:14 -0300 Subject: [PATCH] rpcserver: parameterize acceptortimeout --- config.go | 38 ++++++++++++++++++++++---------------- rpcserver.go | 14 ++++---------- sample-lnd.conf | 5 +++++ 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/config.go b/config.go index 99011dca..ff820b1a 100644 --- a/config.go +++ b/config.go @@ -125,6 +125,10 @@ const ( // HTLCs on our channels. minTimeLockDelta = 4 + // defaultAcceptorTimeout is the time after which an RPCAcceptor will time + // out and return false if it hasn't yet received a response. + defaultAcceptorTimeout = 15 * time.Second + defaultAlias = "" defaultColor = "#3399FF" ) @@ -245,13 +249,14 @@ type config struct { TLSExtraDomains []string `long:"tlsextradomain" description:"Adds an extra domain to the generated certificate"` TLSAutoRefresh bool `long:"tlsautorefresh" description:"Re-generate TLS certificate and key if the IPs or domains are changed"` - NoMacaroons bool `long:"no-macaroons" description:"Disable macaroon authentication"` - AdminMacPath string `long:"adminmacaroonpath" description:"Path to write the admin macaroon for lnd's RPC and REST services if it doesn't exist"` - ReadMacPath string `long:"readonlymacaroonpath" description:"Path to write the read-only macaroon for lnd's RPC and REST services if it doesn't exist"` - InvoiceMacPath string `long:"invoicemacaroonpath" description:"Path to the invoice-only macaroon for lnd's RPC and REST services if it doesn't exist"` - LogDir string `long:"logdir" description:"Directory to log output."` - MaxLogFiles int `long:"maxlogfiles" description:"Maximum logfiles to keep (0 for no rotation)"` - MaxLogFileSize int `long:"maxlogfilesize" description:"Maximum logfile size in MB"` + NoMacaroons bool `long:"no-macaroons" description:"Disable macaroon authentication"` + AdminMacPath string `long:"adminmacaroonpath" description:"Path to write the admin macaroon for lnd's RPC and REST services if it doesn't exist"` + ReadMacPath string `long:"readonlymacaroonpath" description:"Path to write the read-only macaroon for lnd's RPC and REST services if it doesn't exist"` + InvoiceMacPath string `long:"invoicemacaroonpath" description:"Path to the invoice-only macaroon for lnd's RPC and REST services if it doesn't exist"` + LogDir string `long:"logdir" description:"Directory to log output."` + MaxLogFiles int `long:"maxlogfiles" description:"Maximum logfiles to keep (0 for no rotation)"` + MaxLogFileSize int `long:"maxlogfilesize" description:"Maximum logfile size in MB"` + AcceptorTimeout time.Duration `long:"acceptortimeout" description:"Time after which an RPCAcceptor will time out and return false if it hasn't yet received a response"` // We'll parse these 'raw' string arguments into real net.Addrs in the // loadConfig function. We need to expose the 'raw' strings so the @@ -361,15 +366,16 @@ type config struct { // 4) Parse CLI options and overwrite/add any specified options func loadConfig() (*config, error) { defaultCfg := config{ - LndDir: defaultLndDir, - ConfigFile: defaultConfigFile, - DataDir: defaultDataDir, - DebugLevel: defaultLogLevel, - TLSCertPath: defaultTLSCertPath, - TLSKeyPath: defaultTLSKeyPath, - LogDir: defaultLogDir, - MaxLogFiles: defaultMaxLogFiles, - MaxLogFileSize: defaultMaxLogFileSize, + LndDir: defaultLndDir, + ConfigFile: defaultConfigFile, + DataDir: defaultDataDir, + DebugLevel: defaultLogLevel, + TLSCertPath: defaultTLSCertPath, + TLSKeyPath: defaultTLSKeyPath, + LogDir: defaultLogDir, + MaxLogFiles: defaultMaxLogFiles, + MaxLogFileSize: defaultMaxLogFileSize, + AcceptorTimeout: defaultAcceptorTimeout, Bitcoin: &chainConfig{ MinHTLCIn: defaultBitcoinMinHTLCInMSat, MinHTLCOut: defaultBitcoinMinHTLCOutMSat, diff --git a/rpcserver.go b/rpcserver.go index 841520a3..fe6d579b 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -82,12 +82,6 @@ var ( // It is set to the value under the Bitcoin chain as default. MaxPaymentMSat = maxBtcPaymentMSat - // defaultAcceptorTimeout is the time after which an RPCAcceptor will time - // out and return false if it hasn't yet received a response. - // - // TODO: Make this configurable - defaultAcceptorTimeout = 15 * time.Second - // readPermissions is a slice of all entities that allow read // permissions for authorization purposes, all lowercase. readPermissions = []bakery.Op{ @@ -5846,14 +5840,14 @@ func (r *rpcServer) ChannelAcceptor(stream lnrpc.Lightning_ChannelAcceptorServer } // timeout is the time after which ChannelAcceptRequests expire. - timeout := time.After(defaultAcceptorTimeout) + timeout := time.After(cfg.AcceptorTimeout) // Send the request to the newRequests channel. select { case newRequests <- newRequest: case <-timeout: rpcsLog.Errorf("RPCAcceptor returned false - reached timeout of %d", - defaultAcceptorTimeout) + cfg.AcceptorTimeout) return false case <-quit: return false @@ -5862,13 +5856,13 @@ func (r *rpcServer) ChannelAcceptor(stream lnrpc.Lightning_ChannelAcceptorServer } // Receive the response and return it. If no response has been received - // in defaultAcceptorTimeout, then return false. + // in AcceptorTimeout, then return false. select { case resp := <-respChan: return resp case <-timeout: rpcsLog.Errorf("RPCAcceptor returned false - reached timeout of %d", - defaultAcceptorTimeout) + cfg.AcceptorTimeout) return false case <-quit: return false diff --git a/sample-lnd.conf b/sample-lnd.conf index ee3ce7cf..d37baae1 100644 --- a/sample-lnd.conf +++ b/sample-lnd.conf @@ -22,6 +22,11 @@ ; Max log file size in MB before it is rotated. ; maxlogfilesize=10 +; Time after which an RPCAcceptor will time out and return false if +; it hasn't yet received a response. +; acceptortimeout=15s + + ; Path to TLS certificate for lnd's RPC and REST services. ; tlscertpath=~/.lnd/tls.cert