rebuilding replicas causes all background tasks to stall (no differentiation between latency sensitive tasks and others)
Bug #622670 reported by
Данило Шеган
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Launchpad itself |
Fix Released
|
High
|
Unassigned |
Bug Description
We use DBLoopTuner for all of our data model migration scripts. However, when a single slave in a replication set is being rebuilt, entire cluster lag skyrockets and any migration job we are doing stalls for ~12h or so (the time it takes to fully rebuild a slave).
While this is bad for migration scripts, it makes DBLoopTuner unusable for regular cronscripts. I've even have a case where it makes the script underperform when using DBLoopTuner: cronscripts/
Solutions
=========
* Allow DBLoopTuner to be configured to ignore lag, for things that should well, ignore lag.
Changed in launchpad-foundations: | |
status: | Invalid → Confirmed |
importance: | Undecided → Medium |
Changed in launchpad: | |
status: | Confirmed → Triaged |
description: | updated |
summary: |
- rebuilding replicas causes all background tasks to stall + rebuilding replicas causes all background tasks to stall (no + differentiation between latency sensitive tasks and others) |
Changed in launchpad: | |
status: | Triaged → Fix Released |
To post a comment you must log in.
This is by design. When a slave is being rebuilt, an open transaction is kept open for several hours. We don't want data changes being made during this window because of database bloat. We don't want scripts that do bulk changes running when there are long running transactions open.
If it is critical things never block, don't use DBLoopTuner. Its purpose is to block when the DB is unhappy. Use LoopTuner instead.
If we want things to block, but not so aggressively, it needs to be opt in. We could either add flags to DBLoopTuner to not perform some checks, or alternative implementations that strike a different balance between remaining responsive and keeping the database happy.