Skip to content

Commit 026fa2e

Browse files
committed
f Use fn instead of macro loop
1 parent 56819cf commit 026fa2e

File tree

1 file changed

+81
-63
lines changed

1 file changed

+81
-63
lines changed

src/chain/mod.rs

Lines changed: 81 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ use crate::chain::bitcoind_rpc::{
1313
};
1414
use crate::chain::electrum::ElectrumRuntimeClient;
1515
use crate::config::{
16-
Config, ElectrumSyncConfig, EsploraSyncConfig, BDK_CLIENT_CONCURRENCY, BDK_CLIENT_STOP_GAP,
17-
BDK_WALLET_SYNC_TIMEOUT_SECS, FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS, LDK_WALLET_SYNC_TIMEOUT_SECS,
18-
RESOLVED_CHANNEL_MONITOR_ARCHIVAL_INTERVAL, TX_BROADCAST_TIMEOUT_SECS,
19-
WALLET_SYNC_INTERVAL_MINIMUM_SECS,
16+
BackgroundSyncConfig, Config, ElectrumSyncConfig, EsploraSyncConfig, BDK_CLIENT_CONCURRENCY,
17+
BDK_CLIENT_STOP_GAP, BDK_WALLET_SYNC_TIMEOUT_SECS, FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS,
18+
LDK_WALLET_SYNC_TIMEOUT_SECS, RESOLVED_CHANNEL_MONITOR_ARCHIVAL_INTERVAL,
19+
TX_BROADCAST_TIMEOUT_SECS, WALLET_SYNC_INTERVAL_MINIMUM_SECS,
2020
};
2121
use crate::fee_estimator::{
2222
apply_post_estimation_adjustments, get_all_conf_targets, get_num_block_defaults_for_target,
@@ -304,67 +304,18 @@ impl ChainSource {
304304
channel_manager: Arc<ChannelManager>, chain_monitor: Arc<ChainMonitor>,
305305
output_sweeper: Arc<Sweeper>,
306306
) {
307-
macro_rules! start_tx_based_sync_loop {
308-
($background_sync_config: expr, $logger: expr) => {{
309-
// Setup syncing intervals
310-
let onchain_wallet_sync_interval_secs = $background_sync_config
311-
.onchain_wallet_sync_interval_secs
312-
.max(WALLET_SYNC_INTERVAL_MINIMUM_SECS);
313-
let mut onchain_wallet_sync_interval =
314-
tokio::time::interval(Duration::from_secs(onchain_wallet_sync_interval_secs));
315-
onchain_wallet_sync_interval
316-
.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip);
317-
318-
let fee_rate_cache_update_interval_secs = $background_sync_config
319-
.fee_rate_cache_update_interval_secs
320-
.max(WALLET_SYNC_INTERVAL_MINIMUM_SECS);
321-
let mut fee_rate_update_interval =
322-
tokio::time::interval(Duration::from_secs(fee_rate_cache_update_interval_secs));
323-
// When starting up, we just blocked on updating, so skip the first tick.
324-
fee_rate_update_interval.reset();
325-
fee_rate_update_interval
326-
.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip);
327-
328-
let lightning_wallet_sync_interval_secs = $background_sync_config
329-
.lightning_wallet_sync_interval_secs
330-
.max(WALLET_SYNC_INTERVAL_MINIMUM_SECS);
331-
let mut lightning_wallet_sync_interval =
332-
tokio::time::interval(Duration::from_secs(lightning_wallet_sync_interval_secs));
333-
lightning_wallet_sync_interval
334-
.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip);
335-
336-
// Start the syncing loop.
337-
loop {
338-
tokio::select! {
339-
_ = stop_sync_receiver.changed() => {
340-
log_trace!(
341-
$logger,
342-
"Stopping background syncing on-chain wallet.",
343-
);
344-
return;
345-
}
346-
_ = onchain_wallet_sync_interval.tick() => {
347-
let _ = self.sync_onchain_wallet().await;
348-
}
349-
_ = fee_rate_update_interval.tick() => {
350-
let _ = self.update_fee_rate_estimates().await;
351-
}
352-
_ = lightning_wallet_sync_interval.tick() => {
353-
let _ = self.sync_lightning_wallet(
354-
Arc::clone(&channel_manager),
355-
Arc::clone(&chain_monitor),
356-
Arc::clone(&output_sweeper),
357-
).await;
358-
}
359-
}
360-
}
361-
}};
362-
}
363-
364307
match self {
365308
Self::Esplora { sync_config, logger, .. } => {
366309
if let Some(background_sync_config) = sync_config.background_sync_config.as_ref() {
367-
start_tx_based_sync_loop!(background_sync_config, logger)
310+
self.start_tx_based_sync_loop(
311+
stop_sync_receiver,
312+
channel_manager,
313+
chain_monitor,
314+
output_sweeper,
315+
background_sync_config,
316+
Arc::clone(&logger),
317+
)
318+
.await
368319
} else {
369320
// Background syncing is disabled
370321
log_info!(
@@ -376,7 +327,15 @@ impl ChainSource {
376327
},
377328
Self::Electrum { sync_config, logger, .. } => {
378329
if let Some(background_sync_config) = sync_config.background_sync_config.as_ref() {
379-
start_tx_based_sync_loop!(background_sync_config, logger)
330+
self.start_tx_based_sync_loop(
331+
stop_sync_receiver,
332+
channel_manager,
333+
chain_monitor,
334+
output_sweeper,
335+
background_sync_config,
336+
Arc::clone(&logger),
337+
)
338+
.await
380339
} else {
381340
// Background syncing is disabled
382341
log_info!(
@@ -536,6 +495,65 @@ impl ChainSource {
536495
}
537496
}
538497

498+
async fn start_tx_based_sync_loop(
499+
&self, mut stop_sync_receiver: tokio::sync::watch::Receiver<()>,
500+
channel_manager: Arc<ChannelManager>, chain_monitor: Arc<ChainMonitor>,
501+
output_sweeper: Arc<Sweeper>, background_sync_config: &BackgroundSyncConfig,
502+
logger: Arc<Logger>,
503+
) {
504+
// Setup syncing intervals
505+
let onchain_wallet_sync_interval_secs = background_sync_config
506+
.onchain_wallet_sync_interval_secs
507+
.max(WALLET_SYNC_INTERVAL_MINIMUM_SECS);
508+
let mut onchain_wallet_sync_interval =
509+
tokio::time::interval(Duration::from_secs(onchain_wallet_sync_interval_secs));
510+
onchain_wallet_sync_interval
511+
.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip);
512+
513+
let fee_rate_cache_update_interval_secs = background_sync_config
514+
.fee_rate_cache_update_interval_secs
515+
.max(WALLET_SYNC_INTERVAL_MINIMUM_SECS);
516+
let mut fee_rate_update_interval =
517+
tokio::time::interval(Duration::from_secs(fee_rate_cache_update_interval_secs));
518+
// When starting up, we just blocked on updating, so skip the first tick.
519+
fee_rate_update_interval.reset();
520+
fee_rate_update_interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip);
521+
522+
let lightning_wallet_sync_interval_secs = background_sync_config
523+
.lightning_wallet_sync_interval_secs
524+
.max(WALLET_SYNC_INTERVAL_MINIMUM_SECS);
525+
let mut lightning_wallet_sync_interval =
526+
tokio::time::interval(Duration::from_secs(lightning_wallet_sync_interval_secs));
527+
lightning_wallet_sync_interval
528+
.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip);
529+
530+
// Start the syncing loop.
531+
loop {
532+
tokio::select! {
533+
_ = stop_sync_receiver.changed() => {
534+
log_trace!(
535+
logger,
536+
"Stopping background syncing on-chain wallet.",
537+
);
538+
return;
539+
}
540+
_ = onchain_wallet_sync_interval.tick() => {
541+
let _ = self.sync_onchain_wallet().await;
542+
}
543+
_ = fee_rate_update_interval.tick() => {
544+
let _ = self.update_fee_rate_estimates().await;
545+
}
546+
_ = lightning_wallet_sync_interval.tick() => {
547+
let _ = self.sync_lightning_wallet(
548+
Arc::clone(&channel_manager),
549+
Arc::clone(&chain_monitor),
550+
Arc::clone(&output_sweeper),
551+
).await;
552+
}
553+
}
554+
}
555+
}
556+
539557
// Synchronize the onchain wallet via transaction-based protocols (i.e., Esplora, Electrum,
540558
// etc.)
541559
pub(crate) async fn sync_onchain_wallet(&self) -> Result<(), Error> {

0 commit comments

Comments
 (0)