From 788b99c184f19bee516b46cca9edc3fbb879325e Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Fri, 3 Jan 2025 15:46:48 -0600 Subject: [PATCH] refactor: Improve bitcoind wallet polling logic (#5834) --- .../org/bitcoins/server/BitcoindRpcBackendUtil.scala | 2 +- .../bitcoins/server/bitcoind/BitcoindSyncState.scala | 11 ++++++----- .../server/util/BitcoindPollingCancellabe.scala | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/server/src/main/scala/org/bitcoins/server/BitcoindRpcBackendUtil.scala b/app/server/src/main/scala/org/bitcoins/server/BitcoindRpcBackendUtil.scala index 05ceeff678..59b3cb1983 100644 --- a/app/server/src/main/scala/org/bitcoins/server/BitcoindRpcBackendUtil.scala +++ b/app/server/src/main/scala/org/bitcoins/server/BitcoindRpcBackendUtil.scala @@ -501,7 +501,7 @@ object BitcoindRpcBackendUtil extends BitcoinSLogger { import system.dispatcher val atomicPrevCount = new AtomicInteger(prevCount) val queueSource: Source[Int, SourceQueueWithComplete[Int]] = - Source.queue[Int](100, OverflowStrategy.backpressure) + Source.queue[Int](16, OverflowStrategy.backpressure) val numParallelism = FutureUtil.getParallelism val fetchBlocksFlow = diff --git a/app/server/src/main/scala/org/bitcoins/server/bitcoind/BitcoindSyncState.scala b/app/server/src/main/scala/org/bitcoins/server/bitcoind/BitcoindSyncState.scala index 228392de69..29009a1f41 100644 --- a/app/server/src/main/scala/org/bitcoins/server/bitcoind/BitcoindSyncState.scala +++ b/app/server/src/main/scala/org/bitcoins/server/bitcoind/BitcoindSyncState.scala @@ -4,21 +4,22 @@ import org.bitcoins.server.util.{BitcoindPollingCancellable} import scala.concurrent.Future -/** @param syncF - * the future that will be completed when the synchronization with bitcoind - * is complete +/** @param initSyncF + * the future that will be completed when the initial synchronization with + * bitcoind is complete. This Future isn't related to subsequent polling jobs + * after our initial sync between bitcoind and the wallet on startup * @param pollingCancellable * You can cancel bitcoind polling by calling * [[BitcoindPollingCancellabe.cancel()]] */ case class BitcoindSyncState( - syncF: Future[Unit], + initSyncF: Future[Unit], pollingCancellable: BitcoindPollingCancellable ) { /** Stops syncing and polling bitcoind */ def stop(): Future[Unit] = { pollingCancellable.cancel() - syncF + initSyncF } } diff --git a/app/server/src/main/scala/org/bitcoins/server/util/BitcoindPollingCancellabe.scala b/app/server/src/main/scala/org/bitcoins/server/util/BitcoindPollingCancellabe.scala index fe70b0ed1f..a58ac1ad24 100644 --- a/app/server/src/main/scala/org/bitcoins/server/util/BitcoindPollingCancellabe.scala +++ b/app/server/src/main/scala/org/bitcoins/server/util/BitcoindPollingCancellabe.scala @@ -15,7 +15,7 @@ case class BitcoindPollingCancellable( } override def isCancelled: Boolean = - blockPollingCancellable.isCancelled && mempoolPollingCancelable.cancel() + blockPollingCancellable.isCancelled && mempoolPollingCancelable.isCancelled } object BitcoindPollingCancellabe {