Elastic migration throttle_delay has no floor; sub-2s values can self-throttle
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
A migration declaring throttle_delay <= 1 second can be blocked by its own self-enqueued successor, inverting the throttle it is meant to apply. Add a minimum (e.g. 2 seconds) to throttle_delay(value) in ee/app/workers/concerns/elastic/migration_options.rb, or assert it where the lease TTL is computed.
Mechanism and reachability
The exclusive-lease TTL that gates batch cadence is [throttle_delay.to_i - 1, 1].max (ee/app/workers/elastic/migration_worker.rb, #enqueue_next_batch). Once throttle_delay <= 1 second, the floor of 1 is no longer less than throttle_delay, so the lease can still be held when the migration's own successor arrives.
No migration in ee/elastic/migrate/ declares a delay below 5 seconds today, so this is not currently reachable — nothing enforces a minimum, though.
Raised by GitLab Duo review on !256460 (comment 3904395552), addressed there as non-blocking with a promise to file this follow-up.