Skip to content

Commit bfdb4c1

Browse files
committed
multi: unify all payment related kv data.
All interactions related to the payment db are now part of the kvPaymentDB struct.
1 parent f4a39a7 commit bfdb4c1

File tree

3 files changed

+57
-50
lines changed

3 files changed

+57
-50
lines changed

channeldb/payments.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ func (p *KVPaymentsDB) InitPayment(paymentHash lntypes.Hash,
426426
func (p *KVPaymentsDB) DeleteFailedAttempts(hash lntypes.Hash) error {
427427
if !p.db.keepFailedPaymentAttempts {
428428
const failedHtlcsOnly = true
429-
err := p.db.DeletePayment(hash, failedHtlcsOnly)
429+
err := p.DeletePayment(hash, failedHtlcsOnly)
430430
if err != nil {
431431
return err
432432
}
@@ -1058,10 +1058,10 @@ func htlcBucketKey(prefix, id []byte) []byte {
10581058
// FetchPayments returns all sent payments found in the DB.
10591059
//
10601060
// nolint: dupl
1061-
func (d *DB) FetchPayments() ([]*MPPayment, error) {
1061+
func (p *KVPaymentsDB) FetchPayments() ([]*MPPayment, error) {
10621062
var payments []*MPPayment
10631063

1064-
err := kvdb.View(d, func(tx kvdb.RTx) error {
1064+
err := kvdb.View(p.db, func(tx kvdb.RTx) error {
10651065
paymentsBucket := tx.ReadBucket(paymentsRootBucket)
10661066
if paymentsBucket == nil {
10671067
return nil
@@ -1364,10 +1364,12 @@ type PaymentsResponse struct {
13641364
// QueryPayments is a query to the payments database which is restricted
13651365
// to a subset of payments by the payments query, containing an offset
13661366
// index and a maximum number of returned payments.
1367-
func (d *DB) QueryPayments(query PaymentsQuery) (PaymentsResponse, error) {
1367+
func (p *KVPaymentsDB) QueryPayments(query PaymentsQuery) (PaymentsResponse,
1368+
error) {
1369+
13681370
var resp PaymentsResponse
13691371

1370-
if err := kvdb.View(d, func(tx kvdb.RTx) error {
1372+
if err := kvdb.View(p.db, func(tx kvdb.RTx) error {
13711373
// Get the root payments bucket.
13721374
paymentsBucket := tx.ReadBucket(paymentsRootBucket)
13731375
if paymentsBucket == nil {
@@ -1581,10 +1583,10 @@ func fetchPaymentWithSequenceNumber(tx kvdb.RTx, paymentHash lntypes.Hash,
15811583
// DeletePayment deletes a payment from the DB given its payment hash. If
15821584
// failedHtlcsOnly is set, only failed HTLC attempts of the payment will be
15831585
// deleted.
1584-
func (d *DB) DeletePayment(paymentHash lntypes.Hash,
1586+
func (p *KVPaymentsDB) DeletePayment(paymentHash lntypes.Hash,
15851587
failedHtlcsOnly bool) error {
15861588

1587-
return kvdb.Update(d, func(tx kvdb.RwTx) error {
1589+
return kvdb.Update(p.db, func(tx kvdb.RwTx) error {
15881590
payments := tx.ReadWriteBucket(paymentsRootBucket)
15891591
if payments == nil {
15901592
return nil
@@ -1673,9 +1675,11 @@ func (d *DB) DeletePayment(paymentHash lntypes.Hash,
16731675
// failedHtlcsOnly is set, the payment itself won't be deleted, only failed HTLC
16741676
// attempts. The method returns the number of deleted payments, which is always
16751677
// 0 if failedHtlcsOnly is set.
1676-
func (d *DB) DeletePayments(failedOnly, failedHtlcsOnly bool) (int, error) {
1678+
func (p *KVPaymentsDB) DeletePayments(failedOnly, failedHtlcsOnly bool) (int,
1679+
error) {
1680+
16771681
var numPayments int
1678-
err := kvdb.Update(d, func(tx kvdb.RwTx) error {
1682+
err := kvdb.Update(p.db, func(tx kvdb.RwTx) error {
16791683
payments := tx.ReadWriteBucket(paymentsRootBucket)
16801684
if payments == nil {
16811685
return nil

channeldb/payments_test.go

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -507,9 +507,11 @@ func TestQueryPayments(t *testing.T) {
507507
t.Fatalf("unable to init db: %v", err)
508508
}
509509

510+
paymentDB := NewKVPaymentsDB(db)
511+
510512
// Make a preliminary query to make sure it's ok to
511513
// query when we have no payments.
512-
resp, err := db.QueryPayments(tt.query)
514+
resp, err := paymentDB.QueryPayments(tt.query)
513515
require.NoError(t, err)
514516
require.Len(t, resp.Payments, 0)
515517

@@ -521,7 +523,6 @@ func TestQueryPayments(t *testing.T) {
521523
// where we have duplicates in the nested duplicates
522524
// bucket.
523525
nonDuplicatePayments := 6
524-
paymentDB := NewKVPaymentsDB(db)
525526

526527
for i := 0; i < nonDuplicatePayments; i++ {
527528
// Generate a test payment.
@@ -574,7 +575,7 @@ func TestQueryPayments(t *testing.T) {
574575
}
575576

576577
// Fetch all payments in the database.
577-
allPayments, err := db.FetchPayments()
578+
allPayments, err := paymentDB.FetchPayments()
578579
if err != nil {
579580
t.Fatalf("payments could not be fetched from "+
580581
"database: %v", err)
@@ -586,7 +587,7 @@ func TestQueryPayments(t *testing.T) {
586587
len(allPayments), 6)
587588
}
588589

589-
querySlice, err := db.QueryPayments(tt.query)
590+
querySlice, err := paymentDB.QueryPayments(tt.query)
590591
if err != nil {
591592
t.Fatalf("unexpected error: %v", err)
592593
}
@@ -1277,12 +1278,12 @@ func TestKVPaymentsDBDeleteNonInFlight(t *testing.T) {
12771278
}
12781279

12791280
// Delete all failed payments.
1280-
numPayments, err := db.DeletePayments(true, false)
1281+
numPayments, err := paymentDB.DeletePayments(true, false)
12811282
require.NoError(t, err)
12821283
require.EqualValues(t, 1, numPayments)
12831284

12841285
// This should leave the succeeded and in-flight payments.
1285-
dbPayments, err := db.FetchPayments()
1286+
dbPayments, err := paymentDB.FetchPayments()
12861287
if err != nil {
12871288
t.Fatal(err)
12881289
}
@@ -1313,12 +1314,12 @@ func TestKVPaymentsDBDeleteNonInFlight(t *testing.T) {
13131314
}
13141315

13151316
// Now delete all payments except in-flight.
1316-
numPayments, err = db.DeletePayments(false, false)
1317+
numPayments, err = paymentDB.DeletePayments(false, false)
13171318
require.NoError(t, err)
13181319
require.EqualValues(t, 2, numPayments)
13191320

13201321
// This should leave the in-flight payment.
1321-
dbPayments, err = db.FetchPayments()
1322+
dbPayments, err = paymentDB.FetchPayments()
13221323
if err != nil {
13231324
t.Fatal(err)
13241325
}
@@ -1375,40 +1376,40 @@ func TestKVPaymentsDBDeletePayments(t *testing.T) {
13751376
createTestPayments(t, paymentDB, payments)
13761377

13771378
// Check that all payments are there as we added them.
1378-
assertPayments(t, db, payments)
1379+
assertPayments(t, paymentDB, payments)
13791380

13801381
// Delete HTLC attempts for failed payments only.
1381-
numPayments, err := db.DeletePayments(true, true)
1382+
numPayments, err := paymentDB.DeletePayments(true, true)
13821383
require.NoError(t, err)
13831384
require.EqualValues(t, 0, numPayments)
13841385

13851386
// The failed payment is the only altered one.
13861387
payments[0].htlcs = 0
1387-
assertPayments(t, db, payments)
1388+
assertPayments(t, paymentDB, payments)
13881389

13891390
// Delete failed attempts for all payments.
1390-
numPayments, err = db.DeletePayments(false, true)
1391+
numPayments, err = paymentDB.DeletePayments(false, true)
13911392
require.NoError(t, err)
13921393
require.EqualValues(t, 0, numPayments)
13931394

13941395
// The failed attempts should be deleted, except for the in-flight
13951396
// payment, that shouldn't be altered until it has completed.
13961397
payments[1].htlcs = 1
1397-
assertPayments(t, db, payments)
1398+
assertPayments(t, paymentDB, payments)
13981399

13991400
// Now delete all failed payments.
1400-
numPayments, err = db.DeletePayments(true, false)
1401+
numPayments, err = paymentDB.DeletePayments(true, false)
14011402
require.NoError(t, err)
14021403
require.EqualValues(t, 1, numPayments)
14031404

1404-
assertPayments(t, db, payments[1:])
1405+
assertPayments(t, paymentDB, payments[1:])
14051406

14061407
// Finally delete all completed payments.
1407-
numPayments, err = db.DeletePayments(false, false)
1408+
numPayments, err = paymentDB.DeletePayments(false, false)
14081409
require.NoError(t, err)
14091410
require.EqualValues(t, 1, numPayments)
14101411

1411-
assertPayments(t, db, payments[2:])
1412+
assertPayments(t, paymentDB, payments[2:])
14121413
}
14131414

14141415
// TestKVPaymentsDBDeleteSinglePayment tests that DeletePayment correctly
@@ -1447,55 +1448,55 @@ func TestKVPaymentsDBDeleteSinglePayment(t *testing.T) {
14471448
createTestPayments(t, paymentDB, payments)
14481449

14491450
// Check that all payments are there as we added them.
1450-
assertPayments(t, db, payments)
1451+
assertPayments(t, paymentDB, payments)
14511452

14521453
// Delete HTLC attempts for first payment only.
1453-
require.NoError(t, db.DeletePayment(payments[0].id, true))
1454+
require.NoError(t, paymentDB.DeletePayment(payments[0].id, true))
14541455

14551456
// The first payment is the only altered one as its failed HTLC should
14561457
// have been removed but is still present as payment.
14571458
payments[0].htlcs = 0
1458-
assertPayments(t, db, payments)
1459+
assertPayments(t, paymentDB, payments)
14591460

14601461
// Delete the first payment completely.
1461-
require.NoError(t, db.DeletePayment(payments[0].id, false))
1462+
require.NoError(t, paymentDB.DeletePayment(payments[0].id, false))
14621463

14631464
// The first payment should have been deleted.
1464-
assertPayments(t, db, payments[1:])
1465+
assertPayments(t, paymentDB, payments[1:])
14651466

14661467
// Now delete the second payment completely.
1467-
require.NoError(t, db.DeletePayment(payments[1].id, false))
1468+
require.NoError(t, paymentDB.DeletePayment(payments[1].id, false))
14681469

14691470
// The Second payment should have been deleted.
1470-
assertPayments(t, db, payments[2:])
1471+
assertPayments(t, paymentDB, payments[2:])
14711472

14721473
// Delete failed HTLC attempts for the third payment.
1473-
require.NoError(t, db.DeletePayment(payments[2].id, true))
1474+
require.NoError(t, paymentDB.DeletePayment(payments[2].id, true))
14741475

14751476
// Only the successful HTLC attempt should be left for the third
14761477
// payment.
14771478
payments[2].htlcs = 1
1478-
assertPayments(t, db, payments[2:])
1479+
assertPayments(t, paymentDB, payments[2:])
14791480

14801481
// Now delete the third payment completely.
1481-
require.NoError(t, db.DeletePayment(payments[2].id, false))
1482+
require.NoError(t, paymentDB.DeletePayment(payments[2].id, false))
14821483

14831484
// Only the last payment should be left.
1484-
assertPayments(t, db, payments[3:])
1485+
assertPayments(t, paymentDB, payments[3:])
14851486

14861487
// Deleting HTLC attempts from InFlight payments should not work and an
14871488
// error returned.
1488-
require.Error(t, db.DeletePayment(payments[3].id, true))
1489+
require.Error(t, paymentDB.DeletePayment(payments[3].id, true))
14891490

14901491
// The payment is InFlight and therefore should not have been altered.
1491-
assertPayments(t, db, payments[3:])
1492+
assertPayments(t, paymentDB, payments[3:])
14921493

14931494
// Finally deleting the InFlight payment should also not work and an
14941495
// error returned.
1495-
require.Error(t, db.DeletePayment(payments[3].id, false))
1496+
require.Error(t, paymentDB.DeletePayment(payments[3].id, false))
14961497

14971498
// The payment is InFlight and therefore should not have been altered.
1498-
assertPayments(t, db, payments[3:])
1499+
assertPayments(t, paymentDB, payments[3:])
14991500
}
15001501

15011502
// TestKVPaymentsDBMultiShard checks the ability of payment control to
@@ -1921,7 +1922,7 @@ func testDeleteFailedAttempts(t *testing.T, keepFailedPaymentAttempts bool) {
19211922
createTestPayments(t, paymentDB, payments)
19221923

19231924
// Check that all payments are there as we added them.
1924-
assertPayments(t, db, payments)
1925+
assertPayments(t, paymentDB, payments)
19251926

19261927
// Calling DeleteFailedAttempts on a failed payment should delete all
19271928
// HTLCs.
@@ -1931,7 +1932,7 @@ func testDeleteFailedAttempts(t *testing.T, keepFailedPaymentAttempts bool) {
19311932
if !keepFailedPaymentAttempts {
19321933
payments[0].htlcs = 0
19331934
}
1934-
assertPayments(t, db, payments)
1935+
assertPayments(t, paymentDB, payments)
19351936

19361937
// Calling DeleteFailedAttempts on an in-flight payment should return
19371938
// an error.
@@ -1945,7 +1946,7 @@ func testDeleteFailedAttempts(t *testing.T, keepFailedPaymentAttempts bool) {
19451946

19461947
// Since DeleteFailedAttempts returned an error, we should expect the
19471948
// payment to be unchanged.
1948-
assertPayments(t, db, payments)
1949+
assertPayments(t, paymentDB, payments)
19491950

19501951
// Cleaning up a successful payment should remove failed htlcs.
19511952
require.NoError(t, paymentDB.DeleteFailedAttempts(payments[2].id))
@@ -1954,7 +1955,7 @@ func testDeleteFailedAttempts(t *testing.T, keepFailedPaymentAttempts bool) {
19541955
if !keepFailedPaymentAttempts {
19551956
payments[2].htlcs = 1
19561957
}
1957-
assertPayments(t, db, payments)
1958+
assertPayments(t, paymentDB, payments)
19581959

19591960
if keepFailedPaymentAttempts {
19601961
// DeleteFailedAttempts is ignored, even for non-existent
@@ -2216,10 +2217,12 @@ func createTestPayments(t *testing.T, p *KVPaymentsDB, payments []*payment) {
22162217
// indices for the slice asserts that exactly the same payments in the
22172218
// slice for the provided indices exist when fetching payments from the
22182219
// database.
2219-
func assertPayments(t *testing.T, db *DB, payments []*payment) {
2220+
func assertPayments(t *testing.T, paymentDB *KVPaymentsDB,
2221+
payments []*payment) {
2222+
22202223
t.Helper()
22212224

2222-
dbPayments, err := db.FetchPayments()
2225+
dbPayments, err := paymentDB.FetchPayments()
22232226
require.NoError(t, err, "could not fetch payments from db")
22242227

22252228
// Make sure that the number of fetched payments is the same

rpcserver.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7403,7 +7403,7 @@ func (r *rpcServer) ListPayments(ctx context.Context,
74037403
query.MaxPayments = math.MaxUint64
74047404
}
74057405

7406-
paymentsQuerySlice, err := r.server.miscDB.QueryPayments(query)
7406+
paymentsQuerySlice, err := r.server.kvPaymentsDB.QueryPayments(query)
74077407
if err != nil {
74087408
return nil, err
74097409
}
@@ -7445,7 +7445,7 @@ func (r *rpcServer) DeletePayment(ctx context.Context,
74457445
rpcsLog.Infof("[DeletePayment] payment_identifier=%v, "+
74467446
"failed_htlcs_only=%v", hash, req.FailedHtlcsOnly)
74477447

7448-
err = r.server.miscDB.DeletePayment(hash, req.FailedHtlcsOnly)
7448+
err = r.server.kvPaymentsDB.DeletePayment(hash, req.FailedHtlcsOnly)
74497449
if err != nil {
74507450
return nil, err
74517451
}
@@ -7485,7 +7485,7 @@ func (r *rpcServer) DeleteAllPayments(ctx context.Context,
74857485
"failed_htlcs_only=%v", req.FailedPaymentsOnly,
74867486
req.FailedHtlcsOnly)
74877487

7488-
numDeletedPayments, err := r.server.miscDB.DeletePayments(
7488+
numDeletedPayments, err := r.server.kvPaymentsDB.DeletePayments(
74897489
req.FailedPaymentsOnly, req.FailedHtlcsOnly,
74907490
)
74917491
if err != nil {

0 commit comments

Comments
 (0)