@@ -23,7 +23,9 @@ use crate::{Error, EventQueue, NodeMetrics, PaymentDetails};
23
23
use lightning:: io:: Cursor ;
24
24
use lightning:: ln:: msgs:: DecodeError ;
25
25
use lightning:: routing:: gossip:: NetworkGraph ;
26
- use lightning:: routing:: scoring:: { ProbabilisticScorer , ProbabilisticScoringDecayParameters } ;
26
+ use lightning:: routing:: scoring:: {
27
+ ChannelLiquidities , ProbabilisticScorer , ProbabilisticScoringDecayParameters ,
28
+ } ;
27
29
use lightning:: util:: persist:: {
28
30
KVSTORE_NAMESPACE_KEY_ALPHABET , KVSTORE_NAMESPACE_KEY_MAX_LEN , NETWORK_GRAPH_PERSISTENCE_KEY ,
29
31
NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE , NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
@@ -52,6 +54,8 @@ use std::ops::Deref;
52
54
use std:: path:: Path ;
53
55
use std:: sync:: Arc ;
54
56
57
+ pub const EXTERNAL_PATHFINDING_SCORES_CACHE_KEY : & str = "external_pathfinding_scores_cache" ;
58
+
55
59
/// Generates a random [BIP 39] mnemonic.
56
60
///
57
61
/// The result may be used to initialize the [`Node`] entropy, i.e., can be given to
@@ -166,6 +170,51 @@ where
166
170
} )
167
171
}
168
172
173
+ /// Read previously persisted external pathfinding scores from the cache.
174
+ pub ( crate ) fn read_external_pathfinding_scores_from_cache < L : Deref > (
175
+ kv_store : Arc < DynStore > , logger : L ,
176
+ ) -> Result < ChannelLiquidities , std:: io:: Error >
177
+ where
178
+ L :: Target : LdkLogger ,
179
+ {
180
+ let mut reader = Cursor :: new ( kv_store. read (
181
+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
182
+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
183
+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
184
+ ) ?) ;
185
+ ChannelLiquidities :: read ( & mut reader) . map_err ( |e| {
186
+ log_error ! ( logger, "Failed to deserialize scorer: {}" , e) ;
187
+ std:: io:: Error :: new ( std:: io:: ErrorKind :: InvalidData , "Failed to deserialize Scorer" )
188
+ } )
189
+ }
190
+
191
+ /// Persist external pathfinding scores to the cache.
192
+ pub ( crate ) fn write_external_pathfinding_scores_to_cache < L : Deref > (
193
+ kv_store : Arc < DynStore > , data : & ChannelLiquidities , logger : L ,
194
+ ) -> Result < ( ) , Error >
195
+ where
196
+ L :: Target : LdkLogger ,
197
+ {
198
+ kv_store
199
+ . write (
200
+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
201
+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
202
+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
203
+ & data. encode ( ) ,
204
+ )
205
+ . map_err ( |e| {
206
+ log_error ! (
207
+ logger,
208
+ "Writing data to key {}/{}/{} failed due to: {}" ,
209
+ NODE_METRICS_PRIMARY_NAMESPACE ,
210
+ NODE_METRICS_SECONDARY_NAMESPACE ,
211
+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
212
+ e
213
+ ) ;
214
+ Error :: PersistenceFailed
215
+ } )
216
+ }
217
+
169
218
/// Read previously persisted events from the store.
170
219
pub ( crate ) fn read_event_queue < L : Deref + Clone > (
171
220
kv_store : Arc < DynStore > , logger : L ,
0 commit comments