Merge pull request #5224 from bhandras/invoice-gc-errors
invoices: do not fail DeleteInvoice if payment addr isn't indexed
This commit is contained in:
commit
41c089fbf4
@ -2425,15 +2425,6 @@ func TestDeleteInvoices(t *testing.T) {
|
||||
// Restore the hash.
|
||||
invoicesToDelete[0].PayHash[2] ^= 3
|
||||
|
||||
// XOR one byte of one of the references' payment address and attempt
|
||||
// to delete.
|
||||
invoicesToDelete[1].PayAddr[5] ^= 7
|
||||
require.Error(t, db.DeleteInvoice(invoicesToDelete))
|
||||
assertInvoiceCount(3)
|
||||
|
||||
// Restore the payment address.
|
||||
invoicesToDelete[1].PayAddr[5] ^= 7
|
||||
|
||||
// XOR the second invoice's payment settle index as it is settled, and
|
||||
// attempt to delete.
|
||||
invoicesToDelete[1].SettleIndex ^= 11
|
||||
|
@ -2305,17 +2305,21 @@ func (d *DB) DeleteInvoice(invoicesToDelete []InvoiceDeleteRef) error {
|
||||
// fetched invoice key matches the one in the
|
||||
// payment address index.
|
||||
key := payAddrIndex.Get(ref.PayAddr[:])
|
||||
if !bytes.Equal(key, invoiceKey) {
|
||||
return fmt.Errorf("unknown invoice " +
|
||||
"in pay addr index")
|
||||
}
|
||||
|
||||
if bytes.Equal(key, invoiceKey) {
|
||||
// Delete from the payment address index.
|
||||
err := payAddrIndex.Delete(ref.PayAddr[:])
|
||||
if err != nil {
|
||||
// Note that since the payment address
|
||||
// index has been introduced with an
|
||||
// empty migration it may be possible
|
||||
// that the index doesn't have an entry
|
||||
// for this invoice.
|
||||
// ref: https://github.com/lightningnetwork/lnd/pull/4285/commits/cbf71b5452fa1d3036a43309e490787c5f7f08dc#r426368127
|
||||
if err := payAddrIndex.Delete(
|
||||
ref.PayAddr[:],
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var addIndexKey [8]byte
|
||||
byteOrder.PutUint64(addIndexKey[:], ref.AddIndex)
|
||||
|
@ -213,8 +213,15 @@ func (i *InvoiceRegistry) scanInvoicesOnStart() error {
|
||||
len(pending))
|
||||
i.expiryWatcher.AddInvoices(pending...)
|
||||
|
||||
if len(removable) > 0 {
|
||||
log.Infof("Attempting to delete %v canceled invoices",
|
||||
len(removable))
|
||||
if err := i.cdb.DeleteInvoice(removable); err != nil {
|
||||
log.Warnf("Deleting old invoices failed: %v", err)
|
||||
log.Warnf("Deleting canceled invoices failed: %v", err)
|
||||
} else {
|
||||
log.Infof("Deleted %v canceled invoices",
|
||||
len(removable))
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
Loading…
Reference in New Issue
Block a user