Skip to content

Commit 1946042

Browse files
committed
Drop KVStore generic from Node
.. switching to `dyn KVStore + Send + Sync`
1 parent 418ef5d commit 1946042

File tree

12 files changed

+140
-152
lines changed

12 files changed

+140
-152
lines changed

src/builder.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ use crate::peer_store::PeerStore;
1111
use crate::sweep::OutputSweeper;
1212
use crate::tx_broadcaster::TransactionBroadcaster;
1313
use crate::types::{
14-
ChainMonitor, ChannelManager, FakeMessageRouter, GossipSync, KeysManager, NetworkGraph,
15-
OnionMessenger, PeerManager,
14+
ChainMonitor, ChannelManager, DynStore, FakeMessageRouter, GossipSync, KeysManager,
15+
NetworkGraph, OnionMessenger, PeerManager,
1616
};
1717
use crate::wallet::Wallet;
1818
use crate::LogLevel;
@@ -33,7 +33,7 @@ use lightning::sign::EntropySource;
3333

3434
use lightning::util::config::UserConfig;
3535
use lightning::util::persist::{
36-
read_channel_monitors, KVStore, CHANNEL_MANAGER_PERSISTENCE_KEY,
36+
read_channel_monitors, CHANNEL_MANAGER_PERSISTENCE_KEY,
3737
CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE, CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE,
3838
};
3939
use lightning::util::ser::ReadableArgs;
@@ -114,12 +114,18 @@ pub enum BuildError {
114114
/// The given listening addresses are invalid, e.g. too many were passed.
115115
InvalidListeningAddresses,
116116
/// We failed to read data from the [`KVStore`].
117+
///
118+
/// [`KVStore`]: lightning::util::persist::KVStore
117119
ReadFailed,
118120
/// We failed to write data to the [`KVStore`].
121+
///
122+
/// [`KVStore`]: lightning::util::persist::KVStore
119123
WriteFailed,
120124
/// We failed to access the given `storage_dir_path`.
121125
StoragePathAccessFailed,
122126
/// We failed to setup our [`KVStore`].
127+
///
128+
/// [`KVStore`]: lightning::util::persist::KVStore
123129
KVStoreSetupFailed,
124130
/// We failed to setup the onchain wallet.
125131
WalletSetupFailed,
@@ -298,7 +304,7 @@ impl NodeBuilder {
298304

299305
/// Builds a [`Node`] instance with a [`SqliteStore`] backend and according to the options
300306
/// previously configured.
301-
pub fn build(&self) -> Result<Node<SqliteStore>, BuildError> {
307+
pub fn build(&self) -> Result<Node, BuildError> {
302308
let storage_dir_path = self.config.storage_dir_path.clone();
303309
fs::create_dir_all(storage_dir_path.clone())
304310
.map_err(|_| BuildError::StoragePathAccessFailed)?;
@@ -315,7 +321,7 @@ impl NodeBuilder {
315321

316322
/// Builds a [`Node`] instance with a [`FilesystemStore`] backend and according to the options
317323
/// previously configured.
318-
pub fn build_with_fs_store(&self) -> Result<Node<FilesystemStore>, BuildError> {
324+
pub fn build_with_fs_store(&self) -> Result<Node, BuildError> {
319325
let mut storage_dir_path: PathBuf = self.config.storage_dir_path.clone().into();
320326
storage_dir_path.push("fs_store");
321327

@@ -328,9 +334,7 @@ impl NodeBuilder {
328334
/// Builds a [`Node`] instance with a [`VssStore`] backend and according to the options
329335
/// previously configured.
330336
#[cfg(any(vss, vss_test))]
331-
pub fn build_with_vss_store(
332-
&self, url: String, store_id: String,
333-
) -> Result<Node<VssStore>, BuildError> {
337+
pub fn build_with_vss_store(&self, url: String, store_id: String) -> Result<Node, BuildError> {
334338
let logger = setup_logger(&self.config)?;
335339

336340
let seed_bytes = seed_bytes_from_config(
@@ -368,9 +372,7 @@ impl NodeBuilder {
368372
}
369373

370374
/// Builds a [`Node`] instance according to the options previously configured.
371-
pub fn build_with_store<K: KVStore + Sync + Send + 'static>(
372-
&self, kv_store: Arc<K>,
373-
) -> Result<Node<K>, BuildError> {
375+
pub fn build_with_store(&self, kv_store: Arc<DynStore>) -> Result<Node, BuildError> {
374376
let logger = setup_logger(&self.config)?;
375377
let seed_bytes = seed_bytes_from_config(
376378
&self.config,
@@ -499,31 +501,29 @@ impl ArcedNodeBuilder {
499501

500502
/// Builds a [`Node`] instance with a [`SqliteStore`] backend and according to the options
501503
/// previously configured.
502-
pub fn build(&self) -> Result<Arc<Node<SqliteStore>>, BuildError> {
504+
pub fn build(&self) -> Result<Arc<Node>, BuildError> {
503505
self.inner.read().unwrap().build().map(Arc::new)
504506
}
505507

506508
/// Builds a [`Node`] instance with a [`FilesystemStore`] backend and according to the options
507509
/// previously configured.
508-
pub fn build_with_fs_store(&self) -> Result<Arc<Node<FilesystemStore>>, BuildError> {
510+
pub fn build_with_fs_store(&self) -> Result<Arc<Node>, BuildError> {
509511
self.inner.read().unwrap().build_with_fs_store().map(Arc::new)
510512
}
511513

512514
/// Builds a [`Node`] instance according to the options previously configured.
513-
pub fn build_with_store<K: KVStore + Sync + Send + 'static>(
514-
&self, kv_store: Arc<K>,
515-
) -> Result<Arc<Node<K>>, BuildError> {
515+
pub fn build_with_store(&self, kv_store: Arc<DynStore>) -> Result<Arc<Node>, BuildError> {
516516
self.inner.read().unwrap().build_with_store(kv_store).map(Arc::new)
517517
}
518518
}
519519

520520
/// Builds a [`Node`] instance according to the options previously configured.
521-
fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
521+
fn build_with_store_internal(
522522
config: Arc<Config>, chain_data_source_config: Option<&ChainDataSourceConfig>,
523523
gossip_source_config: Option<&GossipSourceConfig>,
524524
liquidity_source_config: Option<&LiquiditySourceConfig>, seed_bytes: [u8; 64],
525-
logger: Arc<FilesystemLogger>, kv_store: Arc<K>,
526-
) -> Result<Node<K>, BuildError> {
525+
logger: Arc<FilesystemLogger>, kv_store: Arc<DynStore>,
526+
) -> Result<Node, BuildError> {
527527
// Initialize the on-chain wallet and chain access
528528
let xprv = bitcoin::bip32::ExtendedPrivKey::new_master(config.network.into(), &seed_bytes)
529529
.map_err(|e| {
@@ -603,7 +603,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
603603
));
604604

605605
// Initialize the ChainMonitor
606-
let chain_monitor: Arc<ChainMonitor<K>> = Arc::new(chainmonitor::ChainMonitor::new(
606+
let chain_monitor: Arc<ChainMonitor> = Arc::new(chainmonitor::ChainMonitor::new(
607607
Some(Arc::clone(&tx_sync)),
608608
Arc::clone(&tx_broadcaster),
609609
Arc::clone(&logger),
@@ -722,7 +722,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
722722
channel_monitor_references,
723723
);
724724
let (_hash, channel_manager) =
725-
<(BlockHash, ChannelManager<K>)>::read(&mut reader, read_args).map_err(|e| {
725+
<(BlockHash, ChannelManager)>::read(&mut reader, read_args).map_err(|e| {
726726
log_error!(logger, "Failed to read channel manager from KVStore: {}", e);
727727
BuildError::ReadFailed
728728
})?;

src/event.rs

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::types::{Sweeper, Wallet};
1+
use crate::types::{DynStore, Sweeper, Wallet};
22
use crate::{
33
hex_utils, ChannelManager, Config, Error, NetworkGraph, PeerInfo, PeerStore, UserChannelId,
44
};
@@ -20,7 +20,6 @@ use lightning::impl_writeable_tlv_based_enum;
2020
use lightning::ln::{ChannelId, PaymentHash};
2121
use lightning::routing::gossip::NodeId;
2222
use lightning::util::errors::APIError;
23-
use lightning::util::persist::KVStore;
2423
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
2524

2625
use lightning_liquidity::lsps2::utils::compute_opening_fee;
@@ -127,22 +126,22 @@ impl_writeable_tlv_based_enum!(Event,
127126
};
128127
);
129128

130-
pub struct EventQueue<K: KVStore + Sync + Send, L: Deref>
129+
pub struct EventQueue<L: Deref>
131130
where
132131
L::Target: Logger,
133132
{
134133
queue: Arc<Mutex<VecDeque<Event>>>,
135134
waker: Arc<Mutex<Option<Waker>>>,
136135
notifier: Condvar,
137-
kv_store: Arc<K>,
136+
kv_store: Arc<DynStore>,
138137
logger: L,
139138
}
140139

141-
impl<K: KVStore + Sync + Send, L: Deref> EventQueue<K, L>
140+
impl<L: Deref> EventQueue<L>
142141
where
143142
L::Target: Logger,
144143
{
145-
pub(crate) fn new(kv_store: Arc<K>, logger: L) -> Self {
144+
pub(crate) fn new(kv_store: Arc<DynStore>, logger: L) -> Self {
146145
let queue = Arc::new(Mutex::new(VecDeque::new()));
147146
let waker = Arc::new(Mutex::new(None));
148147
let notifier = Condvar::new();
@@ -217,13 +216,13 @@ where
217216
}
218217
}
219218

220-
impl<K: KVStore + Sync + Send, L: Deref> ReadableArgs<(Arc<K>, L)> for EventQueue<K, L>
219+
impl<L: Deref> ReadableArgs<(Arc<DynStore>, L)> for EventQueue<L>
221220
where
222221
L::Target: Logger,
223222
{
224223
#[inline]
225224
fn read<R: lightning::io::Read>(
226-
reader: &mut R, args: (Arc<K>, L),
225+
reader: &mut R, args: (Arc<DynStore>, L),
227226
) -> Result<Self, lightning::ln::msgs::DecodeError> {
228227
let (kv_store, logger) = args;
229228
let read_queue: EventQueueDeserWrapper = Readable::read(reader)?;
@@ -281,32 +280,31 @@ impl Future for EventFuture {
281280
}
282281
}
283282

284-
pub(crate) struct EventHandler<K: KVStore + Sync + Send, L: Deref>
283+
pub(crate) struct EventHandler<L: Deref>
285284
where
286285
L::Target: Logger,
287286
{
288-
event_queue: Arc<EventQueue<K, L>>,
287+
event_queue: Arc<EventQueue<L>>,
289288
wallet: Arc<Wallet>,
290-
channel_manager: Arc<ChannelManager<K>>,
291-
output_sweeper: Arc<Sweeper<K>>,
289+
channel_manager: Arc<ChannelManager>,
290+
output_sweeper: Arc<Sweeper>,
292291
network_graph: Arc<NetworkGraph>,
293-
payment_store: Arc<PaymentStore<K, L>>,
294-
peer_store: Arc<PeerStore<K, L>>,
292+
payment_store: Arc<PaymentStore<L>>,
293+
peer_store: Arc<PeerStore<L>>,
295294
runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>,
296295
logger: L,
297296
config: Arc<Config>,
298297
}
299298

300-
impl<K: KVStore + Sync + Send + 'static, L: Deref> EventHandler<K, L>
299+
impl<L: Deref> EventHandler<L>
301300
where
302301
L::Target: Logger,
303302
{
304303
pub fn new(
305-
event_queue: Arc<EventQueue<K, L>>, wallet: Arc<Wallet>,
306-
channel_manager: Arc<ChannelManager<K>>, output_sweeper: Arc<Sweeper<K>>,
307-
network_graph: Arc<NetworkGraph>, payment_store: Arc<PaymentStore<K, L>>,
308-
peer_store: Arc<PeerStore<K, L>>, runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>,
309-
logger: L, config: Arc<Config>,
304+
event_queue: Arc<EventQueue<L>>, wallet: Arc<Wallet>, channel_manager: Arc<ChannelManager>,
305+
output_sweeper: Arc<Sweeper>, network_graph: Arc<NetworkGraph>,
306+
payment_store: Arc<PaymentStore<L>>, peer_store: Arc<PeerStore<L>>,
307+
runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>, logger: L, config: Arc<Config>,
310308
) -> Self {
311309
Self {
312310
event_queue,
@@ -878,7 +876,7 @@ mod tests {
878876

879877
#[tokio::test]
880878
async fn event_queue_persistence() {
881-
let store = Arc::new(TestStore::new(false));
879+
let store: Arc<DynStore> = Arc::new(TestStore::new(false));
882880
let logger = Arc::new(TestLogger::new());
883881
let event_queue = Arc::new(EventQueue::new(Arc::clone(&store), Arc::clone(&logger)));
884882
assert_eq!(event_queue.next_event(), None);
@@ -915,7 +913,7 @@ mod tests {
915913

916914
#[tokio::test]
917915
async fn event_queue_concurrency() {
918-
let store = Arc::new(TestStore::new(false));
916+
let store: Arc<DynStore> = Arc::new(TestStore::new(false));
919917
let logger = Arc::new(TestLogger::new());
920918
let event_queue = Arc::new(EventQueue::new(Arc::clone(&store), Arc::clone(&logger)));
921919
assert_eq!(event_queue.next_event(), None);

src/io/utils.rs

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,17 @@ use crate::WALLET_KEYS_SEED_LEN;
44
use crate::logger::log_error;
55
use crate::peer_store::PeerStore;
66
use crate::sweep::SpendableOutputInfo;
7+
use crate::types::DynStore;
78
use crate::{Error, EventQueue, PaymentDetails};
89

910
use lightning::routing::gossip::NetworkGraph;
1011
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringDecayParameters};
1112
use lightning::util::logger::Logger;
1213
use lightning::util::persist::{
13-
KVStore, KVSTORE_NAMESPACE_KEY_ALPHABET, KVSTORE_NAMESPACE_KEY_MAX_LEN,
14-
NETWORK_GRAPH_PERSISTENCE_KEY, NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE,
15-
NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE, SCORER_PERSISTENCE_KEY,
16-
SCORER_PERSISTENCE_PRIMARY_NAMESPACE, SCORER_PERSISTENCE_SECONDARY_NAMESPACE,
14+
KVSTORE_NAMESPACE_KEY_ALPHABET, KVSTORE_NAMESPACE_KEY_MAX_LEN, NETWORK_GRAPH_PERSISTENCE_KEY,
15+
NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE, NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE,
16+
SCORER_PERSISTENCE_KEY, SCORER_PERSISTENCE_PRIMARY_NAMESPACE,
17+
SCORER_PERSISTENCE_SECONDARY_NAMESPACE,
1718
};
1819
use lightning::util::ser::{Readable, ReadableArgs, Writeable};
1920
use lightning::util::string::PrintableString;
@@ -93,8 +94,8 @@ where
9394
}
9495

9596
/// Read a previously persisted [`NetworkGraph`] from the store.
96-
pub(crate) fn read_network_graph<K: KVStore + Sync + Send, L: Deref + Clone>(
97-
kv_store: Arc<K>, logger: L,
97+
pub(crate) fn read_network_graph<L: Deref + Clone>(
98+
kv_store: Arc<DynStore>, logger: L,
9899
) -> Result<NetworkGraph<L>, std::io::Error>
99100
where
100101
L::Target: Logger,
@@ -111,12 +112,8 @@ where
111112
}
112113

113114
/// Read a previously persisted [`ProbabilisticScorer`] from the store.
114-
pub(crate) fn read_scorer<
115-
K: KVStore + Send + Sync,
116-
G: Deref<Target = NetworkGraph<L>>,
117-
L: Deref + Clone,
118-
>(
119-
kv_store: Arc<K>, network_graph: G, logger: L,
115+
pub(crate) fn read_scorer<G: Deref<Target = NetworkGraph<L>>, L: Deref + Clone>(
116+
kv_store: Arc<DynStore>, network_graph: G, logger: L,
120117
) -> Result<ProbabilisticScorer<G, L>, std::io::Error>
121118
where
122119
L::Target: Logger,
@@ -135,9 +132,9 @@ where
135132
}
136133

137134
/// Read previously persisted events from the store.
138-
pub(crate) fn read_event_queue<K: KVStore + Sync + Send, L: Deref + Clone>(
139-
kv_store: Arc<K>, logger: L,
140-
) -> Result<EventQueue<K, L>, std::io::Error>
135+
pub(crate) fn read_event_queue<L: Deref + Clone>(
136+
kv_store: Arc<DynStore>, logger: L,
137+
) -> Result<EventQueue<L>, std::io::Error>
141138
where
142139
L::Target: Logger,
143140
{
@@ -153,9 +150,9 @@ where
153150
}
154151

155152
/// Read previously persisted peer info from the store.
156-
pub(crate) fn read_peer_info<K: KVStore + Sync + Send, L: Deref + Clone>(
157-
kv_store: Arc<K>, logger: L,
158-
) -> Result<PeerStore<K, L>, std::io::Error>
153+
pub(crate) fn read_peer_info<L: Deref + Clone>(
154+
kv_store: Arc<DynStore>, logger: L,
155+
) -> Result<PeerStore<L>, std::io::Error>
159156
where
160157
L::Target: Logger,
161158
{
@@ -171,8 +168,8 @@ where
171168
}
172169

173170
/// Read previously persisted payments information from the store.
174-
pub(crate) fn read_payments<K: KVStore + Sync + Send, L: Deref>(
175-
kv_store: Arc<K>, logger: L,
171+
pub(crate) fn read_payments<L: Deref>(
172+
kv_store: Arc<DynStore>, logger: L,
176173
) -> Result<Vec<PaymentDetails>, std::io::Error>
177174
where
178175
L::Target: Logger,
@@ -201,8 +198,8 @@ where
201198
}
202199

203200
/// Read previously persisted spendable output information from the store.
204-
pub(crate) fn read_spendable_outputs<K: KVStore + Sync + Send, L: Deref>(
205-
kv_store: Arc<K>, logger: L,
201+
pub(crate) fn read_spendable_outputs<L: Deref>(
202+
kv_store: Arc<DynStore>, logger: L,
206203
) -> Result<Vec<SpendableOutputInfo>, std::io::Error>
207204
where
208205
L::Target: Logger,
@@ -230,8 +227,8 @@ where
230227
Ok(res)
231228
}
232229

233-
pub(crate) fn read_latest_rgs_sync_timestamp<K: KVStore + Sync + Send, L: Deref>(
234-
kv_store: Arc<K>, logger: L,
230+
pub(crate) fn read_latest_rgs_sync_timestamp<L: Deref>(
231+
kv_store: Arc<DynStore>, logger: L,
235232
) -> Result<u32, std::io::Error>
236233
where
237234
L::Target: Logger,
@@ -250,8 +247,8 @@ where
250247
})
251248
}
252249

253-
pub(crate) fn write_latest_rgs_sync_timestamp<K: KVStore + Sync + Send, L: Deref>(
254-
updated_timestamp: u32, kv_store: Arc<K>, logger: L,
250+
pub(crate) fn write_latest_rgs_sync_timestamp<L: Deref>(
251+
updated_timestamp: u32, kv_store: Arc<DynStore>, logger: L,
255252
) -> Result<(), Error>
256253
where
257254
L::Target: Logger,
@@ -277,8 +274,8 @@ where
277274
})
278275
}
279276

280-
pub(crate) fn read_latest_node_ann_bcast_timestamp<K: KVStore + Sync + Send, L: Deref>(
281-
kv_store: Arc<K>, logger: L,
277+
pub(crate) fn read_latest_node_ann_bcast_timestamp<L: Deref>(
278+
kv_store: Arc<DynStore>, logger: L,
282279
) -> Result<u64, std::io::Error>
283280
where
284281
L::Target: Logger,
@@ -301,8 +298,8 @@ where
301298
})
302299
}
303300

304-
pub(crate) fn write_latest_node_ann_bcast_timestamp<K: KVStore + Sync + Send, L: Deref>(
305-
updated_timestamp: u64, kv_store: Arc<K>, logger: L,
301+
pub(crate) fn write_latest_node_ann_bcast_timestamp<L: Deref>(
302+
updated_timestamp: u64, kv_store: Arc<DynStore>, logger: L,
306303
) -> Result<(), Error>
307304
where
308305
L::Target: Logger,

0 commit comments

Comments
 (0)