channeldb+rpcserver: return number of deleted payments

This commit is contained in:
Oliver Gugger 2024-11-06 15:30:21 +01:00
parent e3cc4d70c0
commit 15a5fe7704
No known key found for this signature in database
GPG Key ID: 8E4256593F177720
3 changed files with 34 additions and 16 deletions

View File

@ -435,9 +435,9 @@ func TestPaymentControlDeleteNonInFlight(t *testing.T) {
} }
// Delete all failed payments. // Delete all failed payments.
if err := db.DeletePayments(true, false); err != nil { numPayments, err := db.DeletePayments(true, false)
t.Fatal(err) require.NoError(t, err)
} require.EqualValues(t, 1, numPayments)
// This should leave the succeeded and in-flight payments. // This should leave the succeeded and in-flight payments.
dbPayments, err := db.FetchPayments() dbPayments, err := db.FetchPayments()
@ -471,9 +471,9 @@ func TestPaymentControlDeleteNonInFlight(t *testing.T) {
} }
// Now delete all payments except in-flight. // Now delete all payments except in-flight.
if err := db.DeletePayments(false, false); err != nil { numPayments, err = db.DeletePayments(false, false)
t.Fatal(err) require.NoError(t, err)
} require.EqualValues(t, 2, numPayments)
// This should leave the in-flight payment. // This should leave the in-flight payment.
dbPayments, err = db.FetchPayments() dbPayments, err = db.FetchPayments()
@ -536,14 +536,18 @@ func TestPaymentControlDeletePayments(t *testing.T) {
assertPayments(t, db, payments) assertPayments(t, db, payments)
// Delete HTLC attempts for failed payments only. // Delete HTLC attempts for failed payments only.
require.NoError(t, db.DeletePayments(true, true)) numPayments, err := db.DeletePayments(true, true)
require.NoError(t, err)
require.EqualValues(t, 0, numPayments)
// The failed payment is the only altered one. // The failed payment is the only altered one.
payments[0].htlcs = 0 payments[0].htlcs = 0
assertPayments(t, db, payments) assertPayments(t, db, payments)
// Delete failed attempts for all payments. // Delete failed attempts for all payments.
require.NoError(t, db.DeletePayments(false, true)) numPayments, err = db.DeletePayments(false, true)
require.NoError(t, err)
require.EqualValues(t, 0, numPayments)
// The failed attempts should be deleted, except for the in-flight // The failed attempts should be deleted, except for the in-flight
// payment, that shouldn't be altered until it has completed. // payment, that shouldn't be altered until it has completed.
@ -551,12 +555,16 @@ func TestPaymentControlDeletePayments(t *testing.T) {
assertPayments(t, db, payments) assertPayments(t, db, payments)
// Now delete all failed payments. // Now delete all failed payments.
require.NoError(t, db.DeletePayments(true, false)) numPayments, err = db.DeletePayments(true, false)
require.NoError(t, err)
require.EqualValues(t, 1, numPayments)
assertPayments(t, db, payments[1:]) assertPayments(t, db, payments[1:])
// Finally delete all completed payments. // Finally delete all completed payments.
require.NoError(t, db.DeletePayments(false, false)) numPayments, err = db.DeletePayments(false, false)
require.NoError(t, err)
require.EqualValues(t, 1, numPayments)
assertPayments(t, db, payments[2:]) assertPayments(t, db, payments[2:])
} }

View File

@ -826,10 +826,12 @@ func (d *DB) DeletePayment(paymentHash lntypes.Hash,
// DeletePayments deletes all completed and failed payments from the DB. If // DeletePayments deletes all completed and failed payments from the DB. If
// failedOnly is set, only failed payments will be considered for deletion. If // failedOnly is set, only failed payments will be considered for deletion. If
// failedHtlsOnly is set, the payment itself won't be deleted, only failed HTLC // failedHtlcsOnly is set, the payment itself won't be deleted, only failed HTLC
// attempts. // attempts. The method returns the number of deleted payments, which is always
func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) error { // 0 if failedHtlcsOnly is set.
return kvdb.Update(d, func(tx kvdb.RwTx) error { func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) (int, error) {
var numPayments int
err := kvdb.Update(d, func(tx kvdb.RwTx) error {
payments := tx.ReadWriteBucket(paymentsRootBucket) payments := tx.ReadWriteBucket(paymentsRootBucket)
if payments == nil { if payments == nil {
return nil return nil
@ -906,6 +908,7 @@ func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) error {
} }
deleteIndexes = append(deleteIndexes, seqNrs...) deleteIndexes = append(deleteIndexes, seqNrs...)
numPayments++
return nil return nil
}) })
if err != nil { if err != nil {
@ -956,7 +959,14 @@ func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) error {
} }
return nil return nil
}, func() {}) }, func() {
numPayments = 0
})
if err != nil {
return 0, err
}
return numPayments, nil
} }
// fetchSequenceNumbers fetches all the sequence numbers associated with a // fetchSequenceNumbers fetches all the sequence numbers associated with a

View File

@ -7319,7 +7319,7 @@ func (r *rpcServer) DeleteAllPayments(ctx context.Context,
"failed_htlcs_only=%v", req.FailedPaymentsOnly, "failed_htlcs_only=%v", req.FailedPaymentsOnly,
req.FailedHtlcsOnly) req.FailedHtlcsOnly)
err := r.server.miscDB.DeletePayments( _, err := r.server.miscDB.DeletePayments(
req.FailedPaymentsOnly, req.FailedHtlcsOnly, req.FailedPaymentsOnly, req.FailedHtlcsOnly,
) )
if err != nil { if err != nil {