Skip to content

Commit eb73d9a

Browse files
committed
Drop KVStore generic from Node
.. switching to `dyn KVStore + Send + Sync`
1 parent a014d87 commit eb73d9a

File tree

10 files changed

+121
-126
lines changed

10 files changed

+121
-126
lines changed

src/builder.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use crate::peer_store::PeerStore;
99
use crate::sweep::OutputSweeper;
1010
use crate::tx_broadcaster::TransactionBroadcaster;
1111
use crate::types::{
12-
ChainMonitor, ChannelManager, FakeMessageRouter, GossipSync, KeysManager, NetworkGraph,
13-
OnionMessenger, PeerManager,
12+
ChainMonitor, ChannelManager, DynStore, FakeMessageRouter, GossipSync, KeysManager,
13+
NetworkGraph, OnionMessenger, PeerManager,
1414
};
1515
use crate::wallet::Wallet;
1616
use crate::LogLevel;
@@ -31,7 +31,7 @@ use lightning::sign::EntropySource;
3131

3232
use lightning::util::config::UserConfig;
3333
use lightning::util::persist::{
34-
read_channel_monitors, KVStore, CHANNEL_MANAGER_PERSISTENCE_KEY,
34+
read_channel_monitors, CHANNEL_MANAGER_PERSISTENCE_KEY,
3535
CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE, CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE,
3636
};
3737
use lightning::util::ser::ReadableArgs;
@@ -96,12 +96,18 @@ pub enum BuildError {
9696
/// The given listening addresses are invalid, e.g. too many were passed.
9797
InvalidListeningAddresses,
9898
/// We failed to read data from the [`KVStore`].
99+
///
100+
/// [`KVStore`]: lightning::util::persist::KVStore
99101
ReadFailed,
100102
/// We failed to write data to the [`KVStore`].
103+
///
104+
/// [`KVStore`]: lightning::util::persist::KVStore
101105
WriteFailed,
102106
/// We failed to access the given `storage_dir_path`.
103107
StoragePathAccessFailed,
104108
/// We failed to setup our [`KVStore`].
109+
///
110+
/// [`KVStore`]: lightning::util::persist::KVStore
105111
KVStoreSetupFailed,
106112
/// We failed to setup the onchain wallet.
107113
WalletSetupFailed,
@@ -256,7 +262,7 @@ impl NodeBuilder {
256262

257263
/// Builds a [`Node`] instance with a [`SqliteStore`] backend and according to the options
258264
/// previously configured.
259-
pub fn build(&self) -> Result<Node<SqliteStore>, BuildError> {
265+
pub fn build(&self) -> Result<Node, BuildError> {
260266
let storage_dir_path = self.config.storage_dir_path.clone();
261267
fs::create_dir_all(storage_dir_path.clone())
262268
.map_err(|_| BuildError::StoragePathAccessFailed)?;
@@ -273,7 +279,7 @@ impl NodeBuilder {
273279

274280
/// Builds a [`Node`] instance with a [`FilesystemStore`] backend and according to the options
275281
/// previously configured.
276-
pub fn build_with_fs_store(&self) -> Result<Node<FilesystemStore>, BuildError> {
282+
pub fn build_with_fs_store(&self) -> Result<Node, BuildError> {
277283
let mut storage_dir_path: PathBuf = self.config.storage_dir_path.clone().into();
278284
storage_dir_path.push("fs_store");
279285

@@ -286,9 +292,7 @@ impl NodeBuilder {
286292
/// Builds a [`Node`] instance with a [`VssStore`] backend and according to the options
287293
/// previously configured.
288294
#[cfg(any(vss, vss_test))]
289-
pub fn build_with_vss_store(
290-
&self, url: String, store_id: String,
291-
) -> Result<Node<VssStore>, BuildError> {
295+
pub fn build_with_vss_store(&self, url: String, store_id: String) -> Result<Node, BuildError> {
292296
let logger = setup_logger(&self.config)?;
293297

294298
let seed_bytes = seed_bytes_from_config(
@@ -325,9 +329,7 @@ impl NodeBuilder {
325329
}
326330

327331
/// Builds a [`Node`] instance according to the options previously configured.
328-
pub fn build_with_store<K: KVStore + Sync + Send + 'static>(
329-
&self, kv_store: Arc<K>,
330-
) -> Result<Node<K>, BuildError> {
332+
pub fn build_with_store(&self, kv_store: Arc<DynStore>) -> Result<Node, BuildError> {
331333
let logger = setup_logger(&self.config)?;
332334
let seed_bytes = seed_bytes_from_config(
333335
&self.config,
@@ -442,30 +444,28 @@ impl ArcedNodeBuilder {
442444

443445
/// Builds a [`Node`] instance with a [`SqliteStore`] backend and according to the options
444446
/// previously configured.
445-
pub fn build(&self) -> Result<Arc<Node<SqliteStore>>, BuildError> {
447+
pub fn build(&self) -> Result<Arc<Node>, BuildError> {
446448
self.inner.read().unwrap().build().map(Arc::new)
447449
}
448450

449451
/// Builds a [`Node`] instance with a [`FilesystemStore`] backend and according to the options
450452
/// previously configured.
451-
pub fn build_with_fs_store(&self) -> Result<Arc<Node<FilesystemStore>>, BuildError> {
453+
pub fn build_with_fs_store(&self) -> Result<Arc<Node>, BuildError> {
452454
self.inner.read().unwrap().build_with_fs_store().map(Arc::new)
453455
}
454456

455457
/// Builds a [`Node`] instance according to the options previously configured.
456-
pub fn build_with_store<K: KVStore + Sync + Send + 'static>(
457-
&self, kv_store: Arc<K>,
458-
) -> Result<Arc<Node<K>>, BuildError> {
458+
pub fn build_with_store(&self, kv_store: Arc<DynStore>) -> Result<Arc<Node>, BuildError> {
459459
self.inner.read().unwrap().build_with_store(kv_store).map(Arc::new)
460460
}
461461
}
462462

463463
/// Builds a [`Node`] instance according to the options previously configured.
464-
fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
464+
fn build_with_store_internal(
465465
config: Arc<Config>, chain_data_source_config: Option<&ChainDataSourceConfig>,
466466
gossip_source_config: Option<&GossipSourceConfig>, seed_bytes: [u8; 64],
467-
logger: Arc<FilesystemLogger>, kv_store: Arc<K>,
468-
) -> Result<Node<K>, BuildError> {
467+
logger: Arc<FilesystemLogger>, kv_store: Arc<DynStore>,
468+
) -> Result<Node, BuildError> {
469469
// Initialize the on-chain wallet and chain access
470470
let xprv = bitcoin::bip32::ExtendedPrivKey::new_master(config.network.into(), &seed_bytes)
471471
.map_err(|e| {
@@ -545,7 +545,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
545545
));
546546

547547
// Initialize the ChainMonitor
548-
let chain_monitor: Arc<ChainMonitor<K>> = Arc::new(chainmonitor::ChainMonitor::new(
548+
let chain_monitor: Arc<ChainMonitor> = Arc::new(chainmonitor::ChainMonitor::new(
549549
Some(Arc::clone(&tx_sync)),
550550
Arc::clone(&tx_broadcaster),
551551
Arc::clone(&logger),
@@ -658,7 +658,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
658658
channel_monitor_references,
659659
);
660660
let (_hash, channel_manager) =
661-
<(BlockHash, ChannelManager<K>)>::read(&mut reader, read_args).map_err(|e| {
661+
<(BlockHash, ChannelManager)>::read(&mut reader, read_args).map_err(|e| {
662662
log_error!(logger, "Failed to read channel manager from KVStore: {}", e);
663663
BuildError::ReadFailed
664664
})?;

src/event.rs

Lines changed: 19 additions & 21 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 bitcoin::blockdata::locktime::absolute::LockTime;
@@ -121,21 +120,21 @@ impl_writeable_tlv_based_enum!(Event,
121120
};
122121
);
123122

124-
pub struct EventQueue<K: KVStore + Sync + Send, L: Deref>
123+
pub struct EventQueue<L: Deref>
125124
where
126125
L::Target: Logger,
127126
{
128127
queue: Mutex<VecDeque<Event>>,
129128
notifier: Condvar,
130-
kv_store: Arc<K>,
129+
kv_store: Arc<DynStore>,
131130
logger: L,
132131
}
133132

134-
impl<K: KVStore + Sync + Send, L: Deref> EventQueue<K, L>
133+
impl<L: Deref> EventQueue<L>
135134
where
136135
L::Target: Logger,
137136
{
138-
pub(crate) fn new(kv_store: Arc<K>, logger: L) -> Self {
137+
pub(crate) fn new(kv_store: Arc<DynStore>, logger: L) -> Self {
139138
let queue: Mutex<VecDeque<Event>> = Mutex::new(VecDeque::new());
140139
let notifier = Condvar::new();
141140
Self { queue, notifier, kv_store, logger }
@@ -197,13 +196,13 @@ where
197196
}
198197
}
199198

200-
impl<K: KVStore + Sync + Send, L: Deref> ReadableArgs<(Arc<K>, L)> for EventQueue<K, L>
199+
impl<L: Deref> ReadableArgs<(Arc<DynStore>, L)> for EventQueue<L>
201200
where
202201
L::Target: Logger,
203202
{
204203
#[inline]
205204
fn read<R: lightning::io::Read>(
206-
reader: &mut R, args: (Arc<K>, L),
205+
reader: &mut R, args: (Arc<DynStore>, L),
207206
) -> Result<Self, lightning::ln::msgs::DecodeError> {
208207
let (kv_store, logger) = args;
209208
let read_queue: EventQueueDeserWrapper = Readable::read(reader)?;
@@ -240,32 +239,31 @@ impl Writeable for EventQueueSerWrapper<'_> {
240239
}
241240
}
242241

243-
pub(crate) struct EventHandler<K: KVStore + Sync + Send, L: Deref>
242+
pub(crate) struct EventHandler<L: Deref>
244243
where
245244
L::Target: Logger,
246245
{
247-
event_queue: Arc<EventQueue<K, L>>,
246+
event_queue: Arc<EventQueue<L>>,
248247
wallet: Arc<Wallet>,
249-
channel_manager: Arc<ChannelManager<K>>,
250-
output_sweeper: Arc<Sweeper<K>>,
248+
channel_manager: Arc<ChannelManager>,
249+
output_sweeper: Arc<Sweeper>,
251250
network_graph: Arc<NetworkGraph>,
252-
payment_store: Arc<PaymentStore<K, L>>,
253-
peer_store: Arc<PeerStore<K, L>>,
251+
payment_store: Arc<PaymentStore<L>>,
252+
peer_store: Arc<PeerStore<L>>,
254253
runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>,
255254
logger: L,
256255
config: Arc<Config>,
257256
}
258257

259-
impl<K: KVStore + Sync + Send + 'static, L: Deref> EventHandler<K, L>
258+
impl<L: Deref> EventHandler<L>
260259
where
261260
L::Target: Logger,
262261
{
263262
pub fn new(
264-
event_queue: Arc<EventQueue<K, L>>, wallet: Arc<Wallet>,
265-
channel_manager: Arc<ChannelManager<K>>, output_sweeper: Arc<Sweeper<K>>,
266-
network_graph: Arc<NetworkGraph>, payment_store: Arc<PaymentStore<K, L>>,
267-
peer_store: Arc<PeerStore<K, L>>, runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>,
268-
logger: L, config: Arc<Config>,
263+
event_queue: Arc<EventQueue<L>>, wallet: Arc<Wallet>, channel_manager: Arc<ChannelManager>,
264+
output_sweeper: Arc<Sweeper>, network_graph: Arc<NetworkGraph>,
265+
payment_store: Arc<PaymentStore<L>>, peer_store: Arc<PeerStore<L>>,
266+
runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>, logger: L, config: Arc<Config>,
269267
) -> Self {
270268
Self {
271269
event_queue,
@@ -801,7 +799,7 @@ mod tests {
801799

802800
#[test]
803801
fn event_queue_persistence() {
804-
let store = Arc::new(TestStore::new(false));
802+
let store: Arc<DynStore> = Arc::new(TestStore::new(false));
805803
let logger = Arc::new(TestLogger::new());
806804
let event_queue = EventQueue::new(Arc::clone(&store), Arc::clone(&logger));
807805
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)