mito2/manifest/storage/
utils.rs1use object_store::{Entry, ObjectStore};
16use snafu::ResultExt;
17use store_api::ManifestVersion;
18
19use crate::cache::manifest_cache::ManifestCache;
20use crate::error::{OpenDalSnafu, Result};
21
22pub(crate) async fn get_from_cache(cache: Option<&ManifestCache>, key: &str) -> Option<Vec<u8>> {
25 let cache = cache?;
26 cache.get_file(key).await
27}
28
29pub(crate) async fn put_to_cache(cache: Option<&ManifestCache>, key: String, data: &[u8]) {
31 let Some(cache) = cache else {
32 return;
33 };
34 cache.put_file(key, data.to_vec()).await
35}
36
37pub(crate) async fn remove_from_cache(cache: Option<&ManifestCache>, key: &str) {
39 let Some(cache) = cache else {
40 return;
41 };
42 cache.remove(key).await
43}
44
45pub(crate) async fn write_and_put_cache(
47 object_store: &ObjectStore,
48 cache: Option<&ManifestCache>,
49 path: &str,
50 data: Vec<u8>,
51) -> Result<()> {
52 let cache_data = if cache.is_some() {
54 Some(data.clone())
55 } else {
56 None
57 };
58
59 object_store.write(path, data).await.context(OpenDalSnafu)?;
61
62 if let Some(data) = cache_data {
64 put_to_cache(cache, path.to_string(), &data).await;
65 }
66
67 Ok(())
68}
69
70pub(crate) fn sort_manifests(entries: &mut [(ManifestVersion, Entry)]) {
72 entries.sort_unstable_by_key(|(version, _)| *version);
73}