Skip to content

Commit 77a7607

Browse files
authored
refactor: re-export BuildHasherDefault<AHasher> as DefaultHasher (#1013)
1 parent aca8531 commit 77a7607

File tree

7 files changed

+41
-50
lines changed

7 files changed

+41
-50
lines changed

foyer-common/src/code.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use std::hash::{BuildHasher, Hash};
15+
use std::hash::{BuildHasher, BuildHasherDefault, Hash};
1616

1717
/// Key trait for the in-memory cache.
1818
pub trait Key: Send + Sync + 'static + Hash + Eq {}
@@ -26,6 +26,11 @@ impl<T: Send + Sync + 'static> Value for T {}
2626
pub trait HashBuilder: BuildHasher + Send + Sync + 'static {}
2727
impl<T> HashBuilder for T where T: BuildHasher + Send + Sync + 'static {}
2828

29+
/// The default hasher for foyer.
30+
///
31+
/// It is guaranteed that the hash results of the same key are the same across different runs.
32+
pub type DefaultHasher = BuildHasherDefault<ahash::AHasher>;
33+
2934
/// Code error.
3035
#[derive(Debug, thiserror::Error)]
3136
pub enum CodeError {

foyer-memory/src/cache.rs

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,11 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use std::{
16-
borrow::Cow,
17-
fmt::Debug,
18-
future::Future,
19-
hash::{BuildHasherDefault, Hash},
20-
ops::Deref,
21-
sync::Arc,
22-
};
15+
use std::{borrow::Cow, fmt::Debug, future::Future, hash::Hash, ops::Deref, sync::Arc};
2316

24-
use ahash::AHasher;
2517
use equivalent::Equivalent;
2618
use foyer_common::{
27-
code::{HashBuilder, Key, Value},
19+
code::{DefaultHasher, HashBuilder, Key, Value},
2820
event::EventListener,
2921
future::Diversion,
3022
metrics::Metrics,
@@ -115,26 +107,25 @@ impl Properties for CacheProperties {
115107
}
116108
}
117109

118-
pub type FifoCache<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawCache<Fifo<K, V, P>, S>;
119-
pub type FifoCacheEntry<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawCacheEntry<Fifo<K, V, P>, S>;
120-
pub type FifoFetch<K, V, ER, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawFetch<Fifo<K, V, P>, ER, S>;
110+
pub type FifoCache<K, V, S = DefaultHasher, P = CacheProperties> = RawCache<Fifo<K, V, P>, S>;
111+
pub type FifoCacheEntry<K, V, S = DefaultHasher, P = CacheProperties> = RawCacheEntry<Fifo<K, V, P>, S>;
112+
pub type FifoFetch<K, V, ER, S = DefaultHasher, P = CacheProperties> = RawFetch<Fifo<K, V, P>, ER, S>;
121113

122-
pub type S3FifoCache<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawCache<S3Fifo<K, V, P>, S>;
123-
pub type S3FifoCacheEntry<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> =
124-
RawCacheEntry<S3Fifo<K, V, P>, S>;
125-
pub type S3FifoFetch<K, V, ER, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawFetch<S3Fifo<K, V, P>, ER, S>;
114+
pub type S3FifoCache<K, V, S = DefaultHasher, P = CacheProperties> = RawCache<S3Fifo<K, V, P>, S>;
115+
pub type S3FifoCacheEntry<K, V, S = DefaultHasher, P = CacheProperties> = RawCacheEntry<S3Fifo<K, V, P>, S>;
116+
pub type S3FifoFetch<K, V, ER, S = DefaultHasher, P = CacheProperties> = RawFetch<S3Fifo<K, V, P>, ER, S>;
126117

127-
pub type LruCache<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawCache<Lru<K, V, P>, S>;
128-
pub type LruCacheEntry<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawCacheEntry<Lru<K, V, P>, S>;
129-
pub type LruFetch<K, V, ER, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawFetch<Lru<K, V, P>, ER, S>;
118+
pub type LruCache<K, V, S = DefaultHasher, P = CacheProperties> = RawCache<Lru<K, V, P>, S>;
119+
pub type LruCacheEntry<K, V, S = DefaultHasher, P = CacheProperties> = RawCacheEntry<Lru<K, V, P>, S>;
120+
pub type LruFetch<K, V, ER, S = DefaultHasher, P = CacheProperties> = RawFetch<Lru<K, V, P>, ER, S>;
130121

131-
pub type LfuCache<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawCache<Lfu<K, V, P>, S>;
132-
pub type LfuCacheEntry<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawCacheEntry<Lfu<K, V, P>, S>;
133-
pub type LfuFetch<K, V, ER, S = BuildHasherDefault<AHasher>, P = CacheProperties> = RawFetch<Lfu<K, V, P>, ER, S>;
122+
pub type LfuCache<K, V, S = DefaultHasher, P = CacheProperties> = RawCache<Lfu<K, V, P>, S>;
123+
pub type LfuCacheEntry<K, V, S = DefaultHasher, P = CacheProperties> = RawCacheEntry<Lfu<K, V, P>, S>;
124+
pub type LfuFetch<K, V, ER, S = DefaultHasher, P = CacheProperties> = RawFetch<Lfu<K, V, P>, ER, S>;
134125

135126
/// A cached entry holder of the in-memory cache.
136127
#[derive(Debug)]
137-
pub enum CacheEntry<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties>
128+
pub enum CacheEntry<K, V, S = DefaultHasher, P = CacheProperties>
138129
where
139130
K: Key,
140131
V: Value,
@@ -382,7 +373,7 @@ where
382373
metrics: Option<Arc<Metrics>>,
383374
}
384375

385-
impl<K, V> CacheBuilder<K, V, BuildHasherDefault<AHasher>>
376+
impl<K, V> CacheBuilder<K, V, DefaultHasher>
386377
where
387378
K: Key,
388379
V: Value,
@@ -543,7 +534,7 @@ where
543534
}
544535

