Skip to content

Commit b7ee2e4

Browse files
authored
refactor: cleanup storage usage in DashSpvClient constructor (#418)
1 parent adf73ed commit b7ee2e4

File tree

8 files changed

+42
-95
lines changed

8 files changed

+42
-95
lines changed

dash-spv/src/client/lifecycle.rs

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -60,39 +60,26 @@ impl<W: WalletInterface, N: NetworkManager, S: StorageManager> DashSpvClient<W,
6060
W,
6161
> = Managers::default();
6262

63-
let header_storage = storage.header_storage_ref().expect("Headers storage must exist");
6463
let checkpoints = match config.network {
6564
dashcore::Network::Dash => mainnet_checkpoints(),
6665
dashcore::Network::Testnet => testnet_checkpoints(),
6766
_ => Vec::new(),
6867
};
6968
let checkpoint_manager = Arc::new(CheckpointManager::new(checkpoints));
7069
managers.block_headers =
71-
Some(BlockHeadersManager::new(header_storage.clone(), checkpoint_manager));
70+
Some(BlockHeadersManager::new(storage.block_headers(), checkpoint_manager));
7271

7372
if config.enable_filters {
74-
let filter_headers_storage = storage
75-
.filter_header_storage_ref()
76-
.expect("Filters headers storage must exist if filters are enabled");
77-
let filters_storage = storage
78-
.filter_storage_ref()
79-
.expect("Filters storage must exist if filters are enabled");
80-
let blocks_storage = storage
81-
.block_storage_ref()
82-
.expect("Blocks storage must exist if filters are enabled");
83-
84-
managers.filter_headers = Some(FilterHeadersManager::new(
85-
header_storage.clone(),
86-
filter_headers_storage.clone(),
87-
));
73+
managers.filter_headers =
74+
Some(FilterHeadersManager::new(storage.block_headers(), storage.filter_headers()));
8875
managers.filters = Some(FiltersManager::new(
8976
wallet.clone(),
90-
header_storage.clone(),
91-
filter_headers_storage,
92-
filters_storage,
77+
storage.block_headers(),
78+
storage.filter_headers(),
79+
storage.filters(),
9380
));
9481
managers.blocks =
95-
Some(BlocksManager::new(wallet.clone(), header_storage.clone(), blocks_storage));
82+
Some(BlocksManager::new(wallet.clone(), storage.block_headers(), storage.blocks()));
9683
}
9784

9885
// Build masternode manager if enabled
@@ -101,12 +88,14 @@ impl<W: WalletInterface, N: NetworkManager, S: StorageManager> DashSpvClient<W,
10188
.clone()
10289
.expect("Masternode list engine must exist if masternodes are enabled");
10390
managers.masternode = Some(MasternodesManager::new(
104-
header_storage.clone(),
91+
storage.block_headers(),
10592
masternode_list_engine.clone(),
10693
config.network,
10794
));
108-
managers.chainlock =
109-
Some(ChainLockManager::new(header_storage.clone(), masternode_list_engine.clone()));
95+
managers.chainlock = Some(ChainLockManager::new(
96+
storage.block_headers(),
97+
masternode_list_engine.clone(),
98+
));
11099
managers.instantsend = Some(InstantSendManager::new(masternode_list_engine.clone()));
111100
}
112101

dash-spv/src/storage/mod.rs

Lines changed: 16 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -72,25 +72,17 @@ pub trait StorageManager:
7272
/// Stops all background tasks and persists the data.
7373
async fn shutdown(&mut self);
7474

75-
/// Get shared reference to header storage for parallel access.
76-
fn header_storage_ref(&self) -> Option<Arc<RwLock<PersistentBlockHeaderStorage>>> {
77-
None
78-
}
75+
/// Returns shared access to the block headers storage.
76+
fn block_headers(&self) -> Arc<RwLock<PersistentBlockHeaderStorage>>;
7977

80-
/// Get shared reference to filter header storage for parallel access.
81-
fn filter_header_storage_ref(&self) -> Option<Arc<RwLock<PersistentFilterHeaderStorage>>> {
82-
None
83-
}
78+
/// Returns shared access to the filter headers storage.
79+
fn filter_headers(&self) -> Arc<RwLock<PersistentFilterHeaderStorage>>;
8480

85-
/// Get shared reference to filter storage for parallel access.
86-
fn filter_storage_ref(&self) -> Option<Arc<RwLock<PersistentFilterStorage>>> {
87-
None
88-
}
81+
/// Returns shared access to the filters storage.
82+
fn filters(&self) -> Arc<RwLock<PersistentFilterStorage>>;
8983

