From 50866019ebb2b5c15494ac1238914e2dc5d709a6 Mon Sep 17 00:00:00 2001 From: Mark Juggurnauth-Thomas Date: Thu, 23 Feb 2023 11:51:31 -0800 Subject: [PATCH] caching_ext: introduce noop-mode for cachelib and memcache caches Summary: Sometimes we just don't want to cache at all. Add a no-op mode so we can use the same code. Differential Revision: D43410853 fbshipit-source-id: 20dd632df66dc85b4da18678ff56e5b83e987326 --- .../changesets/changesets_impl/src/caching.rs | 6 +++--- .../common/rust/caching_ext/src/cachelib_utils.rs | 11 +++++++++-- .../common/rust/caching_ext/src/memcache_utils.rs | 10 +++++++++- .../caching_commit_graph_storage/src/lib.rs | 2 +- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/eden/mononoke/changesets/changesets_impl/src/caching.rs b/eden/mononoke/changesets/changesets_impl/src/caching.rs index edb11e8b1f..4f1de574cc 100644 --- a/eden/mononoke/changesets/changesets_impl/src/caching.rs +++ b/eden/mononoke/changesets/changesets_impl/src/caching.rs @@ -126,7 +126,7 @@ impl CachingChangesets { #[cfg(test)] pub fn cachelib_stats(&self) -> MockStoreStats { match self.cachelib { - CachelibHandler::Real(_) => unimplemented!(), + CachelibHandler::Real(_) | CachelibHandler::Noop => unimplemented!(), CachelibHandler::Mock(ref mock) => mock.stats(), } } @@ -134,7 +134,7 @@ impl CachingChangesets { #[cfg(test)] pub fn memcache_stats(&self) -> MockStoreStats { match self.memcache { - MemcacheHandler::Real(_) => unimplemented!(), + MemcacheHandler::Real(_) | MemcacheHandler::Noop => unimplemented!(), MemcacheHandler::Mock(ref mock) => mock.stats(), } } @@ -286,7 +286,7 @@ impl EntityStore for CacheRequest<'_> { match mapping.memcache { MemcacheHandler::Real(_) => true, - MemcacheHandler::Mock(..) => false, + MemcacheHandler::Mock(..) | MemcacheHandler::Noop => false, } } } diff --git a/eden/mononoke/common/rust/caching_ext/src/cachelib_utils.rs b/eden/mononoke/common/rust/caching_ext/src/cachelib_utils.rs index c6a77feeb5..1615600289 100644 --- a/eden/mononoke/common/rust/caching_ext/src/cachelib_utils.rs +++ b/eden/mononoke/common/rust/caching_ext/src/cachelib_utils.rs @@ -22,6 +22,7 @@ use crate::CachelibKey; pub enum CachelibHandler { Real(VolatileLruCachePool), Mock(MockStore), + Noop, } impl From for CachelibHandler { @@ -56,6 +57,7 @@ impl CachelibHandler { match self { CachelibHandler::Real(ref cache) => get_cached(cache, key), CachelibHandler::Mock(store) => Ok(store.get(key)), + CachelibHandler::Noop => Ok(None), } } @@ -66,6 +68,7 @@ impl CachelibHandler { store.set(key, value.clone()); Ok(true) } + CachelibHandler::Noop => Ok(false), } } @@ -73,11 +76,15 @@ impl CachelibHandler { CachelibHandler::Mock(MockStore::new()) } + pub fn create_noop() -> Self { + CachelibHandler::Noop + } + #[cfg(test)] pub(crate) fn gets_count(&self) -> usize { use std::sync::atomic::Ordering; match self { - CachelibHandler::Real(_) => unimplemented!(), + CachelibHandler::Real(_) | CachelibHandler::Noop => unimplemented!(), CachelibHandler::Mock(MockStore { ref get_count, .. }) => { get_count.load(Ordering::SeqCst) } @@ -86,7 +93,7 @@ impl CachelibHandler { pub fn mock_store(&self) -> Option<&MockStore> { match self { - CachelibHandler::Real(_) => None, + CachelibHandler::Real(_) | CachelibHandler::Noop => None, CachelibHandler::Mock(ref mock) => Some(mock), } } diff --git a/eden/mononoke/common/rust/caching_ext/src/memcache_utils.rs b/eden/mononoke/common/rust/caching_ext/src/memcache_utils.rs index eaab8b2e77..304c31d4e1 100644 --- a/eden/mononoke/common/rust/caching_ext/src/memcache_utils.rs +++ b/eden/mononoke/common/rust/caching_ext/src/memcache_utils.rs @@ -18,6 +18,7 @@ use crate::mock_store::MockStore; pub enum MemcacheHandler { Real(MemcacheClient), Mock(MockStore), + Noop, } impl From for MemcacheHandler { @@ -33,6 +34,7 @@ impl MemcacheHandler { client.get(key).await.map(|value| value.map(Bytes::from)) } MemcacheHandler::Mock(store) => Ok(store.get(&key)), + MemcacheHandler::Noop => Ok(None), } } @@ -48,6 +50,7 @@ impl MemcacheHandler { store.set(&key, value.into()); Ok(()) } + MemcacheHandler::Noop => Ok(()), } } @@ -63,6 +66,7 @@ impl MemcacheHandler { // For now we ignore TTLs here self.set(key, value).await } + MemcacheHandler::Noop => Ok(()), } } @@ -70,11 +74,15 @@ impl MemcacheHandler { MemcacheHandler::Mock(MockStore::new()) } + pub fn create_noop() -> Self { + MemcacheHandler::Noop + } + #[cfg(test)] pub(crate) fn gets_count(&self) -> usize { use std::sync::atomic::Ordering; match self { - MemcacheHandler::Real(_) => unimplemented!(), + MemcacheHandler::Real(_) | MemcacheHandler::Noop => unimplemented!(), MemcacheHandler::Mock(MockStore { ref get_count, .. }) => { get_count.load(Ordering::SeqCst) } diff --git a/eden/mononoke/repo_attributes/commit_graph/caching_commit_graph_storage/src/lib.rs b/eden/mononoke/repo_attributes/commit_graph/caching_commit_graph_storage/src/lib.rs index d37de563a2..5186c1d164 100644 --- a/eden/mononoke/repo_attributes/commit_graph/caching_commit_graph_storage/src/lib.rs +++ b/eden/mononoke/repo_attributes/commit_graph/caching_commit_graph_storage/src/lib.rs @@ -186,7 +186,7 @@ impl EntityStore for CacheRequest<'_> { fn spawn_memcache_writes(&self) -> bool { match self.caching_storage.memcache { MemcacheHandler::Real(_) => true, - MemcacheHandler::Mock(..) => false, + MemcacheHandler::Mock(..) | MemcacheHandler::Noop => false, } } }