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 @@ -135,6 +135,7 @@ enum NodeError {
135
135
"ChannelConfigUpdateFailed",
136
136
"PersistenceFailed",
137
137
"FeerateEstimationUpdateFailed",
138
+ "FeerateEstimationUpdateTimeout",
138
139
"WalletOperationFailed",
139
140
"WalletOperationTimeout",
140
141
"OnchainTxSigningFailed",
Original file line number Diff line number Diff line change @@ -48,6 +48,9 @@ pub(crate) const BDK_WALLET_SYNC_TIMEOUT_SECS: u64 = 90;
48
48
// The timeout after which we abort a wallet syncing operation.
49
49
pub ( crate ) const LDK_WALLET_SYNC_TIMEOUT_SECS : u64 = 30 ;
50
50
51
+ // The timeout after which we abort a fee rate cache update operation.
52
+ pub ( crate ) const FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS : u64 = 5 ;
53
+
51
54
// The length in bytes of our wallets' keys seed.
52
55
pub ( crate ) const WALLET_KEYS_SEED_LEN : usize = 64 ;
53
56
Original file line number Diff line number Diff line change @@ -27,6 +27,8 @@ pub enum Error {
27
27
PersistenceFailed ,
28
28
/// A fee rate estimation update failed.
29
29
FeerateEstimationUpdateFailed ,
30
+ /// A fee rate estimation update timed out.
31
+ FeerateEstimationUpdateTimeout ,
30
32
/// A wallet operation failed.
31
33
WalletOperationFailed ,
32
34
/// A wallet operation timed out.
@@ -94,6 +96,9 @@ impl fmt::Display for Error {
94
96
Self :: FeerateEstimationUpdateFailed => {
95
97
write ! ( f, "Failed to update fee rate estimates." )
96
98
} ,
99
+ Self :: FeerateEstimationUpdateTimeout => {
100
+ write ! ( f, "Updating fee rate estimates timed out." )
101
+ } ,
97
102
Self :: WalletOperationFailed => write ! ( f, "Failed to conduct wallet operation." ) ,
98
103
Self :: WalletOperationTimeout => write ! ( f, "A wallet operation timed out." ) ,
99
104
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 ;
1
2
use crate :: logger:: { log_error, log_trace, Logger } ;
2
3
use crate :: { Config , Error } ;
3
4
@@ -14,6 +15,7 @@ use bitcoin::Network;
14
15
use std:: collections:: HashMap ;
15
16
use std:: ops:: Deref ;
16
17
use std:: sync:: { Arc , RwLock } ;
18
+ use std:: time:: Duration ;
17
19
18
20
pub ( crate ) struct OnchainFeeEstimator < L : Deref >
19
21
where
55
57
ConfirmationTarget :: OutputSpendingFee => 12 ,
56
58
} ;
57
59
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| {
59
75
log_error ! (
60
76
self . logger,
61
77
"Failed to retrieve fee rate estimates for {:?}: {}" ,
You can’t perform that action at this time.
0 commit comments