Commit Graph

4086 Commits

Author SHA1 Message Date
d6628574ca lnd: remove sid arg to UpdateShortChanID 2018-05-09 16:07:52 -07:00
57551fbd74 htlcswitch/mailbox_test: add orchestrator pending/live test 2018-05-09 16:07:52 -07:00
418983cadc htlcswitch/switch_test: test send pending channel 2018-05-09 16:07:51 -07:00
c290398b4b htlcswitch/mailbox: adds mailOrchestrator 2018-05-09 16:07:51 -07:00
d3403306b6 htlcswitch/switch: segment pending links from live links 2018-05-09 16:07:51 -07:00
1dace1fed4 htlcswitch/mock: impl UpdateShortChanID w/ error 2018-05-09 16:07:25 -07:00
3e46a5e815 htlcswitch/link: fix UpdateShortChanID 2018-05-09 16:07:25 -07:00
b5591cd66c htlcswitch/interfaces: return err from UpdateShortChanID 2018-05-09 16:06:49 -07:00
f963f91a3c multi: use mutex-guarded ShortChanID() on OpenChannel 2018-05-09 16:06:49 -07:00
19b5eaa4dc channeldb/channel_test: adds RefreshShortChanID test 2018-05-09 16:06:49 -07:00
7ad56943c7 channeldb/channel: adds RefreshShortChanID 2018-05-09 16:06:49 -07:00
355355b81e Merge pull request #1180 from halseth/empty-commitsig-fix
Empty commitsig fix
2018-05-09 16:02:49 -07:00
0d435eff68 lnd_test: print predErr instead of generic waitPredicate error 2018-05-09 10:28:00 +02:00
03d2aa360f lnd_test: fix flake from routing hints for inactive channel
This commit attempts to fix a flake we have seen, where a routing hints
for an inactive channel was unexpectedly added to the invoice. This
happened because of a race between shutting down the endpoint of this
channel (Eve) and creating the invoice. This commit fixes this by moving
the call to AddInvoice with corresponding route hint check inside a
WaitPredicate.
2018-05-09 10:25:08 +02:00
854e2a0581 link test: add TestChannelLinkWaitForRevocation
This commit adds a test where we trigger a situation which would
previously make the link think it was never in sync, and potentially
create a lot of empty state updates. This would happen if we were
waiting for a revocation, while still receiving updates from the remote.
Since in this case we could not ACK the updates because of the exhausted
revocation window, our local commitchain would extend, while the remote
chain would stall. When we finally got the revocation the local
commitment height would be far larger than the remote, and FullySynced
would return false from that point on.
2018-05-09 08:47:21 +02:00
db254c1258 link test: add TestChannelLinkNoMoreUpdates
This commit adds a new test that makes sure we don't try to send
commitments for states where there are now new updates. Before the
recent change to FullySynced we would do this in this test scenario, as
the local an remote commitment heights would differ.

The test makes the local commitment chain extend by 1 vs the remote,
which would earlier trigger another state update, and checks taht no
such state update is made.
2018-05-09 08:47:21 +02:00
71228a6b06 lnwallet/channel: don't use commit height to determine FullySynced
This commit removes a faulty check we did to determine if the channel
commitments were fully synced. We assumed that if out local commitment
chain had a height higher than the remote, then we would have state
updates present in our chain but not in theirs, and owed a commitment.
However, there were cases where this wasn't true, and we would send a
new commitment even though we had no new updates to sign. This is a
protocol violation.

