https://bugs.openldap.org/show_bug.cgi?id=8958
--- Comment #25 from Howard Chu hyc@openldap.org --- (In reply to Hallvard Furuseth from comment #17)
Duuh, right. I got stuck looking for what's special about the indexing task and couldn't find it:-( I need to make it special.
So, let tasks declare their expected speed until finish or between pausechecks. At FAST=1 (default) and SLOW=0. A pause only stops tasks with speed < ltp_pause. In thread_pool_pause(), replace the WANT_PAUSE stage with
while (++ltp_pause <= max speed) { wait until no more tasks with speed < ltp_pause; }
Then fast tasks should breeze past slow ones when preparing to pause. Until all threads have slow tasks, anyway.
I don't understand how this solves anything. If a slow indexing task is currently running, and a fast config mod comes in, it's still the case that the config change could pull the DB out from under the indexer task. So there's nothing safe about letting the fast task progress while the slow task is still running.