mito2/sst/index/indexer/
abort.rs1use common_telemetry::warn;
16
17use crate::access_layer::TempFileCleaner;
18use crate::sst::file::{RegionFileId, RegionIndexId};
19use crate::sst::index::Indexer;
20
21impl Indexer {
22 pub(crate) async fn do_abort(&mut self) {
23 self.dense_pk_decoder = None;
24 self.do_abort_inverted_index().await;
25 self.do_abort_fulltext_index().await;
26 self.do_abort_bloom_filter().await;
27 self.do_prune_intm_sst_dir().await;
28 if self.write_cache_enabled {
29 self.do_abort_clean_fs_temp_dir().await;
30 }
31 self.puffin_manager = None;
32 }
33
34 async fn do_abort_inverted_index(&mut self) {
35 let Some(mut indexer) = self.inverted_indexer.take() else {
36 return;
37 };
38 let Err(err) = indexer.abort().await else {
39 return;
40 };
41
42 if cfg!(any(test, feature = "test")) {
43 panic!(
44 "Failed to abort inverted index, region_id: {}, file_id: {}, err: {:?}",
45 self.region_id, self.file_id, err
46 );
47 } else {
48 warn!(
49 err; "Failed to abort inverted index, region_id: {}, file_id: {}",
50 self.region_id, self.file_id,
51 );
52 }
53 }
54
55 async fn do_abort_fulltext_index(&mut self) {
56 let Some(mut indexer) = self.fulltext_indexer.take() else {
57 return;
58 };
59 let Err(err) = indexer.abort().await else {
60 return;
61 };
62
63 if cfg!(any(test, feature = "test")) {
64 panic!(
65 "Failed to abort full-text index, region_id: {}, file_id: {}, err: {:?}",
66 self.region_id, self.file_id, err
67 );
68 } else {
69 warn!(
70 err; "Failed to abort full-text index, region_id: {}, file_id: {}",
71 self.region_id, self.file_id,
72 );
73 }
74 }
75
76 async fn do_abort_bloom_filter(&mut self) {
77 let Some(mut indexer) = self.bloom_filter_indexer.take() else {
78 return;
79 };
80 let Err(err) = indexer.abort().await else {
81 return;
82 };
83
84 if cfg!(any(test, feature = "test")) {
85 panic!(
86 "Failed to abort bloom filter, region_id: {}, file_id: {}, err: {:?}",
87 self.region_id, self.file_id, err
88 );
89 } else {
90 warn!(
91 err; "Failed to abort bloom filter, region_id: {}, file_id: {}",
92 self.region_id, self.file_id,
93 );
94 }
95 }
96
97 async fn do_abort_clean_fs_temp_dir(&mut self) {
98 let Some(puffin_manager) = &self.puffin_manager else {
99 return;
100 };
101 let fs_accessor = puffin_manager.file_accessor();
102
103 let fs_handle = RegionIndexId::new(
104 RegionFileId::new(self.physical_region_id, self.file_id),
105 self.index_version,
106 )
107 .to_string();
108 TempFileCleaner::clean_atomic_dir_files(fs_accessor.store().store(), &[&fs_handle]).await;
109 }
110}