htlcswitch: pipeline settles to switch
This commit makes the outgoing link pipeline the settle to the switch as soon as it receives it. Previously, it would wait for a revocation before sending it, which caused increased latency on payments as well as possibly never settling on the incoming link. A duplicate settle is still sent to the switch, but it is handled gracefully. A new AckEventTicker was added to the switch which acknowledges any pending settle / fail entries in an outgoing link's fwd pkgs in batch. This was needed in order to reduce the number of db txn's which would have been incurred by acking whenever we receive a duplicate settle without batching.
This commit is contained in:
1 parent
377b7bf3ce
commit
00814dc7c1
7 files changed
+105
-34
No files matched your search
+12
-6
@@ -232,10 +232,10 @@ func TestChannelLinkSingleHopPayment(t *testing.T) {
|
||||
t.Fatalf("unable to make the payment: %v", err)
|
||||
}
|
||||
|
||||
// Wait for Bob to receive the revocation.
|
||||
// Wait for Alice to receive the revocation.
|
||||
//
|
||||
// TODO(roasbeef); replace with select over returned err chan
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
// Check that alice invoice was settled and bandwidth of HTLC
|
||||
// links was changed.
|
||||
@@ -494,8 +494,8 @@ func testChannelLinkMultiHopPayment(t *testing.T,
|
||||
t.Fatalf("unable to send payment: %v", err)
|
||||
}
|
||||
|
||||
// Wait for Bob to receive the revocation.
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
// Wait for Alice and Bob's second link to receive the revocation.
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
// Check that Carol invoice was settled and bandwidth of HTLC
|
||||
// links were changed.
|
||||
@@ -3977,7 +3977,8 @@ func TestChannelLinkAcceptOverpay(t *testing.T) {
|
||||
t.Fatalf("unable to send payment: %v", err)
|
||||
}
|
||||
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
// Wait for Alice and Bob's second link to receive the revocation.
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
// Even though we sent 2x what was asked for, Carol should still have
|
||||
// accepted the payment and marked it as settled.
|
||||
@@ -5801,7 +5802,12 @@ func TestChannelLinkHoldInvoiceSettle(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Wait for Bob to receive the revocation.
|
||||
// Wait for Alice to receive the revocation. This is needed
|
||||
// because the settles are pipelined to the switch and otherwise
|
||||
// the bandwidth won't be updated by the time Alice receives a
|
||||
// response here.
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
if ctx.startBandwidthAlice-ctx.amount !=
|
||||
ctx.n.aliceChannelLink.Bandwidth() {
|
||||
|
||||
|
||||
Reference in new issue
Block a user