545536
/// In-memory cache with plug-and-play algorithms.
546-
pub enum Cache<K, V, S = BuildHasherDefault<AHasher>, P = CacheProperties>
537+
pub enum Cache<K, V, S = DefaultHasher, P = CacheProperties>
547538
where
548539
K: Key,
549540
V: Value,
@@ -594,13 +585,13 @@ where
594585
}
595586
}
596587

597-
impl<K, V> Cache<K, V, BuildHasherDefault<AHasher>, CacheProperties>
588+
impl<K, V> Cache<K, V, DefaultHasher, CacheProperties>
598589
where
599590
K: Key,
600591
V: Value,
601592
{
602593
/// Create a new in-memory cache builder with capacity.
603-
pub fn builder(capacity: usize) -> CacheBuilder<K, V, BuildHasherDefault<AHasher>> {
594+
pub fn builder(capacity: usize) -> CacheBuilder<K, V, DefaultHasher> {
604595
CacheBuilder::new(capacity)
605596
}
606597
}
@@ -806,7 +797,7 @@ where
806797

807798
/// A future that is used to get entry value from the remote storage for the in-memory cache.
808799
#[pin_project(project = FetchProj)]
809-
pub enum Fetch<K, V, ER, S = BuildHasherDefault<AHasher>, P = CacheProperties>
800+
pub enum Fetch<K, V, ER, S = DefaultHasher, P = CacheProperties>
810801
where
811802
K: Key,
812803
V: Value,

foyer/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ features = ["serde", "tracing", "nightly", "deadlock", "strict_assertions"]
1616
rustdoc-args = ["--cfg", "docsrs"]
1717

1818
[dependencies]
19-
ahash = { workspace = true }
2019
anyhow = { workspace = true }
2120
equivalent = { workspace = true }
2221
fastrace = { workspace = true, optional = true }

foyer/src/hybrid/builder.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,12 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use std::{borrow::Cow, fmt::Debug, hash::BuildHasherDefault, sync::Arc};
15+
use std::{borrow::Cow, fmt::Debug, sync::Arc};
1616

17-
use ahash::AHasher;
1817
#[cfg(feature = "tracing")]
1918
use foyer_common::tracing::TracingOptions;
2019
use foyer_common::{
21-
code::{HashBuilder, StorageKey, StorageValue},
20+
code::{DefaultHasher, HashBuilder, StorageKey, StorageValue},
2221
event::EventListener,
2322
metrics::Metrics,
2423
};
@@ -110,7 +109,7 @@ impl<K, V> HybridCacheBuilder<K, V> {
110109
}
111110

112111
/// Continue to modify the in-memory cache configurations.
113-
pub fn memory(self, capacity: usize) -> HybridCacheBuilderPhaseMemory<K, V, BuildHasherDefault<AHasher>>
112+
pub fn memory(self, capacity: usize) -> HybridCacheBuilderPhaseMemory<K, V, DefaultHasher>
114113
where
115114
K: StorageKey,
116115
V: StorageValue,

foyer/src/hybrid/cache.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,21 @@
1515
use std::{
1616
fmt::Debug,
1717
future::Future,
18-
hash::{BuildHasherDefault, Hash},
18+
hash::Hash,
1919
ops::Deref,
2020
pin::Pin,
2121
sync::Arc,
2222
task::{ready, Context, Poll},
2323
time::Instant,
2424
};
2525

26-
use ahash::AHasher;
2726
use equivalent::Equivalent;
2827
#[cfg(feature = "tracing")]
2928
use fastrace::prelude::*;
3029
#[cfg(feature = "tracing")]
3130
use foyer_common::tracing::{InRootSpan, TracingConfig, TracingOptions};
3231
use foyer_common::{
33-
code::{HashBuilder, StorageKey, StorageValue},
32+
code::{DefaultHasher, HashBuilder, StorageKey, StorageValue},
3433
future::Diversion,
3534
metrics::Metrics,
3635
properties::{Hint, Location, Properties, Source},
@@ -262,7 +261,7 @@ where
262261
}
263262

264263
/// A cached entry holder of the hybrid cache.
265-
pub type HybridCacheEntry<K, V, S = BuildHasherDefault<AHasher>> = CacheEntry<K, V, S, HybridCacheProperties>;
264+
pub type HybridCacheEntry<K, V, S = DefaultHasher> = CacheEntry<K, V, S, HybridCacheProperties>;
266265

267266
#[derive(Debug)]
268267
pub struct HybridCacheOptions {
@@ -296,7 +295,7 @@ impl Default for HybridCacheOptions {
296295
/// ```
297296
///
298297
/// So, `storage` must not hold the reference of `memory`.
299-
pub struct HybridCache<K, V, S = BuildHasherDefault<AHasher>>
298+
pub struct HybridCache<K, V, S = DefaultHasher>
300299
where
301300
K: StorageKey,
302301
V: StorageValue,
@@ -353,7 +352,7 @@ where
353352
}
354353
}
355354

356-
impl<K, V> HybridCache<K, V, BuildHasherDefault<AHasher>>
355+
impl<K, V> HybridCache<K, V, DefaultHasher>
357356
where
358357
K: StorageKey,
359358
V: StorageValue,
@@ -729,15 +728,15 @@ impl From<oneshot::error::RecvError> for ObtainFetchError {
729728

730729
/// The future generated by [`HybridCache::fetch`].
731730
#[cfg(feature = "tracing")]
732-
pub type HybridFetch<K, V, S = BuildHasherDefault<AHasher>> = InRootSpan<HybridFetchInner<K, V, S>>;
731+
pub type HybridFetch<K, V, S = DefaultHasher> = InRootSpan<HybridFetchInner<K, V, S>>;
733732

734733
/// The future generated by [`HybridCache::fetch`].
735734
#[cfg(not(feature = "tracing"))]
736-
pub type HybridFetch<K, V, S = BuildHasherDefault<AHasher>> = HybridFetchInner<K, V, S>;
735+
pub type HybridFetch<K, V, S = DefaultHasher> = HybridFetchInner<K, V, S>;
737736

738737
/// A future that is used to get entry value from the remote storage for the hybrid cache.
739738
#[pin_project]
740-
pub struct HybridFetchInner<K, V, S = BuildHasherDefault<AHasher>>
739+
pub struct HybridFetchInner<K, V, S = DefaultHasher>
741740
where
742741
K: StorageKey,
743742
V: StorageValue,

foyer/src/hybrid/writer.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,16 @@
1414

1515
use std::{
1616
fmt::Debug,
17-
hash::BuildHasherDefault,
1817
time::{Duration, Instant},
1918
};
2019

21-
use ahash::AHasher;
22-
use foyer_common::code::{HashBuilder, StorageKey, StorageValue};
20+
use foyer_common::code::{DefaultHasher, HashBuilder, StorageKey, StorageValue};
2321
use foyer_storage::Pick;
2422

2523
use crate::{HybridCache, HybridCacheEntry, HybridCachePolicy, HybridCacheProperties};
2624

2725
/// Writer for hybrid cache to support more flexible write APIs.
28-
pub struct HybridCacheWriter<K, V, S = BuildHasherDefault<AHasher>>
26+
pub struct HybridCacheWriter<K, V, S = DefaultHasher>
2927
where
3028
K: StorageKey,
3129
V: StorageValue,
@@ -62,7 +60,7 @@ where
6260
}
6361

6462
/// Writer for disk cache of a hybrid cache to support more flexible write APIs.
65-
pub struct HybridCacheStorageWriter<K, V, S = BuildHasherDefault<AHasher>>
63+
pub struct HybridCacheStorageWriter<K, V, S = DefaultHasher>
6664
where
6765
K: StorageKey,
6866
V: StorageValue,

foyer/src/prelude.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub use crate::common::tracing::TracingOptions;
1717
pub use crate::{
1818
common::{
1919
buf::{BufExt, BufMutExt},
20-
code::{Code, CodeError, CodeResult, Key, StorageKey, StorageValue, Value},
20+
code::{Code, CodeError, CodeResult, DefaultHasher, Key, StorageKey, StorageValue, Value},
2121
event::{Event, EventListener},
2222
properties::{Age, Hint, Location, Source},
2323
utils::{option::OptionExt, range::RangeBoundsExt, scope::Scope},

0 commit comments

Comments
 (0)