Commit graph

362 commits

Author SHA1 Message Date
Chris Stewart
536cc26ba5
Update last seen value in PeerDb on disconnect (#5397) 2024-02-13 16:38:18 -06:00
Chris Stewart
05d03e7da6
Remove skipPeers, better PeerFinder.toString() (#5396) 2024-02-13 09:01:50 -06:00
Chris Stewart
2d3e481ce0
Use Future.successful() when removing peer as there is no underlying async computation (#5394) 2024-02-11 11:28:25 -06:00
Chris Stewart
9d58c9eb89
Implement health checks for peers, first check is if we have any blockfilter peers (#5393)
* Implement health checks for peers, first check is if we have any blockfilter peers

* Actually send HealthCheck message to stream
2024-02-11 10:37:57 -06:00
Chris Stewart
d4ae659887
Log instead of throwing exception when sending message to peer without an active connection (#5392) 2024-02-11 09:08:05 -06:00
Chris Stewart
cac546bb57
Fix bug where we were only setting bitcoin-s.node.inactivity-timeout on regtest (#5389)
* Fix bug where we were only setting bitcoin-s.node.inactivity-timeout on regtest

* Remove log, scalafmt
2024-02-08 21:36:15 -06:00
Chris Stewart
451e019225
2024 01 31 Fix PeerManager.connect() bug where PeerFinder was unaware of peer (#5381)
* Fix bug in PeerManager.connect() where we would throw ane xception when our PeerFinder had not seen the peer before

* Remove ReConnectionTest case where we constantly try to reconenct o a peer we disconnected, revert logback-test.xml
2024-01-31 11:10:48 -06:00
Chris Stewart
75881191d1
Guard NeutrinoNode.start() with isStarted flag (#5380) 2024-01-31 09:48:44 -06:00
Chris Stewart
75f6a3b4ec
Refactor PeerFinder.peerConnectionScheduler() into method (#5377) 2024-01-30 14:35:17 -06:00
Chris Stewart
76e468c5c4
2024 01 28 Refactor PeerFinder.start() to avoid initializing connections (#5376)
* Conslidate PeerFinder.start() logic into peerConnectionScheduler, add bitcoins-s.node.try-peers-start-delay config settig to indicate how long until we start attempting to connect to peers in PeerFinder

* Cleanup

* Revert logback-test.xml

* Add documentation

* Empty commit to run CI

* Rework NodeAppConfig.peers to return Vector[Peer] rather than Vector[String]

* Add higher priority to paramPeers
2024-01-29 09:46:31 -06:00
Chris Stewart
9cd60d5366
2024 01 02 encapsulate state p2psink (#5342)
* Move NodeState back to node module

* Refactor peerWithServicesDataMap into NodeState

* More usage of state.peerDataMap in stream

* Fix log message

* Fix compile

* Move PeerFinder into NodeState

* WIP: Move PeerFinder init into NeutrinoNode.start()

* Get things mostly working again after rebase

* Fix bug in handling of headers message where we wouldn't transition to DoneSyncing if a peer sent us 0 headers

* Move SendToPeer into stream

* scalafmt

* Empty commit to run CI

* Re-add DataMessageHandlerTest

* Renable disconnecting portion of NeutrinoNodeTest

* Empty commit to run CI

* Remove disconnection part of test again

* Empty commit to re-run CI

* Empty commit to re-run CI
2024-01-13 17:22:01 -06:00
Chris Stewart
56b1a557a8
Add carve out to ignore ConnectPeer request if state is NodeShuttingDown (#5352) 2024-01-13 14:40:12 -06:00
Chris Stewart
3c5bace825
Dont initiate disconnect logic from bitcoind, its flakey for some reason (#5343)
* Dont initiate disconnect logic from bitcoind, its falky for some reason

* Fix bug where we weren't switching sync to another peer on disconnect for the case where we were waiting for disconnection

* Empty commit to run CI

* Empty commit to run CI
2024-01-05 11:52:39 -06:00
Chris Stewart
d6c1491ba8
2024 01 03 shuttingdown nodestate (#5341)
* Add NodeShuttingDown

* Add NodeShutdown to NodeStreamMessage, use it in PeerManager.stop()

* Add guard to NeutrinoNode.stop() to see if stop() was called when the isStarted flag is set, if we aren't started don't attempt to destroy the akka stream
2024-01-04 14:05:31 -06:00
Chris Stewart
30876c2cde
Move PeerManager.connectPeer() logic into stream (#5340)
* Move PeerManager.connectPeer() logic into stream

* Fix comment
2024-01-03 10:27:35 -06:00
Chris Stewart
d27dcb38f4
Add logging to PeerConnection.handleStreamComplete so exceptions aren't dropping on the floor (#5339) 2024-01-02 13:14:21 -06:00
Chris Stewart
b39736fb8d
Rework NodeTestUtil to use a specific bestBlockHash (#5332)
* Rework NodeTestUtil to use a specific bestBlockHash, this is useful in reorg situations

Use param in reorg test, modify scaladoc

WIP

* Cleanup

* Try to fix usage of stopHashBE

* Cleanup

* WIP: Fix getCompactFilterStartHeight()

* Revert logback-test.xml

* Fix bug with isFiltersSynced() in reorg situations

* scalafmt, fix compile

* Fix another bug with isFiltersSynced()

* Fix compile
2023-12-31 17:38:12 -06:00
Chris Stewart
5e81ec5ed2
Add ChainApi.getBestChainTips() (#5338)
* Add ChainApi.getBestChainTips()

* Implement BitcoindRpcClient.getBestChainTips()

* Revert NodeTestUtil

* Use ChainApi.getBestChainTips() throughout codebase rather than blockHeaderDAO.getBestChainTips()
2023-12-31 16:54:40 -06:00
Chris Stewart
a3e1267484
2023 12 30 isfiltersync bug (#5337)
* Fix another bug with isFiltersSynced()

* Fix compile

* Cleanup uncessary checks

* Empty commit to re-run CI

* Empty commit to re-run CI

* Empty commit to re-run CI
2023-12-31 14:06:21 -06:00
Chris Stewart
06dfd9cea4
Rework randomPeerWithServices() to be inside of NodeState (#5331)
* Rework randomPeerWithServices() to be inside of NodeState, try to move more state into NodeState

* Don't try to sync from peer waitingForDisconnection

* Add PeerWithServices, keep track of ServiceIdentifier in PeerManager and NodeState

* Try to make reorg test more reliable

* Empty commit to run CI
2023-12-29 14:47:29 -06:00
Chris Stewart
d983a1bac4
2023 12 24 Make filter headers / filters sync work with block header reorgs (#5333)
* Rework ChainApi.nextBlockHeaderBatchRange() to take stopHash parameter, get chainTest/test passing

* WIP: Refactor ChainApi.nextFilterHeaderBatchRange()

* Finish ChainApi.nextFilterHeaderBatchRange() refactor, get all tests passing except reorg related tests in nodeTest

* Get NeutrinoNodeTest reorg test case working

* Improve flaky test

* Cleanup

* Switch sync check to bitcoinds(1)

* Empty commit to run CI

* Implement batchSize tests in ChainHandlerTest

* Rework ChainHandlerTest to not assume we have the genesis filter header / filter inserted into the database already

* Cleanup println

* Fix bug with nextFilterHeaderBatchRange() wrt to startHeightOpt parameter

* Fix off by one bug with compact filter sync

* Add check for connectionCount

* Add longer timeout

* scalafmt
2023-12-28 10:43:01 -06:00
Chris Stewart
0ace6dfd2e
Make PeerManager.gossipMessage() queue to avoid gossiping messages to peers being disconnected (#5334)
* Make GossipMessage use PeerManager queue to avoid gossiping messages to peers that are being disconnected

* Remove isIBD check for gossiping getheaders after filter sync is complete

* Add log warning when NodeState has a peer, but peerDataMap doesn't when gossiping messages
2023-12-28 10:07:45 -06:00
Chris Stewart
54f303efb0
Rework various private methods in DataMessagehandler to return NodeState (#5329)
* Rework various private methods in DataMessagehandler to return NodeState rather than DataMessageHandler

* Refactor compact filter header handling into private helper method

* Refactor handling of headersmsg in case where the headermsg came from a different peer than our current syncPeer

* Add DEBUG log
2023-12-19 09:24:09 -06:00
Chris Stewart
ce154fc5fd
Remove unecessary helper method in PeerFinder (#5327)
* Remove unecessary helper method in PeerFinder

* scalafmt

* Empty commit to re-run CI

* Empty commit to re-run CI

* Empty commit to re-run CI

* Empty commit to run CI

* Empty commit to re-run CI
2023-12-17 12:36:37 -06:00
Chris Stewart
747389e77d
Rework ConnectionGraph.stop() to return Future[Done] (#5325)
* Rework ConnectionGraph.stop() to return Future[Done] that represents the stream being completed

* Empty commit to re-run CI

* Fix bug in handleStreamComplete()

* Revert log levels

* Empty commit to run CI
2023-12-16 11:18:53 -06:00
Chris Stewart
f4db40897b
Fix bug where PeerConnection.connectionGraphOpt does not get reset on disconnect (#5307)
* Remove calls to PeerData.stop() inside of PeerManager.onDisconnect(), now call PeerConnection.disconnect() when stream is complete

* Empty commit to re-run CI

* Empty commit to re-run CI

* Empty commit to re-run CI

* Empty commit to re-run CI

* Make PeerFinder.removePeer() return Option[PeerData]
2023-12-11 16:57:06 -06:00
Chris Stewart
bd3ad1df21
2023 12 07 mat socks5handler (#5322)
* Move socks5 greeting into Socks5Connection.socks5Handler() so each individual uage doesn't have to roll its own greeting

* Implement socks5Handler() to return a materialized stream

Get something working

Cleanup

* Remove connection parameter

* Add scaladoc
2023-12-08 12:36:02 -06:00
Chris Stewart
ef20d5ec83
Rework Socks5Connection.socks5Handler() to emit Socks5ConnectionState downstream (#5315) 2023-12-02 13:02:48 -06:00
Chris Stewart
47c433f365
Replace inactivity logic with Flow.idleTimeout (#5311)
* Replace inactivity logic with Flow.idleTimeout

* Fix bug where we were calling PeerConnection.connect() rather than PeerConnection.reconnect()
2023-11-29 15:13:13 -06:00
Chris Stewart
4913b12431
2023 11 10 peermanager refactor (#5303)
* Pull queue, PeerFinder into NeutrinoNode and out of PeerManager

* Remove ControlMessageHandler param from PeerData

* Make ControlMessageHandle.handleControlPayload() take PeerMessageSenderApi as a param instead of just a Peer

* move construction of akka stream from PeerManager to NeutrinoNode

* Move inactivity checks out of PeerManager and into NeutrinoNode

* Move queue initialization into NeutrinoNode

* cleanup

* Set NeutrinoNode.isStarted to true when NeutrinoNode.start() is called

* Empty commit to re-run CI

* Modify FilterSync.toString()

* scalafmt

* Fix bug where we weren't checking if connection is timed out on activity checks

* Empty commit to run CI

* reset log level
2023-11-17 13:16:26 -06:00
Chris Stewart
7f5ed15521
Reduce inactivity level to DEBUG (#5286)
* Reduce inactivity level to DEBUG

* Empty commit to re-run CI

* Empty commit to run CI

* Empty commit to run CI

* Empty commit to re-run CI
2023-11-08 15:45:55 -06:00
Chris Stewart
7b8df425fb
Reset PeerConnection.connectionGraphOpt = None when connection is disconnected (#5290)
* Reset PeerConnection.connectionGraphOpt = None when connection is disconnected

* Move resetting connectionGraphOpt into PeerConnection.disconnect()

* Call PeerData.stop() inside of PeerManager.onDisconnect()

* Empty commit to run CI

* Empty commit to re-run CI
2023-11-08 08:00:51 -06:00
Chris Stewart
b252c2d6a2
2023 10 16 Implement WalletCallbackStreamManager, DLCWalletCallbackStreamManager (#5263)
* WIP: Implement WalletCallbackStreamManager

* Implement stopping of WalletCallbackStreamManager in WalletAppConfig

* WIP: DLCWalletCallbackStreamManager

* Refactor DLCWalletCallbacks to be a trait

* Integrate DLCWalletCallbackStreamManager into WebsocketUtil

* Use  java.util.concurrent.atomic.AtomicBoolean rather than monix

* Remove logger param from dlc callbacks

* fix docs

* Call super.stop() in DLCappConfig

* Empty commit to run CI

* Try to debug

* Empty commit to run CI

* Revert things
2023-10-19 11:52:07 -05:00
Chris Stewart
cff757cb55
2023 10 03 node refactors (#5256)
* Rename PeerMessageSender -> PeerConnection

* WIP: Move gossip methods into PeerManagerApi, keep single peer methods in PeerMessageSenderApi, but remove peer parameter

* PeerData.peerMessaageSender -> PeerData.peerConnection

* Remove DataMessageHandler.queue as it is redundant

* Get most test cases passing in nodeTest

* Fix ReConnectionTest

* Fix NeutrinoNodeWithUncachedBitcoindTest test case

* Rename PeerManager.{randomPeerMsgSender, getPeerMessageSender} -> PeerManager.{randomPeerConnection,getPeerConnection}

* Refactor PeerManager.getPeerMessageSender to return the new PeerMessageSender

* Rename param

* scalafmt

* Remove unused method

* Revert onInitialization
2023-10-09 10:32:05 -05:00
Chris Stewart
2863b3f5cc
Change PeerManager to keep NodeState in Sink.foldAsync() rather than DataMessageHandler (#5255) 2023-10-05 16:11:36 -05:00
Chris Stewart
522821869d
Move filterBatchCache into NodeState.FilterSync (#5253) 2023-10-05 14:56:08 -05:00
Chris Stewart
a40be1a6bc
Fix bug where we were executing block ehader callbacks when we received 0 block headers from our peer (#5254) 2023-10-05 14:55:49 -05:00
Chris Stewart
1602852419
2023 09 29 waitingdisconnection nodestate (#5251)
* Move waitingForDisconnection into NodeState

* Remove PeerManager.waitingForDisconnection

* Remove mutable _waitingForDisconnection

* Fix compile
2023-10-03 15:35:46 -05:00
Chris Stewart
83cf657a0b
Move initialization of sync into PeerManager's queue (#5250) 2023-10-03 13:16:20 -05:00
Chris Stewart
4972d0a368
Move NodeState to core (#5249) 2023-09-29 12:06:24 -05:00
Chris Stewart
3e6ff52194
2023 09 27 issue 5139 (#5247)
* Add test case for reorg on bitcoin network for NeutrinoNodeTest

* Get unit tests passing

* Refactor findNextHeader() to not take an Option[BlockHeaderDb], not it just takes BlockHeaderDb

* Explicity return None in the case where we don't need sync filter headers

* Fix off by one bug when starting filter header sync
2023-09-29 07:35:26 -05:00
Chris Stewart
c4f0bd3d39
Switch defaults to 12 hours for running peerConnectionScheduler (#5241) 2023-09-21 09:26:40 -05:00
Chris Stewart
3763a53ad5
Adjust so that requery in the case were we have just 1 peer (#5240) 2023-09-20 09:13:23 -05:00
Chris Stewart
d5c74c086d
Reduce NodeCallbackStreamManager from 32 -> 16 (#5229) 2023-09-06 13:35:03 -05:00
Chris Stewart
b3aa7b4b68
Fix bug were we weren't consistently calculating the correct compact filter start height for sync (#5225) 2023-09-06 08:25:43 -05:00
Chris Stewart
489682312d
Reduce NodeCallbackStreamManager to 32 to reduce chance of OOM errors on small heap sizes (#5224) 2023-09-05 13:21:23 -05:00
Chris Stewart
3ae41032a4
Add log to help debug 5208 (#5211) 2023-08-28 12:32:16 -05:00
Chris Stewart
aa02683db9
Cleanup use of syncPeerOpt as a param in parts of PeerManager (#5209) 2023-08-26 12:37:27 -05:00
Chris Stewart
2672c2223c
Remove references to client in PeerManager logs (#5207) 2023-08-26 10:07:10 -05:00
Chris Stewart
39cec3ae51
Fix bug where we weren't checking if filters are stale when determing if we need to sync filters (#5203) 2023-08-25 09:05:35 -05:00