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