Now we don't longer check the heights to determine if we are fully
synced. A consequence of this is that we also need to check if we have
any pending fee updates that are nopt yet signed, as those are
considered non-empty updates.
2018-05-09 08:47:21 +02:00
1b1f5f197a routing/chainview/neutrino: cache filter entries
This commit alters the neutrino chainview such that it
caches the filter entries corresponding to watched
outpoints at the moment they are added to the filter.
Previously, we would rederive each filter entry when
reconstructing the relevant filter entries, which
would lead to unnecessary work on the gc. Now, each is
created at most once, and reused across subsequent
reconstructions.
2018-05-08 20:46:46 -07:00
ddcbb40898 Merge pull request #1206 from wpaulino/temp-chan-failure-update
htlcswitch+server: ensure we always send an update w/ a TempChannelFailure
2018-05-08 19:33:20 -07:00
01a9b6b7da Merge pull request #1202 from cfromknecht/link-sync-circuit-commit
htlcswitch/link: ensure circuits are committed in-order
2018-05-08 18:53:05 -07:00
b437553b5a Merge pull request #1198 from cfromknecht/validation-barrier-quit
router: Validation Barrier Shutdown
2018-05-08 17:28:35 -07:00
eb5eb4a58b Merge pull request #1179 from halseth/channel-entry-crash
Improve logging for missing HTLC entry crash
2018-05-08 17:21:40 -07:00
de9de771bb htlcswitch/link: ensure circuits are committed in-order
This commit makes the call to forwardBatch after locking
in Adds synchronous. This ensures that circuits for any Add
packets are added to the switch in the same order that they
are prescribed in the channel state. Though it is very unlikely
this case would arise, it may happen under more greater loads.

In addition, this also makes some trivial optimizations wrt. to
not spawning unnecessary goroutines if no settle/fail packets
are locked in.
2018-05-08 16:37:35 -07:00
a2f7170ff0 peer: make Disconnect async, block on WaitForDisconnect 2018-05-08 16:37:14 -07:00
8c04dd0030 server: add peer connection callback scheduling
This commit adds a simple scheduling mechanism for
resolving potential deadlocks when dropping a stale
connection (via pubkey inspection).

Ideally, we'd like to wait to activate a new peer until
the previous one has exited entirely. However, the current
logic attempts to disconnect (and wait) until the peer
has been cleaned up fully, which can result in
deadlocks with other portions of the codebase, since
other blocking methods may also need acquire the mutex
before the peer can exit.

When existing connections are replaced, they now
schedule a callback that is executed inside the
peerTerminationWatcher. Since the peer now waits for
the clean exit of the prior peer, this callback is
now executed with a clean slate, adds the peer to
the server's maps, and initiates peer's Start() method.
2018-05-08 16:37:14 -07:00
d20adc8e0e server: use nil errChan for broadcasts
This skips creating errChans when sending messages to
peer during broadcast. This should be a minor memory
optimization, as well as not requiring channel sends
on those which will never be read.
2018-05-08 16:35:49 -07:00
0691b21a30 peer: improves disconnect handling
This commit attempts to resolve some potential deadlock
scenarios during a peer disconnect.

Currently, writeMessage returns a nil error when disconnecting.
This should have minimal impact on the writeHanlder, as the
subsequent loop selects on the quit chan, and will cause it to
exit. However, if this happens when sending the init message,
the Start() method will attempt to proceed even though the peer
has been disconnected.

In addition, this commit changes the behavior of synchronous
write errors, by using a non-blocking select. Though unlikely,
this prevents any cases where multiple errors are returned, and
the errors are not being pulled from the other side of the errChan.
This removes any naked sends on the errChan from stalling the peer's
shutdown.
2018-05-08 16:35:49 -07:00
99e7ec0895 routing/validation_barrier_test: test semaphore and quit
Adds test checking the basic functionality of the barrier's
semaphore and behavior during shutdown.
2018-05-08 16:32:08 -07:00
995e3fa85f routing/validation_barrier: adds ErrVBarrierShuttingDown
Adds a new error ErrVBarrierShuttingDown that is returned
from WaitForDependants if the validation barrier's quit
chan is closed. This allows any blocked goroutines to
distinguish whether the dependent task has been completed,
or if validation should be aborted entirely.
2018-05-08 16:32:08 -07:00
eaa8cdf916 routing/router: improve validation barrier shutdown
This commit improves the shutdown of the router's
pending validation tasks, by ensuring the pending
tasks exit early if the validation barrier
receives a shutdown request.

Currently, any goroutines blocked by WaitForDependants
will continue execution after a shutdown is signaled.
This may lead to unnexpected behavior as the relation
between updates is no longer upheld. It also has the
side effect of slowing down shutdown, since we
continue to process the remaining updates.

