diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala index 16cda5c23e..02750eb5d6 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala @@ -36,7 +36,7 @@ import scodec.bits.ByteVector import java.net.InetSocketAddress import java.time.Instant import java.time.temporal.ChronoUnit -import scala.concurrent.Future +import scala.concurrent.{Future, Promise} import scala.concurrent.duration.{DurationInt, FiniteDuration} case class PeerMessageSender( @@ -299,14 +299,20 @@ case class PeerMessageSender( curReconnectionTry += 1 reconnectionTry = reconnectionTry + 1 + val reconnectP = Promise[Unit]() val cancellable = system.scheduler.scheduleOnce(delay) { val connF = connect() - connF.failed.foreach(err => - logger.error(s"Failed to reconnect with peer=$peer", err)) - () + connF.onComplete { + case scala.util.Success(_) => + resetReconnect() + reconnectP.success(()) + case scala.util.Failure(exception) => + logger.error(s"Failed to reconnect with peer=$peer", exception) + reconnectP.failure(exception) + } } reconnectionCancellableOpt = Some(cancellable) - Future.unit + reconnectP.future } } diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala index 030255b3d1..7d426aa806 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala @@ -482,8 +482,8 @@ object NodeUnitTest extends P2PLogger { //see: https://github.com/bitcoin-s/bitcoin-s/issues/4976 _ <- bitcoind.syncWithValidationInterfaceQueue() _ <- node.sync() - syncing <- node.chainApiFromDb().flatMap(_.isSyncing()) - _ = require(syncing) + _ <- AsyncUtil.retryUntilSatisfiedF(() => + node.chainApiFromDb().flatMap(_.isSyncing())) } yield node }