multi: make GetPaymentResult take payment hash

Used for logging in the switch, and when we remove the pending payments,
only the router will have the hash stored across restarts.
This commit is contained in:
Johan T. Halseth 2019-06-07 16:42:25 +02:00
parent 1febe1a6d5
commit 2dea790b55
No known key found for this signature in database
GPG Key ID: 15BAADA29DA20D26
7 changed files with 15 additions and 13 deletions

@ -1118,7 +1118,7 @@ func TestChannelLinkMultiHopUnknownPaymentHash(t *testing.T) {
} }
resultChan, err := n.aliceServer.htlcSwitch.GetPaymentResult( resultChan, err := n.aliceServer.htlcSwitch.GetPaymentResult(
pid, newMockDeobfuscator(), pid, htlc.PaymentHash, newMockDeobfuscator(),
) )
if err != nil { if err != nil {
t.Fatalf("unable to get payment result: %v", err) t.Fatalf("unable to get payment result: %v", err)
@ -3898,7 +3898,7 @@ func TestChannelLinkAcceptDuplicatePayment(t *testing.T) {
} }
resultChan, err := n.aliceServer.htlcSwitch.GetPaymentResult( resultChan, err := n.aliceServer.htlcSwitch.GetPaymentResult(
pid, newMockDeobfuscator(), pid, htlc.PaymentHash, newMockDeobfuscator(),
) )
if err != nil { if err != nil {
t.Fatalf("unable to get payment result: %v", err) t.Fatalf("unable to get payment result: %v", err)

@ -342,7 +342,7 @@ func (s *Switch) ProcessContractResolution(msg contractcourt.ResolutionMsg) erro
// result is received on the channel, the HTLC is guaranteed to no longer be in // result is received on the channel, the HTLC is guaranteed to no longer be in
// flight. The switch shutting down is signaled by closing the channel. If the // flight. The switch shutting down is signaled by closing the channel. If the
// paymentID is unknown, ErrPaymentIDNotFound will be returned. // paymentID is unknown, ErrPaymentIDNotFound will be returned.
func (s *Switch) GetPaymentResult(paymentID uint64, func (s *Switch) GetPaymentResult(paymentID uint64, paymentHash lntypes.Hash,
deobfuscator ErrorDecrypter) (<-chan *PaymentResult, error) { deobfuscator ErrorDecrypter) (<-chan *PaymentResult, error) {
s.pendingMutex.Lock() s.pendingMutex.Lock()
@ -375,7 +375,7 @@ func (s *Switch) GetPaymentResult(paymentID uint64,
// Extract the result and pass it to the result channel. // Extract the result and pass it to the result channel.
result, err := s.extractResult( result, err := s.extractResult(
deobfuscator, n, paymentID, payment.paymentHash, deobfuscator, n, paymentID, paymentHash,
) )
if err != nil { if err != nil {
e := fmt.Errorf("Unable to extract result: %v", err) e := fmt.Errorf("Unable to extract result: %v", err)

@ -1743,7 +1743,7 @@ func TestSwitchSendPayment(t *testing.T) {
// First check that the switch will correctly respond that this payment // First check that the switch will correctly respond that this payment
// ID is unknown. // ID is unknown.
_, err = s.GetPaymentResult( _, err = s.GetPaymentResult(
paymentID, newMockDeobfuscator(), paymentID, rhash, newMockDeobfuscator(),
) )
if err != ErrPaymentIDNotFound { if err != ErrPaymentIDNotFound {
t.Fatalf("expected ErrPaymentIDNotFound, got %v", err) t.Fatalf("expected ErrPaymentIDNotFound, got %v", err)
@ -1761,7 +1761,7 @@ func TestSwitchSendPayment(t *testing.T) {
} }
resultChan, err := s.GetPaymentResult( resultChan, err := s.GetPaymentResult(
paymentID, newMockDeobfuscator(), paymentID, rhash, newMockDeobfuscator(),
) )
if err != nil { if err != nil {
errChan <- err errChan <- err

@ -801,7 +801,7 @@ func preparePayment(sendingPeer, receivingPeer lnpeer.Peer,
return err return err
} }
resultChan, err := sender.htlcSwitch.GetPaymentResult( resultChan, err := sender.htlcSwitch.GetPaymentResult(
pid, newMockDeobfuscator(), pid, hash, newMockDeobfuscator(),
) )
if err != nil { if err != nil {
return err return err
@ -1289,7 +1289,7 @@ func (n *twoHopNetwork) makeHoldPayment(sendingPeer, receivingPeer lnpeer.Peer,
} }
resultChan, err := sender.htlcSwitch.GetPaymentResult( resultChan, err := sender.htlcSwitch.GetPaymentResult(
pid, newMockDeobfuscator(), pid, rhash, newMockDeobfuscator(),
) )
if err != nil { if err != nil {
paymentErr <- err paymentErr <- err

@ -52,7 +52,8 @@ func (m *mockPaymentAttemptDispatcher) SendHTLC(firstHop lnwire.ShortChannelID,
} }
func (m *mockPaymentAttemptDispatcher) GetPaymentResult(paymentID uint64, func (m *mockPaymentAttemptDispatcher) GetPaymentResult(paymentID uint64,
_ htlcswitch.ErrorDecrypter) (<-chan *htlcswitch.PaymentResult, error) { _ lntypes.Hash, _ htlcswitch.ErrorDecrypter) (
<-chan *htlcswitch.PaymentResult, error) {
c := make(chan *htlcswitch.PaymentResult, 1) c := make(chan *htlcswitch.PaymentResult, 1)
res, ok := m.results[paymentID] res, ok := m.results[paymentID]
@ -139,8 +140,8 @@ func (m *mockPayer) SendHTLC(_ lnwire.ShortChannelID,
} }
func (m *mockPayer) GetPaymentResult(paymentID uint64, _ htlcswitch.ErrorDecrypter) ( func (m *mockPayer) GetPaymentResult(paymentID uint64, _ lntypes.Hash,
<-chan *htlcswitch.PaymentResult, error) { _ htlcswitch.ErrorDecrypter) (<-chan *htlcswitch.PaymentResult, error) {
select { select {
case res := <-m.paymentResult: case res := <-m.paymentResult:

@ -95,7 +95,7 @@ func (p *paymentLifecycle) resumePayment() ([32]byte, *route.Route, error) {
// Now ask the switch to return the result of the payment when // Now ask the switch to return the result of the payment when
// available. // available.
resultChan, err := p.router.cfg.Payer.GetPaymentResult( resultChan, err := p.router.cfg.Payer.GetPaymentResult(
p.attempt.PaymentID, errorDecryptor, p.attempt.PaymentID, p.payment.PaymentHash, errorDecryptor,
) )
switch { switch {

@ -138,7 +138,8 @@ type PaymentAttemptDispatcher interface {
// HTLC is guaranteed to no longer be in flight. The switch shutting // HTLC is guaranteed to no longer be in flight. The switch shutting
// down is signaled by closing the channel. If the paymentID is // down is signaled by closing the channel. If the paymentID is
// unknown, ErrPaymentIDNotFound will be returned. // unknown, ErrPaymentIDNotFound will be returned.
GetPaymentResult(paymentID uint64, deobfuscator htlcswitch.ErrorDecrypter) ( GetPaymentResult(paymentID uint64, paymentHash lntypes.Hash,
deobfuscator htlcswitch.ErrorDecrypter) (
<-chan *htlcswitch.PaymentResult, error) <-chan *htlcswitch.PaymentResult, error)
} }