diff --git a/Cargo.lock b/Cargo.lock index d4dac07e8f006a..a17967f0ca5ffc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7271,6 +7271,7 @@ dependencies = [ "num_enum", "rand 0.8.5", "rayon", + "solana-bucket-map", "solana-clock", "solana-logger", "solana-measure", diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 55bea8fafbbaec..3b58d658ed6bc0 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -14,6 +14,9 @@ edition = { workspace = true } crate-type = ["lib"] name = "solana_bucket_map" +[features] +dev-context-only-utils = [] + [dependencies] bv = { workspace = true, features = ["serde"] } bytemuck = { workspace = true } @@ -30,6 +33,7 @@ tempfile = { workspace = true } [dev-dependencies] fs_extra = { workspace = true } rayon = { workspace = true } +solana-bucket-map = { path = ".", features = ["dev-context-only-utils"] } solana-logger = { workspace = true } solana-pubkey = { workspace = true, features = ["rand"] } diff --git a/bucket_map/src/bucket.rs b/bucket_map/src/bucket.rs index a635cf4cf053ef..48d52a2a392904 100644 --- a/bucket_map/src/bucket.rs +++ b/bucket_map/src/bucket.rs @@ -1,6 +1,7 @@ +#[cfg(feature = "dev-context-only-utils")] +use crate::bucket_item::BucketItem; use { crate::{ - bucket_item::BucketItem, bucket_map::BucketMapError, bucket_stats::BucketMapStats, bucket_storage::{ @@ -22,7 +23,6 @@ use { fs, hash::{Hash, Hasher}, num::NonZeroU64, - ops::RangeBounds, path::PathBuf, sync::{ atomic::{AtomicU64, AtomicUsize, Ordering}, @@ -191,10 +191,8 @@ impl<'b, T: Clone + Copy + PartialEq + std::fmt::Debug + 'static> Bucket { rv } - pub fn items_in_range(&self, range: &Option<&R>) -> Vec> - where - R: RangeBounds, - { + #[cfg(feature = "dev-context-only-utils")] + pub fn items(&self) -> Vec> { let mut result = Vec::with_capacity(self.index.count.load(Ordering::Relaxed) as usize); for i in 0..self.index.capacity() { let ii = i % self.index.capacity(); @@ -203,14 +201,12 @@ impl<'b, T: Clone + Copy + PartialEq + std::fmt::Debug + 'static> Bucket { } let ix = IndexEntryPlaceInBucket::new(ii); let key = ix.key(&self.index); - if range.map(|r| r.contains(key)).unwrap_or(true) { - let (v, ref_count) = ix.read_value(&self.index, &self.data); - result.push(BucketItem { - pubkey: *key, - ref_count, - slot_list: v.to_vec(), - }); - } + let (v, ref_count) = ix.read_value(&self.index, &self.data); + result.push(BucketItem { + pubkey: *key, + ref_count, + slot_list: v.to_vec(), + }); } result } diff --git a/bucket_map/src/bucket_api.rs b/bucket_map/src/bucket_api.rs index 47f3db3dc016bf..e6969e2cd3ea75 100644 --- a/bucket_map/src/bucket_api.rs +++ b/bucket_map/src/bucket_api.rs @@ -1,11 +1,12 @@ +#[cfg(feature = "dev-context-only-utils")] +use crate::bucket_item::BucketItem; use { crate::{ - bucket::Bucket, bucket_item::BucketItem, bucket_map::BucketMapError, - bucket_stats::BucketMapStats, restart::RestartableBucket, MaxSearch, RefCount, + bucket::Bucket, bucket_map::BucketMapError, bucket_stats::BucketMapStats, + restart::RestartableBucket, MaxSearch, RefCount, }, solana_pubkey::Pubkey, std::{ - ops::RangeBounds, path::PathBuf, sync::{ atomic::{AtomicU64, Ordering}, @@ -47,15 +48,13 @@ impl BucketApi { } /// Get the items for bucket - pub fn items_in_range(&self, range: &Option<&R>) -> Vec> - where - R: RangeBounds, - { + #[cfg(feature = "dev-context-only-utils")] + pub fn items(&self) -> Vec> { self.bucket .read() .unwrap() .as_ref() - .map(|bucket| bucket.items_in_range(range)) + .map(|bucket| bucket.items()) .unwrap_or_default() } diff --git a/bucket_map/src/bucket_item.rs b/bucket_map/src/bucket_item.rs index 7733f5aeee9413..cff2c98b60aca2 100644 --- a/bucket_map/src/bucket_item.rs +++ b/bucket_map/src/bucket_item.rs @@ -1,3 +1,4 @@ +#![cfg(feature = "dev-context-only-utils")] use {crate::RefCount, solana_pubkey::Pubkey}; #[derive(Debug, Default, Clone)] diff --git a/bucket_map/src/bucket_map.rs b/bucket_map/src/bucket_map.rs index f86ef6b089bd0f..e4f67f632d4fb4 100644 --- a/bucket_map/src/bucket_map.rs +++ b/bucket_map/src/bucket_map.rs @@ -446,10 +446,7 @@ mod tests { assert_eq!(total_entries, expected_count); let mut r = vec![]; for bin in 0..map.num_buckets() { - r.append( - &mut map.buckets[bin] - .items_in_range(&None::<&std::ops::RangeInclusive>), - ); + r.append(&mut map.buckets[bin].items()); } r })