multi: make canceled invoice garbage collection configurable

This commit extends the application config with a flag to control canceled
invoice garbage collection upon startup.
This commit is contained in:
Andras Banki-Horvath 2020-07-28 23:57:51 +02:00
parent 0ea763d83c
commit a0d7877d9a
No known key found for this signature in database
GPG Key ID: 80E5375C094198D8
4 changed files with 18 additions and 8 deletions

@ -242,6 +242,8 @@ type Config struct {
KeysendHoldTime time.Duration `long:"keysend-hold-time" description:"If non-zero, keysend payments are accepted but not immediately settled. If the payment isn't settled manually after the specified time, it is canceled automatically. [experimental]"`
GcCanceledInvoicesOnStartup bool `long:"gc-canceled-invoices-on-startup" description:"If true, we'll attempt to garbage collect canceled invoices upon start."`
Routing *routing.Conf `group:"routing" namespace:"routing"`
Workers *lncfg.Workers `group:"workers" namespace:"workers"`

@ -57,6 +57,10 @@ type RegistryConfig struct {
// send payments.
AcceptKeySend bool
// GcCanceledInvoicesOnStartup if set, we'll attempt to garbage collect
// all canceled invoices upon start.
GcCanceledInvoicesOnStartup bool
// KeysendHoldTime indicates for how long we want to accept and hold
// spontaneous keysend payments.
KeysendHoldTime time.Duration
@ -171,7 +175,9 @@ func (i *InvoiceRegistry) scanInvoicesOnStart() error {
if invoice.IsPending() {
pending[paymentHash] = invoice
} else if invoice.State == channeldb.ContractCanceled {
} else if i.cfg.GcCanceledInvoicesOnStartup &&
invoice.State == channeldb.ContractCanceled {
// Consider invoice for removal if it is already
// canceled. Invoices that are expired but not yet
// canceled, will be queued up for cancellation after

@ -1091,8 +1091,9 @@ func TestOldInvoiceRemovalOnStart(t *testing.T) {
require.NoError(t, err)
cfg := RegistryConfig{
FinalCltvRejectDelta: testFinalCltvRejectDelta,
Clock: testClock,
FinalCltvRejectDelta: testFinalCltvRejectDelta,
Clock: testClock,
GcCanceledInvoicesOnStartup: true,
}
expiryWatcher := NewInvoiceExpiryWatcher(cfg.Clock)

@ -396,11 +396,12 @@ func newServer(cfg *Config, listenAddrs []net.Addr, chanDB *channeldb.DB,
}
registryConfig := invoices.RegistryConfig{
FinalCltvRejectDelta: lncfg.DefaultFinalCltvRejectDelta,
HtlcHoldDuration: invoices.DefaultHtlcHoldDuration,
Clock: clock.NewDefaultClock(),
AcceptKeySend: cfg.AcceptKeySend,
KeysendHoldTime: cfg.KeysendHoldTime,
FinalCltvRejectDelta: lncfg.DefaultFinalCltvRejectDelta,
HtlcHoldDuration: invoices.DefaultHtlcHoldDuration,
Clock: clock.NewDefaultClock(),
AcceptKeySend: cfg.AcceptKeySend,
GcCanceledInvoicesOnStartup: cfg.GcCanceledInvoicesOnStartup,
KeysendHoldTime: cfg.KeysendHoldTime,
}
s := &server{