To remedy this, WaitForDependants now returns an error
that signals if a shutdown was requested. The blocked
goroutines can exit early upon seeing this error,
without also signaling completion of their task to
the dependent tasks, which should will now properly
wait to read the validation barrier's quit signal.
2018-05-08 16:32:08 -07:00
3854c1ed68 discovery/gossiper: exit early on validation barrier quit 2018-05-08 16:32:08 -07:00
72f48b6abe htlcswitch+server: ensure we always send an update w/ a TempChannelFailure
In this commit, we ensure that any time we send a TempChannelFailure
that's destined for a multi-hop source sender, then we'll always package
the latest channel update along with it.
2018-05-08 13:00:28 -04:00
f26ec38a74 channeldb: return ErrNoPendingCommit in case of no channel bucket 2018-05-08 13:41:52 +02:00
9324bf7b1d lnwallet/channel: return error in case of htlc index mismatch
This commit make us return an error in case a restored HTLC from a
pending remote commit has an index that is different from our local
update log index. It is appended with the assumption that these indexes
are the same, and if they are not we cannot really continue.
2018-05-08 13:41:52 +02:00
7e1f2a7dc3 lnwallet/channel: remove unused arguments 2018-05-08 13:41:52 +02:00
aa1c2cdf81 lnwallet/channel: add more info in case of crash
This commit adds a call to panic in case the HTLC we are looking for is
not found in the update log. It _should_ always be there, but we have
seen crashes resulting from it not being found. Since it will crash with
a nil pointer dereference below, we instead call panic giving us a bit
more information to work with.
2018-05-08 13:41:52 +02:00
1d676b77e1 lnwallet/channel: log pending remote commit during restore 2018-05-08 13:41:51 +02:00
1d172428c4 lnwallet/channel: return missing errors
This commit corrects a few cases where we would encounter errors, but
return nil by mistake.
2018-05-08 13:41:51 +02:00
27ca61aedf Merge pull request #1196 from guggero/contribution-guideline
docs: add line wrap to contribution checklist
2018-05-07 21:37:44 -07:00
4a639fab14 Merge pull request #1193 from guggero/lncli-double-unlock
lncli: improve error message for unlock commands
2018-05-07 21:37:11 -07:00
d2a6c4eec9 htlcswitch: typo fix 2018-05-07 21:33:32 -07:00
a126c91745 docs/INSTALL: add advice for using 127.0.0.1 for bitcoind backend on Windows (#1195)
Using localhost to connect lnd to bitcoind on Windows is very slow.  Use 127.0.0.1 instead.
2018-05-07 21:29:20 -07:00
45ccace41c docs: add line wrap to contribution checklist 2018-05-07 19:21:03 +03:00
8ce73b3f74 lncli: improve error message for unlock commands 2018-05-07 18:44:03 +03:00
bdf3f4d775 Merge pull request #1158 from Roasbeef/play-all-commits
contractcourt+lnwallet: ensure the chainWatcher properly plays all remote commitments
2018-05-04 12:22:02 -07:00
7af699f3a7 contractcourt: update chain watcher tests to latest API 2018-05-03 21:29:30 -07:00
a3227ba147 contractcourt: add two new tests to ensure the chainWatcher is able to play all remote commitments 2018-05-03 21:29:29 -07:00
c8b15719f2 contractcourt: ensure the chainWatcher is able to play all remote commitments 2018-05-03 21:29:29 -07:00
88ff2af931 lnwallet: add new test to exercise creation of unilateral close summaries for pending broadcast commitments 2018-05-03 21:29:29 -07:00
8b06817482 lnwallet: modify NewUnilateralCloseSummary to be aware of pending remote commits
In this commit, we modify the NewUnilateralCloseSummary to be able to
distinguish between a unilateral closure using the lowest+highest
commitment the remote party possesses. Before this commit, if the remote
party broadcast their highest commitment, when they have a lower
unrevoked commitment, then this function would fail to find the proper
output, leaving funds on the chain.

To fix this, it's now the duty of the caller to pass remotePendingCommit
with the proper value. The caller should use the lowest unrevoked
commitment, and the height hint of the broadcast commitment to discern
if this is a pending commitment or not.
2018-05-03 21:29:28 -07:00