Details
-
Bug
-
Status: Resolved
-
Normal
-
Resolution: Fixed
-
None
-
Code
-
Normal
-
Normal
-
User Report
-
All
-
None
-
Description
The cleaner thread is not prevented from queueing an unbounded number of flushing tasks for memtables that are almost empty.
This patch adds a mechanism to track the number of pending flushing
tasks in the memtable cleaner. Above the maximum number (2x the flushing
threads by default), only memtables using at least MCT memory will be
flushed, where MCT stands for Memory Cleanup Threshold.
This patch also fixes a possible problem tracking the memory marked as
"reclaiming" in the memtable allocators and pool. Writes that complete
only after a memtable has been scheduled for flushing, did not report
their memory as reclaiming. Normally this should be a small value of no
consequence, but if the flushing tasks are blocked for a long period,
and there is a sufficient number of writes, or these writes use
a sufficiently large quantity of memory, this would cause the memtable
cleaning algorithm to schedule repeated flushing tasks because the used
memory is always > reclaiming memory + MCT.
Attachments
Issue Links
- relates to
-
CASSANDRA-15821 Metrics Documentation Enhancements
- Open