invoices: do not fail DeleteInvoice if payment addr isn't indexed
This commit relaxes DeleteInvoice failure cases by removing the requirement that the invoice needs to be indexed by the payment address. Since payment address index was introduced with an empty migration it is possible that users have old invoices which were never added to this index causing invoice garbage collection to get stuck.
This commit is contained in:
parent
a36c95f732
commit
adbcc3f7a3
@ -2425,15 +2425,6 @@ func TestDeleteInvoices(t *testing.T) {
|
|||||||
// Restore the hash.
|
// Restore the hash.
|
||||||
invoicesToDelete[0].PayHash[2] ^= 3
|
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
|
// XOR the second invoice's payment settle index as it is settled, and
|
||||||
// attempt to delete.
|
// attempt to delete.
|
||||||
invoicesToDelete[1].SettleIndex ^= 11
|
invoicesToDelete[1].SettleIndex ^= 11
|
||||||
|
@ -2305,15 +2305,19 @@ func (d *DB) DeleteInvoice(invoicesToDelete []InvoiceDeleteRef) error {
|
|||||||
// fetched invoice key matches the one in the
|
// fetched invoice key matches the one in the
|
||||||
// payment address index.
|
// payment address index.
|
||||||
key := payAddrIndex.Get(ref.PayAddr[:])
|
key := payAddrIndex.Get(ref.PayAddr[:])
|
||||||
if !bytes.Equal(key, invoiceKey) {
|
if bytes.Equal(key, invoiceKey) {
|
||||||
return fmt.Errorf("unknown invoice " +
|
// Delete from the payment address index.
|
||||||
"in pay addr index")
|
// Note that since the payment address
|
||||||
}
|
// index has been introduced with an
|
||||||
|
// empty migration it may be possible
|
||||||
// Delete from the payment address index.
|
// that the index doesn't have an entry
|
||||||
err := payAddrIndex.Delete(ref.PayAddr[:])
|
// for this invoice.
|
||||||
if err != nil {
|
// ref: https://github.com/lightningnetwork/lnd/pull/4285/commits/cbf71b5452fa1d3036a43309e490787c5f7f08dc#r426368127
|
||||||
return err
|
if err := payAddrIndex.Delete(
|
||||||
|
ref.PayAddr[:],
|
||||||
|
); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user