Upon a pg falling idle, an ECDummy op is immediately generated.
This op causes the pg log to be committed. This op gets added to
the tid_to_op_map, however it does not get removed until the
interval ends.
The lack of remove is essentially a temporary "leak" and since the
op data structure is quite big, this can add up to significant
amounts of memory in a heavily loaded system.
The fix is simple - to add the op to the waiting list, so that it
gets cleaned up on when the op is finished.
Fixes: https://tracker.ceph.com/issues/74433
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
nop->pipeline = this;
tid_to_op_map[tid] = nop;
+ waiting_commit.push_back(nop);
/* The cache is idle (we checked above) and this IO never blocks for reads
* so we can skip the extent cache and immediately call the completion.