Skip to content

Commit 4378503

Browse files
committed
Add add reset method to immutable digest cache provider
1 parent 05b3e60 commit 4378503

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

mithril-common/src/digesters/cache/json_provider.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use std::{
1414
path::{Path, PathBuf},
1515
};
1616
use tokio::{
17+
fs,
1718
fs::File,
1819
io::{AsyncReadExt, AsyncWriteExt},
1920
};
@@ -95,6 +96,14 @@ impl ImmutableFileDigestCacheProvider for JsonImmutableFileDigestCacheProvider {
9596

9697
Ok(result)
9798
}
99+
100+
async fn reset(&self) -> CacheProviderResult<()> {
101+
fs::remove_file(&self.filepath)
102+
.await
103+
.map_err(ImmutableDigesterCacheStoreError::from)?;
104+
105+
Ok(())
106+
}
98107
}
99108

100109
#[cfg(test)]
@@ -249,4 +258,38 @@ mod tests {
249258

250259
assert_eq!(expected, result);
251260
}
261+
262+
#[tokio::test]
263+
async fn reset_clear_existing_values() {
264+
let file = get_test_dir("store_erase_existing_values").join("immutable-cache-store.json");
265+
let provider = JsonImmutableFileDigestCacheProvider::new(&file);
266+
let values_to_store = vec![
267+
("0.chunk".to_string(), "digest 0".to_string()),
268+
("1.chunk".to_string(), "digest 1".to_string()),
269+
];
270+
let expected: BTreeMap<_, _> = BTreeMap::from([
271+
(
272+
ImmutableFile::dummy(PathBuf::default(), 0, "0.chunk".to_string()),
273+
Some("digest 0".to_string()),
274+
),
275+
(
276+
ImmutableFile::dummy(PathBuf::default(), 1, "1.chunk".to_string()),
277+
Some("digest 1".to_string()),
278+
),
279+
]);
280+
let immutables = expected.keys().cloned().collect();
281+
282+
provider
283+
.store(values_to_store)
284+
.await
285+
.expect("Cache write should not fail");
286+
provider.reset().await.expect("reset should not fails");
287+
288+
let result: BTreeMap<_, _> = provider
289+
.get(immutables)
290+
.await
291+
.expect("Cache read should not fail");
292+
293+
assert!(result.into_iter().all(|(_, cache)| cache.is_none()));
294+
}
252295
}

mithril-common/src/digesters/cache/memory_provider.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ impl ImmutableFileDigestCacheProvider for MemoryImmutableFileDigestCacheProvider
5959

6060
Ok(result)
6161
}
62+
63+
async fn reset(&self) -> CacheProviderResult<()> {
64+
let mut store = self.store.write().await;
65+
store.clear();
66+
Ok(())
67+
}
6268
}
6369

6470
#[cfg(test)]
@@ -185,4 +191,37 @@ mod tests {
185191

186192
assert_eq!(expected, result);
187193
}
194+
195+
#[tokio::test]
196+
async fn reset_clear_existing_values() {
197+
let provider = MemoryImmutableFileDigestCacheProvider::default();
198+
let values_to_store = vec![
199+
("0.chunk".to_string(), "digest 0".to_string()),
200+
("1.chunk".to_string(), "digest 1".to_string()),
201+
];
202+
let expected: BTreeMap<_, _> = BTreeMap::from([
203+
(
204+
ImmutableFile::dummy(PathBuf::default(), 0, "0.chunk".to_string()),
205+
Some("digest 0".to_string()),
206+
),
207+
(
208+
ImmutableFile::dummy(PathBuf::default(), 1, "1.chunk".to_string()),
209+
Some("digest 1".to_string()),
210+
),
211+
]);
212+
let immutables = expected.keys().cloned().collect();
213+
214+
provider
215+
.store(values_to_store)
216+
.await
217+
.expect("Cache write should not fail");
218+
provider.reset().await.expect("reset should not fails");
219+
220+
let result: BTreeMap<_, _> = provider
221+
.get(immutables)
222+
.await
223+
.expect("Cache read should not fail");
224+
225+
assert!(result.into_iter().all(|(_, cache)| cache.is_none()));
226+
}
188227
}

mithril-common/src/digesters/cache/provider.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,7 @@ pub trait ImmutableFileDigestCacheProvider: Sync + Send {
6363
&self,
6464
immutables: Vec<ImmutableFile>,
6565
) -> CacheProviderResult<BTreeMap<ImmutableFile, Option<HexEncodedDigest>>>;
66+
67+
/// Reset the stored values
68+
async fn reset(&self) -> CacheProviderResult<()>;
6669
}

0 commit comments

Comments
 (0)