From ff68802ffc9ed964e5d3c4962e0570432d81369b Mon Sep 17 00:00:00 2001 From: Mubelotix Date: Fri, 8 Aug 2025 11:24:04 +0200 Subject: [PATCH] Optimization A Speeds up the "deleting tasks" subtask by 23% --- .../src/scheduler/process_batch.rs | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/crates/index-scheduler/src/scheduler/process_batch.rs b/crates/index-scheduler/src/scheduler/process_batch.rs index c21ab27ad..7132fcee0 100644 --- a/crates/index-scheduler/src/scheduler/process_batch.rs +++ b/crates/index-scheduler/src/scheduler/process_batch.rs @@ -1,4 +1,5 @@ use std::collections::{BTreeSet, HashMap, HashSet}; +use std::ops::Bound; use std::panic::{catch_unwind, AssertUnwindSafe}; use std::sync::atomic::Ordering; @@ -510,6 +511,29 @@ impl IndexScheduler { matched_tasks: &RoaringBitmap, progress: &Progress, ) -> Result { + fn consecutive_ranges(iter: I) -> impl Iterator + where + I: IntoIterator, + { + let mut iter = iter.into_iter().peekable(); + + std::iter::from_fn(move || { + let start = iter.next()?; + + let mut end = start; + + while let Some(&next) = iter.peek() { + if next == end + 1 { + end = next; + iter.next(); + } else { + break; + } + } + + Some((start, end)) + }) + } progress.update_progress(TaskDeletionProgress::DeletingTasksDateTime); // 1. Remove from this list the tasks that we are not allowed to delete @@ -596,8 +620,11 @@ impl IndexScheduler { progress.update_progress(TaskDeletionProgress::DeletingTasks); let (atomic_progress, task_progress) = AtomicTaskStep::new(to_delete_tasks.len() as u32); progress.update_progress(task_progress); - for task in to_delete_tasks.iter() { - self.queue.tasks.all_tasks.delete(wtxn, &task)?; + for range in consecutive_ranges(to_delete_tasks.iter()) { + self.queue + .tasks + .all_tasks + .delete_range(wtxn, &(Bound::Included(range.0), Bound::Included(range.1)))?; atomic_progress.fetch_add(1, Ordering::Relaxed); } for canceled_by in affected_canceled_by {