multi: thread context through DeletePayments
This commit is contained in:
6 files changed
+19
-14
No files matched your search
@@ -36,7 +36,8 @@ type PaymentWriter interface {
|
||||
|
||||
// DeletePayments deletes all payments from the DB given the specified
|
||||
// flags.
|
||||
DeletePayments(failedOnly, failedAttemptsOnly bool) (int, error)
|
||||
DeletePayments(ctx context.Context, failedOnly,
|
||||
failedAttemptsOnly bool) (int, error)
|
||||
|
||||
PaymentControl
|
||||
}
|
||||
|
||||
@@ -1372,7 +1372,7 @@ func (p *KVStore) DeletePayment(_ context.Context, paymentHash lntypes.Hash,
|
||||
// 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 (p *KVStore) DeletePayments(failedOnly,
|
||||
func (p *KVStore) DeletePayments(_ context.Context, failedOnly,
|
||||
failedHtlcsOnly bool) (int, error) {
|
||||
|
||||
var numPayments int
|
||||
|
||||
@@ -30,6 +30,8 @@ import (
|
||||
func TestKVStoreDeleteNonInFlight(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctx := t.Context()
|
||||
|
||||
paymentDB := NewKVTestDB(t)
|
||||
|
||||
// Create a sequence number for duplicate payments that will not collide
|
||||
@@ -180,7 +182,7 @@ func TestKVStoreDeleteNonInFlight(t *testing.T) {
|
||||
}
|
||||
|
||||
// Delete all failed payments.
|
||||
numPayments, err := paymentDB.DeletePayments(true, false)
|
||||
numPayments, err := paymentDB.DeletePayments(ctx, true, false)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 1, numPayments)
|
||||
|
||||
@@ -216,7 +218,7 @@ func TestKVStoreDeleteNonInFlight(t *testing.T) {
|
||||
}
|
||||
|
||||
// Now delete all payments except in-flight.
|
||||
numPayments, err = paymentDB.DeletePayments(false, false)
|
||||
numPayments, err = paymentDB.DeletePayments(ctx, false, false)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 2, numPayments)
|
||||
|
||||
|
||||
@@ -1658,6 +1658,8 @@ func TestFailsWithoutInFlight(t *testing.T) {
|
||||
func TestDeletePayments(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctx := t.Context()
|
||||
|
||||
paymentDB, _ := NewTestDB(t)
|
||||
|
||||
// Register three payments:
|
||||
@@ -1678,7 +1680,7 @@ func TestDeletePayments(t *testing.T) {
|
||||
assertDBPayments(t, paymentDB, payments)
|
||||
|
||||
// Delete HTLC attempts for failed payments only.
|
||||
numPayments, err := paymentDB.DeletePayments(true, true)
|
||||
numPayments, err := paymentDB.DeletePayments(ctx, true, true)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 0, numPayments)
|
||||
|
||||
@@ -1687,7 +1689,7 @@ func TestDeletePayments(t *testing.T) {
|
||||
assertDBPayments(t, paymentDB, payments)
|
||||
|
||||
// Delete failed attempts for all payments.
|
||||
numPayments, err = paymentDB.DeletePayments(false, true)
|
||||
numPayments, err = paymentDB.DeletePayments(ctx, false, true)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 0, numPayments)
|
||||
|
||||
@@ -1697,14 +1699,14 @@ func TestDeletePayments(t *testing.T) {
|
||||
assertDBPayments(t, paymentDB, payments)
|
||||
|
||||
// Now delete all failed payments.
|
||||
numPayments, err = paymentDB.DeletePayments(true, false)
|
||||
numPayments, err = paymentDB.DeletePayments(ctx, true, false)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 1, numPayments)
|
||||
|
||||
assertDBPayments(t, paymentDB, payments[1:])
|
||||
|
||||
// Finally delete all completed payments.
|
||||
numPayments, err = paymentDB.DeletePayments(false, false)
|
||||
numPayments, err = paymentDB.DeletePayments(ctx, false, false)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 1, numPayments)
|
||||
|
||||
|
||||
@@ -1874,13 +1874,13 @@ func (s *SQLStore) Fail(paymentHash lntypes.Hash,
|
||||
// This method is part of the PaymentWriter interface, which is embedded in
|
||||
// the DB interface.
|
||||
//
|
||||
// TODO(ziggie): batch this call instead in the background so for dbs with
|
||||
// many payments it doesn't block the main thread.
|
||||
func (s *SQLStore) DeletePayments(failedOnly, failedHtlcsOnly bool) (int,
|
||||
error) {
|
||||
// TODO(ziggie): batch and use iterator instead, moreover we dont need to fetch
|
||||
// the complete payment data for each payment, we can just fetch the payment ID
|
||||
// and the resolution types to decide if the payment is removable.
|
||||
func (s *SQLStore) DeletePayments(ctx context.Context, failedOnly,
|
||||
failedHtlcsOnly bool) (int, error) {
|
||||
|
||||
var numPayments int
|
||||
ctx := context.TODO()
|
||||
|
||||
extractCursor := func(row sqlc.FilterPaymentsRow) int64 {
|
||||
return row.Payment.ID
|
||||
|
||||
+1
-1
@@ -7782,7 +7782,7 @@ func (r *rpcServer) DeleteAllPayments(ctx context.Context,
|
||||
req.FailedHtlcsOnly)
|
||||
|
||||
numDeletedPayments, err := r.server.paymentsDB.DeletePayments(
|
||||
req.FailedPaymentsOnly, req.FailedHtlcsOnly,
|
||||
ctx, req.FailedPaymentsOnly, req.FailedHtlcsOnly,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in new issue
Block a user