-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: introduce new in-memory cache abstraction (intrusive version) #270
Conversation
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
TODO: add ut for Cache Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #270 +/- ##
==========================================
+ Coverage 74.22% 75.55% +1.33%
==========================================
Files 52 56 +4
Lines 5997 6861 +864
==========================================
+ Hits 4451 5184 +733
- Misses 1546 1677 +131 ☔ View full report in Codecov by Sentry. |
…sive Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
if let Some(old) = self.indexer.insert(ptr) { | ||
debug_assert!(old.as_ref().base().is_in_eviction()); | ||
self.eviction.remove(old); | ||
debug_assert!(!old.as_ref().base().is_in_eviction()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add one more debug_assert?
debug_assert!(!old.as_ref().base().is_in_indexer());
/// | ||
/// Return `Some(..)` if the handle is released, or `None` if the handle is still in use. | ||
unsafe fn remove(&mut self, hash: u64, key: &K) -> Option<(K, V)> { | ||
let ptr = self.indexer.remove(hash, key)?; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
debug_assert!(!ptr.as_ref().base().is_in_indexer());
foyer-memory/src/cache.rs
Outdated
// The handles in the indexer covers the handles in the eviction container. | ||
// So only the handles drained from the indexer need to be released. | ||
for ptr in ptrs { | ||
if let Some(entry) = self.try_release_handle(ptr) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
debug_assert!(!ptr.as_ref().base().is_in_indexer());
foyer-memory/src/cache.rs
Outdated
let base = evicted.as_ref().base(); | ||
debug_assert!(base.is_in_indexer()); | ||
debug_assert!(!base.is_in_eviction()); | ||
if let Some(entry) = self.try_release_handle(evicted) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Discussed offline: reinsert
in try_release_handle
may be triggered, which will cause surprise, because self.usage.load(Ordering::Relaxed) <= self.capacity
may not be held here.
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
…sive Signed-off-by: MrCroxx <mrcroxx@outlook.com>
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thanks for the PR!
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
foyer-memory/src/lib.rs
Outdated
//! memory and can be used by queries followed up. | ||
//! | ||
//! After the handle is released by all the external owners, the eviction container will update its order or evict it | ||
//! based on the eviction algorithm. If it doesn't appear in the eviction container, it may be reinserted if it it still |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo ? if it it .....
Signed-off-by: MrCroxx <mrcroxx@outlook.com>
* feat: introduce foyer-memory Cache abstraction Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: remove old foyer-memory code Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: introduce base handle Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: make cache abstraction use handle trait with base handle Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: impl fifo eviction Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: add basic tests Signed-off-by: MrCroxx <mrcroxx@outlook.com> * refactor: refactor directory hierarchy Signed-off-by: MrCroxx <mrcroxx@outlook.com> * fix: call access when get Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: make hakari happy Signed-off-by: MrCroxx <mrcroxx@outlook.com> * fix: fix dangling ptr after remove Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: introduce RemovableQueue to make FIFO impl easilier. Signed-off-by: MrCroxx <mrcroxx@outlook.com> * refactor: use removable queue to simplify fifo impl Signed-off-by: MrCroxx <mrcroxx@outlook.com> * fix: fix removable queue grow token updates Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: tiny refactors Signed-off-by: MrCroxx <mrcroxx@outlook.com> * refactor: use full type name for trait associated type Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: introduce associate type Context for handle Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: introduce lru eviction policy for foyer-memory Signed-off-by: MrCroxx <mrcroxx@outlook.com> * fix: add a simple ut and fix bugs Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: remove unused generic type Signed-off-by: MrCroxx <mrcroxx@outlook.com> * refactor: use rocksdb lru impl instead of cachelib lru Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: add waiters and entry API for request dedup TODO: add ut for Cache Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: introduce new in-memory cache abstraction into foyer-memory Signed-off-by: MrCroxx <mrcroxx@outlook.com> * refactor: use intrusive dlist to impl fifo Signed-off-by: MrCroxx <mrcroxx@outlook.com> * refactor: use intrusive dlist to impl LRU with high-pri pool Signed-off-by: MrCroxx <mrcroxx@outlook.com> * fix: fix reinsert bugs Signed-off-by: MrCroxx <mrcroxx@outlook.com> * test: add ut and fix some bugs Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: make clippy happy Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: expose foyer-memory via foyer crate Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: allow entry future returns context besides Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: make lru context clone and copy Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: make lru context derive Eq and PartialEq Signed-off-by: MrCroxx <mrcroxx@outlook.com> * feat: impl Future for Entry Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: remove unused comments Signed-off-by: MrCroxx <mrcroxx@outlook.com> * doc: add crate document Signed-off-by: MrCroxx <mrcroxx@outlook.com> * test: add more uts for cache Signed-off-by: MrCroxx <mrcroxx@outlook.com> * test: add ut to cover not reinsert for full Signed-off-by: MrCroxx <mrcroxx@outlook.com> * chore: fix typo Signed-off-by: MrCroxx <mrcroxx@outlook.com> --------- Signed-off-by: MrCroxx <mrcroxx@outlook.com>
What's changed and what's your intention?
A complete version of #262 .
Summary (from the crate documentation):
Checklist
make check
andmake test
ormake all
in my local envirorment.Related issues or PRs (optional)
Related PR in RisingWave: risingwavelabs/risingwave#15382