From 4bdf5f3bc8e87e4e27a20a5d5881ef8839b4ae3d Mon Sep 17 00:00:00 2001 From: tabokie Date: Tue, 6 Sep 2022 18:18:34 +0800 Subject: [PATCH] raftstore: optimize region destroy (#13384) close #12421 Optimize the performance of merging empty regions Signed-off-by: tabokie --- components/engine_rocks/src/misc.rs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/components/engine_rocks/src/misc.rs b/components/engine_rocks/src/misc.rs index 9c66ee8bfa2..a6bc0c57c2b 100644 --- a/components/engine_rocks/src/misc.rs +++ b/components/engine_rocks/src/misc.rs @@ -29,17 +29,6 @@ impl RocksEngine { ) -> Result<()> { let mut ranges = ranges.to_owned(); ranges.sort_by(|a, b| a.start_key.cmp(b.start_key)); - let max_end_key = ranges - .iter() - .fold(ranges[0].end_key, |x, y| std::cmp::max(x, y.end_key)); - let start = KeyBuilder::from_slice(ranges[0].start_key, 0, 0); - let end = KeyBuilder::from_slice(max_end_key, 0, 0); - let mut opts = IterOptions::new(Some(start), Some(end), false); - if self.is_titan() { - // Cause DeleteFilesInRange may expose old blob index keys, setting key only for Titan - // to avoid referring to missing blob files. - opts.set_key_only(true); - } let mut writer_wrapper: Option = None; let mut data: Vec> = vec![]; @@ -55,7 +44,17 @@ impl RocksEngine { } last_end_key = Some(r.end_key.to_owned()); - let mut it = self.iterator_cf_opt(cf, opts.clone())?; + let mut opts = IterOptions::new( + Some(KeyBuilder::from_slice(r.start_key, 0, 0)), + Some(KeyBuilder::from_slice(r.end_key, 0, 0)), + false, + ); + if self.is_titan() { + // Cause DeleteFilesInRange may expose old blob index keys, setting key only for + // Titan to avoid referring to missing blob files. + opts.set_key_only(true); + } + let mut it = self.iterator_cf_opt(cf, opts)?; let mut it_valid = it.seek(r.start_key.into())?; while it_valid { if it.key() >= r.end_key {