diff --git a/channeldb/payment_control_test.go b/channeldb/payment_control_test.go index 7751ea367..fb965bb32 100644 --- a/channeldb/payment_control_test.go +++ b/channeldb/payment_control_test.go @@ -435,9 +435,9 @@ func TestPaymentControlDeleteNonInFlight(t *testing.T) { } // Delete all failed payments. - if err := db.DeletePayments(true, false); err != nil { - t.Fatal(err) - } + numPayments, err := db.DeletePayments(true, false) + require.NoError(t, err) + require.EqualValues(t, 1, numPayments) // This should leave the succeeded and in-flight payments. dbPayments, err := db.FetchPayments() @@ -471,9 +471,9 @@ func TestPaymentControlDeleteNonInFlight(t *testing.T) { } // Now delete all payments except in-flight. - if err := db.DeletePayments(false, false); err != nil { - t.Fatal(err) - } + numPayments, err = db.DeletePayments(false, false) + require.NoError(t, err) + require.EqualValues(t, 2, numPayments) // This should leave the in-flight payment. dbPayments, err = db.FetchPayments() @@ -536,14 +536,18 @@ func TestPaymentControlDeletePayments(t *testing.T) { assertPayments(t, db, payments) // 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. payments[0].htlcs = 0 assertPayments(t, db, 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 // payment, that shouldn't be altered until it has completed. @@ -551,12 +555,16 @@ func TestPaymentControlDeletePayments(t *testing.T) { assertPayments(t, db, 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:]) // 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:]) } diff --git a/channeldb/payments.go b/channeldb/payments.go index 0ccb75774..9d70cfd95 100644 --- a/channeldb/payments.go +++ b/channeldb/payments.go @@ -826,10 +826,12 @@ func (d *DB) DeletePayment(paymentHash lntypes.Hash, // DeletePayments deletes all completed and failed payments from the DB. 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 -// attempts. -func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) error { - return kvdb.Update(d, func(tx kvdb.RwTx) error { +// failedHtlcsOnly is set, the payment itself won't be deleted, only failed HTLC +// attempts. The method returns the number of deleted payments, which is always +// 0 if failedHtlcsOnly is set. +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) if payments == nil { return nil @@ -906,6 +908,7 @@ func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) error { } deleteIndexes = append(deleteIndexes, seqNrs...) + numPayments++ return nil }) if err != nil { @@ -956,7 +959,14 @@ func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) error { } return nil - }, func() {}) + }, func() { + numPayments = 0 + }) + if err != nil { + return 0, err + } + + return numPayments, nil } // fetchSequenceNumbers fetches all the sequence numbers associated with a diff --git a/rpcserver.go b/rpcserver.go index 76aa057bf..ddd31224e 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -7319,7 +7319,7 @@ func (r *rpcServer) DeleteAllPayments(ctx context.Context, "failed_htlcs_only=%v", req.FailedPaymentsOnly, req.FailedHtlcsOnly) - err := r.server.miscDB.DeletePayments( + _, err := r.server.miscDB.DeletePayments( req.FailedPaymentsOnly, req.FailedHtlcsOnly, ) if err != nil {