Skip to content

Commit cc5a9c3

Browse files
authored
Merge pull request #3213 from autonomys/remove-cache-index-generic
Remove cache index generic
2 parents 4452df8 + d1d5600 commit cc5a9c3

File tree

9 files changed

+65
-134
lines changed

9 files changed

+65
-134
lines changed

crates/subspace-farmer/src/bin/subspace-farmer/commands/cluster/controller/caches.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ use std::future::{ready, Future};
1515
use std::pin::{pin, Pin};
1616
use std::sync::Arc;
1717
use std::time::{Duration, Instant};
18-
use subspace_farmer::cluster::cache::{
19-
ClusterCacheIdentifyBroadcast, ClusterCacheIndex, ClusterPieceCache,
20-
};
18+
use subspace_farmer::cluster::cache::{ClusterCacheIdentifyBroadcast, ClusterPieceCache};
2119
use subspace_farmer::cluster::controller::ClusterControllerCacheIdentifyBroadcast;
2220
use subspace_farmer::cluster::nats_client::NatsClient;
2321
use subspace_farmer::farm::{PieceCache, PieceCacheId};
@@ -88,7 +86,7 @@ impl KnownCaches {
8886
pub(super) async fn maintain_caches(
8987
cache_group: &str,
9088
nats_client: &NatsClient,
91-
farmer_cache: FarmerCache<ClusterCacheIndex>,
89+
farmer_cache: FarmerCache,
9290
) -> anyhow::Result<()> {
9391
let mut known_caches = KnownCaches::default();
9492

crates/subspace-farmer/src/bin/subspace-farmer/commands/farm.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,6 @@ const MAX_SPACE_PLEDGED_FOR_PLOT_CACHE_ON_WINDOWS: u64 = 7 * 1024 * 1024 * 1024
6969
const FARM_ERROR_PRINT_INTERVAL: Duration = Duration::from_secs(30);
7070
const PLOTTING_RETRY_INTERVAL: Duration = Duration::from_secs(5);
7171

72-
type CacheIndex = u8;
73-
7472
#[derive(Debug, Parser)]
7573
struct CpuPlottingOptions {
7674
/// How many sectors a farmer will download concurrently. Limits memory usage of
@@ -424,7 +422,7 @@ where
424422
let should_start_prometheus_server = !prometheus_listen_on.is_empty();
425423

426424
let (farmer_cache, farmer_cache_worker) =
427-
FarmerCache::<CacheIndex>::new(node_client.clone(), peer_id, Some(&mut registry));
425+
FarmerCache::new(node_client.clone(), peer_id, Some(&mut registry));
428426

429427
let node_client = CachingProxyNodeClient::new(node_client)
430428
.await

crates/subspace-farmer/src/bin/subspace-farmer/commands/shared/network.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ pub(in super::super) struct NetworkArgs {
7979
}
8080

8181
#[allow(clippy::too_many_arguments)]
82-
pub(in super::super) fn configure_network<FarmIndex, CacheIndex, NC>(
82+
pub(in super::super) fn configure_network<FarmIndex, NC>(
8383
protocol_prefix: String,
8484
base_path: &Path,
8585
keypair: Keypair,
@@ -96,15 +96,12 @@ pub(in super::super) fn configure_network<FarmIndex, CacheIndex, NC>(
9696
}: NetworkArgs,
9797
weak_plotted_pieces: Weak<AsyncRwLock<PlottedPieces<FarmIndex>>>,
9898
node_client: NC,
99-
farmer_cache: FarmerCache<CacheIndex>,
99+
farmer_cache: FarmerCache,
100100
prometheus_metrics_registry: Option<&mut Registry>,
101-
) -> Result<(Node, NodeRunner<FarmerCache<CacheIndex>>), anyhow::Error>
101+
) -> Result<(Node, NodeRunner<FarmerCache>), anyhow::Error>
102102
where
103103
FarmIndex: Hash + Eq + Copy + fmt::Debug + Send + Sync + 'static,
104104
usize: From<FarmIndex>,
105-
CacheIndex: Hash + Eq + Copy + fmt::Debug + fmt::Display + Send + Sync + 'static,
106-
usize: From<CacheIndex>,
107-
CacheIndex: TryFrom<usize>,
108105
NC: NodeClientExt + Clone,
109106
{
110107
let known_peers_registry = KnownPeersManager::new(KnownPeersManagerConfig {

crates/subspace-farmer/src/cluster/cache.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ use tracing::{debug, error, info, info_span, trace, warn, Instrument};
2727

2828
const MIN_CACHE_IDENTIFICATION_INTERVAL: Duration = Duration::from_secs(1);
2929

30-
/// Type alias for cache index used by cluster.
31-
pub type ClusterCacheIndex = u16;
32-
3330
/// Broadcast with identification details by caches
3431
#[derive(Debug, Clone, Encode, Decode)]
3532
pub struct ClusterCacheIdentifyBroadcast {

crates/subspace-farmer/src/cluster/controller.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
//! client implementations designed to work with cluster controller and a service function to drive
77
//! the backend part of the controller.
88
9-
use crate::cluster::cache::{
10-
ClusterCacheIndex, ClusterCacheReadPieceRequest, ClusterCacheReadPiecesRequest,
11-
};
9+
use crate::cluster::cache::{ClusterCacheReadPieceRequest, ClusterCacheReadPiecesRequest};
1210
use crate::cluster::nats_client::{
1311
GenericBroadcast, GenericNotification, GenericRequest, GenericStreamRequest, NatsClient,
1412
};
@@ -608,7 +606,7 @@ pub async fn controller_service<NC, PG>(
608606
nats_client: &NatsClient,
609607
node_client: &NC,
610608
piece_getter: &PG,
611-
farmer_cache: &FarmerCache<ClusterCacheIndex>,
609+
farmer_cache: &FarmerCache,
612610
instance: &str,
613611
primary_instance: bool,
614612
) -> anyhow::Result<()>
@@ -906,7 +904,7 @@ where
906904

907905
async fn find_piece_responder(
908906
nats_client: &NatsClient,
909-
farmer_cache: &FarmerCache<ClusterCacheIndex>,
907+
farmer_cache: &FarmerCache,
910908
) -> anyhow::Result<()> {
911909
nats_client
912910
.request_responder(
@@ -921,7 +919,7 @@ async fn find_piece_responder(
921919

922920
async fn find_pieces_responder(
923921
nats_client: &NatsClient,
924-
farmer_cache: &FarmerCache<ClusterCacheIndex>,
922+
farmer_cache: &FarmerCache,
925923
) -> anyhow::Result<()> {
926924
nats_client
927925
.stream_request_responder(

crates/subspace-farmer/src/farmer_cache.rs

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ use rayon::prelude::*;
2525
use std::collections::hash_map::Entry;
2626
use std::collections::{HashMap, HashSet};
2727
use std::future::join;
28-
use std::hash::Hash;
2928
use std::sync::atomic::{AtomicUsize, Ordering};
3029
use std::sync::Arc;
3130
use std::task::Poll;
@@ -55,23 +54,20 @@ const IS_PIECE_MAYBE_STORED_TIMEOUT: Duration = Duration::from_millis(100);
5554

5655
type HandlerFn<A> = Arc<dyn Fn(&A) + Send + Sync + 'static>;
5756
type Handler<A> = Bag<HandlerFn<A>, A>;
57+
type CacheIndex = u8;
5858

5959
#[derive(Default, Debug)]
6060
struct Handlers {
6161
progress: Handler<f32>,
6262
}
6363

6464
#[derive(Debug, Clone, Copy)]
65-
struct FarmerCacheOffset<CacheIndex> {
65+
struct FarmerCacheOffset {
6666
cache_index: CacheIndex,
6767
piece_offset: PieceCacheOffset,
6868
}
6969

70-
impl<CacheIndex> FarmerCacheOffset<CacheIndex>
71-
where
72-
CacheIndex: Hash + Eq + Copy + fmt::Debug + fmt::Display + Send + Sync + 'static,
73-
CacheIndex: TryFrom<usize>,
74-
{
70+
impl FarmerCacheOffset {
7571
fn new(cache_index: CacheIndex, piece_offset: PieceCacheOffset) -> Self {
7672
Self {
7773
cache_index,
@@ -121,9 +117,9 @@ impl CacheBackend {
121117
}
122118

123119
#[derive(Debug)]
124-
struct CacheState<CacheIndex> {
125-
cache_stored_pieces: HashMap<KeyWithDistance, FarmerCacheOffset<CacheIndex>>,
126-
cache_free_offsets: Vec<FarmerCacheOffset<CacheIndex>>,
120+
struct CacheState {
121+
cache_stored_pieces: HashMap<KeyWithDistance, FarmerCacheOffset>,
122+
cache_free_offsets: Vec<FarmerCacheOffset>,
127123
backend: CacheBackend,
128124
}
129125

@@ -140,25 +136,22 @@ enum WorkerCommand {
140136
/// Farmer cache worker used to drive the farmer cache backend
141137
#[derive(Debug)]
142138
#[must_use = "Farmer cache will not work unless its worker is running"]
143-
pub struct FarmerCacheWorker<NC, CacheIndex>
139+
pub struct FarmerCacheWorker<NC>
144140
where
145141
NC: fmt::Debug,
146142
{
147143
peer_id: PeerId,
148144
node_client: NC,
149-
piece_caches: Arc<AsyncRwLock<PieceCachesState<CacheIndex>>>,
145+
piece_caches: Arc<AsyncRwLock<PieceCachesState>>,
150146
plot_caches: Arc<PlotCaches>,
151147
handlers: Arc<Handlers>,
152148
worker_receiver: Option<mpsc::Receiver<WorkerCommand>>,
153149
metrics: Option<Arc<FarmerCacheMetrics>>,
154150
}
155151

156-
impl<NC, CacheIndex> FarmerCacheWorker<NC, CacheIndex>
152+
impl<NC> FarmerCacheWorker<NC>
157153
where
158154
NC: NodeClient,
159-
CacheIndex: Hash + Eq + Copy + fmt::Debug + fmt::Display + Send + Sync + 'static,
160-
usize: From<CacheIndex>,
161-
CacheIndex: TryFrom<usize>,
162155
{
163156
/// Run the cache worker with provided piece getter.
164157
///
@@ -1020,10 +1013,10 @@ impl PlotCaches {
10201013
/// where piece cache is not enough to store all the pieces on the network, while there is a lot of
10211014
/// space in the plot that is not used by sectors yet and can be leverage as extra caching space.
10221015
#[derive(Debug, Clone)]
1023-
pub struct FarmerCache<CacheIndex> {
1016+
pub struct FarmerCache {
10241017
peer_id: PeerId,
10251018
/// Individual dedicated piece caches
1026-
piece_caches: Arc<AsyncRwLock<PieceCachesState<CacheIndex>>>,
1019+
piece_caches: Arc<AsyncRwLock<PieceCachesState>>,
10271020
/// Additional piece caches
10281021
plot_caches: Arc<PlotCaches>,
10291022
handlers: Arc<Handlers>,
@@ -1032,12 +1025,7 @@ pub struct FarmerCache<CacheIndex> {
10321025
metrics: Option<Arc<FarmerCacheMetrics>>,
10331026
}
10341027

1035-
impl<CacheIndex> FarmerCache<CacheIndex>
1036-
where
1037-
CacheIndex: Hash + Eq + Copy + fmt::Debug + fmt::Display + Send + Sync + 'static,
1038-
usize: From<CacheIndex>,
1039-
CacheIndex: TryFrom<usize>,
1040-
{
1028+
impl FarmerCache {
10411029
/// Create new piece cache instance and corresponding worker.
10421030
///
10431031
/// NOTE: Returned future is async, but does blocking operations and should be running in
@@ -1046,7 +1034,7 @@ where
10461034
node_client: NC,
10471035
peer_id: PeerId,
10481036
registry: Option<&mut Registry>,
1049-
) -> (Self, FarmerCacheWorker<NC, CacheIndex>)
1037+
) -> (Self, FarmerCacheWorker<NC>)
10501038
where
10511039
NC: NodeClient,
10521040
{
@@ -1496,7 +1484,7 @@ where
14961484

14971485
fn find_piece_internal(
14981486
&self,
1499-
caches: &PieceCachesState<CacheIndex>,
1487+
caches: &PieceCachesState,
15001488
piece_index: PieceIndex,
15011489
) -> Option<(PieceCacheId, PieceCacheOffset)> {
15021490
let key = KeyWithDistance::new(self.peer_id, piece_index.to_multihash());
@@ -1562,12 +1550,7 @@ where
15621550
}
15631551
}
15641552

1565-
impl<CacheIndex> LocalRecordProvider for FarmerCache<CacheIndex>
1566-
where
1567-
CacheIndex: Hash + Eq + Copy + fmt::Debug + fmt::Display + Send + Sync + 'static,
1568-
usize: From<CacheIndex>,
1569-
CacheIndex: TryFrom<usize>,
1570-
{
1553+
impl LocalRecordProvider for FarmerCache {
15711554
fn record(&self, key: &RecordKey) -> Option<ProviderRecord> {
15721555
let distance_key = KeyWithDistance::new(self.peer_id, key.clone());
15731556
if self

crates/subspace-farmer/src/farmer_cache/piece_cache_state.rs

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,23 @@
1-
use crate::farmer_cache::{CacheBackend, FarmerCacheOffset};
1+
use crate::farmer_cache::{CacheBackend, CacheIndex, FarmerCacheOffset};
22
use std::collections::btree_map::Values;
33
use std::collections::{BTreeMap, HashMap, VecDeque};
4-
use std::fmt;
5-
use std::hash::Hash;
64
use subspace_core_primitives::pieces::PieceIndex;
75
use subspace_networking::libp2p::PeerId;
86
use subspace_networking::utils::multihash::ToMultihash;
97
use subspace_networking::KeyWithDistance;
108
use tracing::{debug, trace};
119

12-
#[derive(Debug, Clone)]
13-
pub(super) struct PieceCachesState<CacheIndex> {
14-
stored_pieces: BTreeMap<KeyWithDistance, FarmerCacheOffset<CacheIndex>>,
15-
dangling_free_offsets: VecDeque<FarmerCacheOffset<CacheIndex>>,
10+
#[derive(Debug, Default, Clone)]
11+
pub(super) struct PieceCachesState {
12+
stored_pieces: BTreeMap<KeyWithDistance, FarmerCacheOffset>,
13+
dangling_free_offsets: VecDeque<FarmerCacheOffset>,
1614
backends: Vec<CacheBackend>,
1715
}
1816

19-
impl<CacheIndex> PieceCachesState<CacheIndex>
20-
where
21-
CacheIndex: Hash + Eq + Copy + fmt::Debug + fmt::Display + Send + Sync + 'static,
22-
usize: From<CacheIndex>,
23-
CacheIndex: TryFrom<usize>,
24-
{
17+
impl PieceCachesState {
2518
pub(super) fn new(
26-
stored_pieces: BTreeMap<KeyWithDistance, FarmerCacheOffset<CacheIndex>>,
27-
dangling_free_offsets: VecDeque<FarmerCacheOffset<CacheIndex>>,
19+
stored_pieces: BTreeMap<KeyWithDistance, FarmerCacheOffset>,
20+
dangling_free_offsets: VecDeque<FarmerCacheOffset>,
2821
backends: Vec<CacheBackend>,
2922
) -> Self {
3023
Self {
@@ -39,7 +32,7 @@ where
3932
.fold(0usize, |acc, backend| acc + backend.total_capacity as usize)
4033
}
4134

42-
pub(super) fn pop_free_offset(&mut self) -> Option<FarmerCacheOffset<CacheIndex>> {
35+
pub(super) fn pop_free_offset(&mut self) -> Option<FarmerCacheOffset> {
4336
match self.dangling_free_offsets.pop_front() {
4437
Some(free_offset) => {
4538
debug!(?free_offset, "Popped dangling free offset");
@@ -71,10 +64,7 @@ where
7164
}
7265
}
7366

74-
pub(super) fn get_stored_piece(
75-
&self,
76-
key: &KeyWithDistance,
77-
) -> Option<&FarmerCacheOffset<CacheIndex>> {
67+
pub(super) fn get_stored_piece(&self, key: &KeyWithDistance) -> Option<&FarmerCacheOffset> {
7868
self.stored_pieces.get(key)
7969
}
8070

@@ -85,21 +75,19 @@ where
8575
pub(super) fn push_stored_piece(
8676
&mut self,
8777
key: KeyWithDistance,
88-
cache_offset: FarmerCacheOffset<CacheIndex>,
89-
) -> Option<FarmerCacheOffset<CacheIndex>> {
78+
cache_offset: FarmerCacheOffset,
79+
) -> Option<FarmerCacheOffset> {
9080
self.stored_pieces.insert(key, cache_offset)
9181
}
9282

93-
pub(super) fn stored_pieces_offsets(
94-
&self,
95-
) -> Values<'_, KeyWithDistance, FarmerCacheOffset<CacheIndex>> {
83+
pub(super) fn stored_pieces_offsets(&self) -> Values<'_, KeyWithDistance, FarmerCacheOffset> {
9684
self.stored_pieces.values()
9785
}
9886

9987
pub(super) fn remove_stored_piece(
10088
&mut self,
10189
key: &KeyWithDistance,
102-
) -> Option<FarmerCacheOffset<CacheIndex>> {
90+
) -> Option<FarmerCacheOffset> {
10391
self.stored_pieces.remove(key)
10492
}
10593

@@ -116,7 +104,7 @@ where
116104
})
117105
}
118106

119-
pub(super) fn push_dangling_free_offset(&mut self, offset: FarmerCacheOffset<CacheIndex>) {
107+
pub(super) fn push_dangling_free_offset(&mut self, offset: FarmerCacheOffset) {
120108
trace!(?offset, "Pushing dangling free offset");
121109
self.dangling_free_offsets.push_back(offset);
122110
}
@@ -132,8 +120,8 @@ where
132120
pub(super) fn reuse(
133121
self,
134122
) -> (
135-
BTreeMap<KeyWithDistance, FarmerCacheOffset<CacheIndex>>,
136-
VecDeque<FarmerCacheOffset<CacheIndex>>,
123+
BTreeMap<KeyWithDistance, FarmerCacheOffset>,
124+
VecDeque<FarmerCacheOffset>,
137125
) {
138126
let Self {
139127
mut stored_pieces,
@@ -149,7 +137,7 @@ where
149137
pub(super) fn should_replace(
150138
&mut self,
151139
key: &KeyWithDistance,
152-
) -> Option<(KeyWithDistance, FarmerCacheOffset<CacheIndex>)> {
140+
) -> Option<(KeyWithDistance, FarmerCacheOffset)> {
153141
if !self.should_include_key_internal(key) {
154142
return None;
155143
}
@@ -192,13 +180,3 @@ where
192180
}
193181
}
194182
}
195-
196-
impl<CacheIndex> Default for PieceCachesState<CacheIndex> {
197-
fn default() -> Self {
198-
Self {
199-
stored_pieces: BTreeMap::default(),
200-
dangling_free_offsets: VecDeque::default(),
201-
backends: Vec::default(),
202-
}
203-
}
204-
}

0 commit comments

Comments
 (0)