lnd: make MailboxDeliveryTimeout configurable

This commit is contained in:
yyforyongyu 2022-10-20 19:37:31 +08:00
parent 502a8f3210
commit e6bebc4fe7
No known key found for this signature in database
GPG key ID: 9BCD95C4FF296868
4 changed files with 50 additions and 1 deletions

View file

@ -444,6 +444,8 @@ type Config struct {
Sweeper *lncfg.Sweeper `group:"sweeper" namespace:"sweeper"`
Htlcswitch *lncfg.Htlcswitch `group:"htlcswitch" namespace:"htlcswitch"`
// LogWriter is the root logger that all of the daemon's subloggers are
// hooked up to.
LogWriter *build.RotatingLogWriter
@ -462,6 +464,8 @@ type Config struct {
}
// DefaultConfig returns all default values for the Config struct.
//
// nolint:lll
func DefaultConfig() Config {
return Config{
LndDir: DefaultLndDir,
@ -643,6 +647,9 @@ func DefaultConfig() Config {
Sweeper: &lncfg.Sweeper{
BatchWindowDuration: sweep.DefaultBatchWindowDuration,
},
Htlcswitch: &lncfg.Htlcswitch{
MailboxDeliveryTimeout: htlcswitch.DefaultMailboxDeliveryTimeout,
},
}
}
@ -1660,6 +1667,7 @@ func ValidateConfig(cfg Config, interceptor signal.Interceptor, fileParser,
cfg.RPCMiddleware,
cfg.RemoteSigner,
cfg.Sweeper,
cfg.Htlcswitch,
)
if err != nil {
return nil, err

34
lncfg/htlcswitch.go Normal file
View file

@ -0,0 +1,34 @@
package lncfg
import (
"fmt"
"time"
)
var (
// MaxMailboxDeliveryTimeout specifies the max allowed timeout value.
// This value is derived from the itest `async_bidirectional_payments`,
// where both side send 483 payments at the same time to stress test
// lnd.
MaxMailboxDeliveryTimeout = 2 * time.Minute
)
// nolint:lll
type Htlcswitch struct {
MailboxDeliveryTimeout time.Duration `long:"mailboxdeliverytimeout" description:"The timeout value when delivering HTLCs to a channel link. Setting this value too small will result in local payment failures if large number of payments are sent over a short period."`
}
// Validate checks the values configured for htlcswitch.
func (h *Htlcswitch) Validate() error {
if h.MailboxDeliveryTimeout <= 0 {
return fmt.Errorf("mailboxdeliverytimeout must be positive")
}
if h.MailboxDeliveryTimeout > MaxMailboxDeliveryTimeout {
return fmt.Errorf("mailboxdeliverytimeout: %v exceeds "+
"maximum: %v", h.MailboxDeliveryTimeout,
MaxMailboxDeliveryTimeout)
}
return nil
}

View file

@ -1423,3 +1423,10 @@ litecoin.node=ltcd
; window to allow more inputs to be added and thereby lower the fee per input.
; sweeper.batchwindowduration=30s
[htlcswitch]
; The timeout value when delivering HTLCs to a channel link. Setting this value
; too small will result in local payment failures if large number of payments
; are sent over a short period.
; htlcswitch.mailboxdeliverytimeout=60s

View file

@ -658,7 +658,7 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
AllowCircularRoute: cfg.AllowCircularRoute,
RejectHTLC: cfg.RejectHTLC,
Clock: clock.NewDefaultClock(),
MailboxDeliveryTimeout: htlcswitch.DefaultMailboxDeliveryTimeout,
MailboxDeliveryTimeout: cfg.Htlcswitch.MailboxDeliveryTimeout,
DustThreshold: thresholdMSats,
SignAliasUpdate: s.signAliasUpdate,
IsAlias: aliasmgr.IsAlias,