90-
/// Get shared reference to block storage for parallel access.
91-
fn block_storage_ref(&self) -> Option<Arc<RwLock<PersistentBlockStorage>>> {
92-
None
93-
}
84+
/// Returns shared access to the block storage.
85+
fn blocks(&self) -> Arc<RwLock<PersistentBlockStorage>>;
9486
}
9587

9688
/// Disk-based storage manager with segmented files and async background saving.
@@ -203,41 +195,6 @@ impl DiskStorageManager {
203195
}
204196
}
205197

206-
/// Get a reference to the block headers storage.
207-
pub fn header_storage(&self) -> Arc<RwLock<PersistentBlockHeaderStorage>> {
208-
Arc::clone(&self.block_headers)
209-
}
210-
211-
/// Get a reference to the filter headers storage.
212-
pub fn filter_header_storage(&self) -> Arc<RwLock<PersistentFilterHeaderStorage>> {
213-
Arc::clone(&self.filter_headers)
214-
}
215-
216-
/// Get a reference to the filters storage.
217-
pub fn filter_storage(&self) -> Arc<RwLock<PersistentFilterStorage>> {
218-
Arc::clone(&self.filters)
219-
}
220-
221-
/// Get a reference to the block storage.
222-
pub fn block_storage(&self) -> Arc<RwLock<PersistentBlockStorage>> {
223-
Arc::clone(&self.blocks)
224-
}
225-
226-
/// Get a reference to the transaction storage.
227-
pub fn transaction_storage(&self) -> Arc<RwLock<PersistentTransactionStorage>> {
228-
Arc::clone(&self.transactions)
229-
}
230-
231-
/// Get a reference to the metadata storage.
232-
pub fn metadata_storage(&self) -> Arc<RwLock<PersistentMetadataStorage>> {
233-
Arc::clone(&self.metadata)
234-
}
235-
236-
/// Get a reference to the masternode state storage.
237-
pub fn masternode_storage(&self) -> Arc<RwLock<PersistentMasternodeStateStorage>> {
238-
Arc::clone(&self.masternodestate)
239-
}
240-
241198
async fn persist(&self) {
242199
let storage_path = &self.storage_path;
243200

@@ -302,20 +259,20 @@ impl StorageManager for DiskStorageManager {
302259
self.persist().await;
303260
}
304261

305-
fn header_storage_ref(&self) -> Option<Arc<RwLock<PersistentBlockHeaderStorage>>> {
306-
Some(Arc::clone(&self.block_headers))
262+
fn block_headers(&self) -> Arc<RwLock<PersistentBlockHeaderStorage>> {
263+
Arc::clone(&self.block_headers)
307264
}
308265

309-
fn filter_header_storage_ref(&self) -> Option<Arc<RwLock<PersistentFilterHeaderStorage>>> {
310-
Some(Arc::clone(&self.filter_headers))
266+
fn filter_headers(&self) -> Arc<RwLock<PersistentFilterHeaderStorage>> {
267+
Arc::clone(&self.filter_headers)
311268
}
312269

313-
fn filter_storage_ref(&self) -> Option<Arc<RwLock<PersistentFilterStorage>>> {
314-
Some(Arc::clone(&self.filters))
270+
fn filters(&self) -> Arc<RwLock<PersistentFilterStorage>> {
271+
Arc::clone(&self.filters)
315272
}
316273

317-
fn block_storage_ref(&self) -> Option<Arc<RwLock<PersistentBlockStorage>>> {
318-
Some(Arc::clone(&self.blocks))
274+
fn blocks(&self) -> Arc<RwLock<PersistentBlockStorage>> {
275+
Arc::clone(&self.blocks)
319276
}
320277
}
321278

dash-spv/src/sync/block_headers/manager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ mod tests {
217217
use super::*;
218218
use crate::chain::checkpoints::testnet_checkpoints;
219219
use crate::network::MessageType;
220-
use crate::storage::{DiskStorageManager, PersistentBlockHeaderStorage};
220+
use crate::storage::{DiskStorageManager, PersistentBlockHeaderStorage, StorageManager};
221221
use crate::sync::{ManagerIdentifier, SyncManagerProgress};
222222

223223
type TestBlockHeadersManager = BlockHeadersManager<PersistentBlockHeaderStorage>;
@@ -229,7 +229,7 @@ mod tests {
229229
async fn create_test_manager() -> TestBlockHeadersManager {
230230
let storage = DiskStorageManager::with_temp_dir().await.unwrap();
231231
let checkpoint_manager = create_test_checkpoint_manager();
232-
BlockHeadersManager::new(storage.header_storage(), checkpoint_manager)
232+
BlockHeadersManager::new(storage.block_headers(), checkpoint_manager)
233233
}
234234

235235
#[tokio::test]

dash-spv/src/sync/blocks/manager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ mod tests {
155155
use super::*;
156156
use crate::network::{MessageType, NetworkManager};
157157
use crate::storage::{
158-
DiskStorageManager, PersistentBlockHeaderStorage, PersistentBlockStorage,
158+
DiskStorageManager, PersistentBlockHeaderStorage, PersistentBlockStorage, StorageManager,
159159
};
160160
use crate::sync::{ManagerIdentifier, SyncEvent, SyncManagerProgress};
161161
use crate::test_utils::MockNetworkManager;
@@ -170,7 +170,7 @@ mod tests {
170170
async fn create_test_manager() -> TestBlocksManager {
171171
let storage = DiskStorageManager::with_temp_dir().await.unwrap();
172172
let wallet = Arc::new(RwLock::new(MockWallet::new()));
173-
BlocksManager::new(wallet, storage.header_storage(), storage.block_storage())
173+
BlocksManager::new(wallet, storage.block_headers(), storage.blocks())
174174
}
175175

176176
#[tokio::test]

dash-spv/src/sync/chainlock/manager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ impl<H: BlockHeaderStorage> std::fmt::Debug for ChainLockManager<H> {
191191
mod tests {
192192
use super::*;
193193
use crate::network::MessageType;
194-
use crate::storage::{DiskStorageManager, PersistentBlockHeaderStorage};
194+
use crate::storage::{DiskStorageManager, PersistentBlockHeaderStorage, StorageManager};
195195
use crate::sync::{ManagerIdentifier, SyncManager, SyncManagerProgress, SyncState};
196196
use crate::Network;
197197
use dashcore::bls_sig_utils::BLSSignature;
@@ -204,7 +204,7 @@ mod tests {
204204
let storage = DiskStorageManager::with_temp_dir().await.unwrap();
205205
let engine =
206206
Arc::new(RwLock::new(MasternodeListEngine::default_for_network(Network::Testnet)));
207-
ChainLockManager::new(storage.header_storage(), engine)
207+
ChainLockManager::new(storage.block_headers(), engine)
208208
}
209209

210210
fn create_test_chainlock(height: u32) -> ChainLock {

dash-spv/src/sync/filter_headers/manager.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ mod tests {
232232
use crate::network::MessageType;
233233
use crate::storage::{
234234
DiskStorageManager, PersistentBlockHeaderStorage, PersistentFilterHeaderStorage,
235+
StorageManager,
235236
};
236237
use crate::sync::{ManagerIdentifier, SyncManagerProgress};
237238

@@ -241,7 +242,7 @@ mod tests {
241242

242243
async fn create_test_manager() -> TestFilterHeadersManager {
243244
let storage = DiskStorageManager::with_temp_dir().await.unwrap();
244-
FilterHeadersManager::new(storage.header_storage(), storage.filter_header_storage())
245+
FilterHeadersManager::new(storage.block_headers(), storage.filter_headers())
245246
}
246247

247248
#[tokio::test]

dash-spv/src/sync/filters/manager.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ mod tests {
765765
use crate::network::MessageType;
766766
use crate::storage::{
767767
DiskStorageManager, PersistentBlockHeaderStorage, PersistentFilterHeaderStorage,
768-
PersistentFilterStorage,
768+
PersistentFilterStorage, StorageManager,
769769
};
770770
use crate::sync::{ManagerIdentifier, SyncManagerProgress};
771771
use key_wallet_manager::test_utils::MockWallet;
@@ -783,9 +783,9 @@ mod tests {
783783
let wallet = Arc::new(RwLock::new(MockWallet::new()));
784784
FiltersManager::new(
785785
wallet,
786-
storage.header_storage(),
787-
storage.filter_header_storage(),
788-
storage.filter_storage(),
786+
storage.block_headers(),
787+
storage.filter_headers(),
788+
storage.filters(),
789789
)
790790
}
791791

dash-spv/src/sync/masternodes/manager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ impl<H: BlockHeaderStorage> std::fmt::Debug for MasternodesManager<H> {
213213
mod tests {
214214
use super::*;
215215
use crate::network::MessageType;
216-
use crate::storage::{DiskStorageManager, PersistentBlockHeaderStorage};
216+
use crate::storage::{DiskStorageManager, PersistentBlockHeaderStorage, StorageManager};
217217
use crate::sync::sync_manager::SyncManager;
218218
use crate::sync::{ManagerIdentifier, SyncManagerProgress};
219219

@@ -224,7 +224,7 @@ mod tests {
224224
let engine = Arc::new(RwLock::new(MasternodeListEngine::default_for_network(
225225
dashcore::Network::Testnet,
226226
)));
227-
MasternodesManager::new(storage.header_storage(), engine, dashcore::Network::Testnet)
227+
MasternodesManager::new(storage.block_headers(), engine, dashcore::Network::Testnet)
228228
}
229229

230230
#[tokio::test]

0 commit comments

Comments
 (0)