mito2/sst/range_index/
deleter.rs1use object_store::{ErrorKind, ObjectStore};
18use snafu::ResultExt;
19use store_api::storage::{FileId, RegionId};
20
21use crate::error::{OpenDalSnafu, Result};
22use crate::metrics::SERIES_INDEX_FILE_OPERATION_TOTAL;
23
24#[derive(Debug, Clone)]
26pub struct RangeIndexDeleter {
27 store: ObjectStore,
28 region_id: RegionId,
29}
30
31impl RangeIndexDeleter {
32 pub fn new(store: ObjectStore, region_id: RegionId) -> Self {
34 Self { store, region_id }
35 }
36
37 pub async fn delete(&self, file_id: FileId) -> Result<()> {
39 let path = range_index_path(self.region_id, file_id);
40 let result = match self.store.delete(&path).await {
41 Ok(()) => Ok(()),
42 Err(error) if error.kind() == ErrorKind::NotFound => Ok(()),
43 Err(error) => Err(error).context(OpenDalSnafu),
44 };
45 SERIES_INDEX_FILE_OPERATION_TOTAL
46 .with_label_values(&[
47 "range",
48 "delete",
49 if result.is_ok() { "success" } else { "failure" },
50 ])
51 .inc();
52 result
53 }
54}
55
56pub(crate) fn range_index_path(region_id: RegionId, file_id: FileId) -> String {
57 format!("{}/range/{file_id}.parquet", region_id.as_u64())
58}