mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-24 15:02:17 +01:00
Fix case where syncCompactFilters is called but filters but no sync peer is set (#4965)
This commit is contained in:
parent
7043c95800
commit
3bc89c680f
1 changed files with 32 additions and 19 deletions
|
@ -183,15 +183,21 @@ case class NeutrinoNode(
|
||||||
bestFilterHeader: CompactFilterHeaderDb,
|
bestFilterHeader: CompactFilterHeaderDb,
|
||||||
chainApi: ChainApi,
|
chainApi: ChainApi,
|
||||||
bestFilterOpt: Option[CompactFilterDb]): Future[Unit] = {
|
bestFilterOpt: Option[CompactFilterDb]): Future[Unit] = {
|
||||||
val syncPeer = dataMessageHandler.syncPeer.getOrElse(
|
val syncPeerMsgSenderOptF = {
|
||||||
throw new RuntimeException("Sync peer not set"))
|
dataMessageHandler.syncPeer.map { peer =>
|
||||||
val syncPeerMsgSenderF = peerManager.peerData(syncPeer).peerMessageSender
|
peerManager.peerData(peer).peerMessageSender
|
||||||
val sendCompactFilterHeaderMsgF = syncPeerMsgSenderF.flatMap(
|
}
|
||||||
_.sendNextGetCompactFilterHeadersCommand(
|
}
|
||||||
chainApi = chainApi,
|
val sendCompactFilterHeaderMsgF = syncPeerMsgSenderOptF match {
|
||||||
filterHeaderBatchSize = chainConfig.filterHeaderBatchSize,
|
case Some(syncPeerMsgSenderF) =>
|
||||||
prevStopHash = bestFilterHeader.blockHashBE)
|
syncPeerMsgSenderF.flatMap(
|
||||||
)
|
_.sendNextGetCompactFilterHeadersCommand(
|
||||||
|
chainApi = chainApi,
|
||||||
|
filterHeaderBatchSize = chainConfig.filterHeaderBatchSize,
|
||||||
|
prevStopHash = bestFilterHeader.blockHashBE)
|
||||||
|
)
|
||||||
|
case None => Future.successful(false)
|
||||||
|
}
|
||||||
sendCompactFilterHeaderMsgF.flatMap { isSyncFilterHeaders =>
|
sendCompactFilterHeaderMsgF.flatMap { isSyncFilterHeaders =>
|
||||||
// If we have started syncing filters
|
// If we have started syncing filters
|
||||||
if (
|
if (
|
||||||
|
@ -199,16 +205,23 @@ case class NeutrinoNode(
|
||||||
bestFilterOpt.isDefined &&
|
bestFilterOpt.isDefined &&
|
||||||
bestFilterOpt.get.hashBE != bestFilterHeader.filterHashBE
|
bestFilterOpt.get.hashBE != bestFilterHeader.filterHashBE
|
||||||
) {
|
) {
|
||||||
//means we are not syncing filter headers, and our filters are NOT
|
syncPeerMsgSenderOptF match {
|
||||||
//in sync with our compact filter headers
|
case Some(syncPeerMsgSenderF) =>
|
||||||
syncPeerMsgSenderF.flatMap { sender =>
|
//means we are not syncing filter headers, and our filters are NOT
|
||||||
sender
|
//in sync with our compact filter headers
|
||||||
.sendNextGetCompactFilterCommand(chainApi = chainApi,
|
syncPeerMsgSenderF.flatMap { sender =>
|
||||||
filterBatchSize =
|
sender
|
||||||
chainConfig.filterBatchSize,
|
.sendNextGetCompactFilterCommand(chainApi = chainApi,
|
||||||
startHeight =
|
filterBatchSize =
|
||||||
bestFilterOpt.get.height)
|
chainConfig.filterBatchSize,
|
||||||
.map(_ => ())
|
startHeight =
|
||||||
|
bestFilterOpt.get.height)
|
||||||
|
.map(_ => ())
|
||||||
|
}
|
||||||
|
case None =>
|
||||||
|
logger.warn(
|
||||||
|
s"Not syncing compact filters since we do not have a syncPeer set, bestFilterOpt=$bestFilterOpt")
|
||||||
|
Future.unit
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Future.unit
|
Future.unit
|
||||||
|
|
Loading…
Add table
Reference in a new issue