File tree Expand file tree Collapse file tree 4 files changed +26
-1
lines changed
Expand file tree Collapse file tree 4 files changed +26
-1
lines changed Original file line number Diff line number Diff line change @@ -165,6 +165,7 @@ enum NodeError {
165165 "ChannelConfigUpdateFailed",
166166 "PersistenceFailed",
167167 "FeerateEstimationUpdateFailed",
168+ "FeerateEstimationUpdateTimeout",
168169 "WalletOperationFailed",
169170 "WalletOperationTimeout",
170171 "OnchainTxSigningFailed",
Original file line number Diff line number Diff line change @@ -52,6 +52,9 @@ pub(crate) const BDK_WALLET_SYNC_TIMEOUT_SECS: u64 = 90;
5252// The timeout after which we abort a wallet syncing operation.
5353pub ( crate ) const LDK_WALLET_SYNC_TIMEOUT_SECS : u64 = 30 ;
5454
55+ // The timeout after which we abort a fee rate cache update operation.
56+ pub ( crate ) const FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS : u64 = 5 ;
57+
5558// The length in bytes of our wallets' keys seed.
5659pub ( crate ) const WALLET_KEYS_SEED_LEN : usize = 64 ;
5760
Original file line number Diff line number Diff line change @@ -33,6 +33,8 @@ pub enum Error {
3333 PersistenceFailed ,
3434 /// A fee rate estimation update failed.
3535 FeerateEstimationUpdateFailed ,
36+ /// A fee rate estimation update timed out.
37+ FeerateEstimationUpdateTimeout ,
3638 /// A wallet operation failed.
3739 WalletOperationFailed ,
3840 /// A wallet operation timed out.
@@ -115,6 +117,9 @@ impl fmt::Display for Error {
115117 Self :: FeerateEstimationUpdateFailed => {
116118 write ! ( f, "Failed to update fee rate estimates." )
117119 } ,
120+ Self :: FeerateEstimationUpdateTimeout => {
121+ write ! ( f, "Updating fee rate estimates timed out." )
122+ } ,
118123 Self :: WalletOperationFailed => write ! ( f, "Failed to conduct wallet operation." ) ,
119124 Self :: WalletOperationTimeout => write ! ( f, "A wallet operation timed out." ) ,
120125 Self :: OnchainTxSigningFailed => write ! ( f, "Failed to sign given transaction." ) ,
Original file line number Diff line number Diff line change 1+ use crate :: config:: FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS ;
12use crate :: logger:: { log_error, log_trace, Logger } ;
23use crate :: { Config , Error } ;
34
@@ -14,6 +15,7 @@ use bitcoin::Network;
1415use std:: collections:: HashMap ;
1516use std:: ops:: Deref ;
1617use std:: sync:: { Arc , RwLock } ;
18+ use std:: time:: Duration ;
1719
1820pub ( crate ) struct OnchainFeeEstimator < L : Deref >
1921where
5557 ConfirmationTarget :: OutputSpendingFee => 12 ,
5658 } ;
5759
58- let estimates = self . esplora_client . get_fee_estimates ( ) . await . map_err ( |e| {
60+ let estimates = tokio:: time:: timeout (
61+ Duration :: from_secs ( FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS ) ,
62+ self . esplora_client . get_fee_estimates ( ) ,
63+ )
64+ . await
65+ . map_err ( |e| {
66+ log_error ! (
67+ self . logger,
68+ "Updating fee rate estimates for {:?} timed out: {}" ,
69+ target,
70+ e
71+ ) ;
72+ Error :: FeerateEstimationUpdateTimeout
73+ } ) ?
74+ . map_err ( |e| {
5975 log_error ! (
6076 self . logger,
6177 "Failed to retrieve fee rate estimates for {:?}: {}" ,
You can’t perform that action at this time.
0 commit comments