mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-01 12:36:56 +00:00
The problem is that backlog tracker is not being updated properly after incremental compaction. When replacing sstables earlier, we tell backlog tracker that we're done with exhausted sstables[1], but we *don't* tell it about the new, sealed sstables created that will replace the exhausted ones. [1]: exhausted sstable is one that can be replaced earlier by compaction. We need to notify backlog tracker about every sstable replacement which was triggered by incremental compaction. Otherwise, backlog for a table that enables incremental compaction will be lower than it actually should. That's because new sstables being tracked as partial decrease the backlog, whereas the exhausted ones increase it. The formula for a table's backlog is basically: backlog(sstable set + compacting(1) - partial(2)) (1) compacting includes all compaction's input sstables, but the exhausted ones are removed from it (correct behavior). (2) partial includes all compaction's output sstables, but the ones that replaced the exhausted sstables aren't removed from it (incorrect behavior). This problem is fixed by making backlog track *fully* aware of the early replacement, not only the exhausted sstables, but also the new sstables that replaced the exhausted ones. The new sstables need to be moved inside the tracker from partial state to the regular one. Fixes #5157. Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com> Message-Id: <20191016002838.23811-1-raphaelsc@scylladb.com>