}
int PrimaryLogPG::trim_object(
- bool first, const hobject_t &coid, PrimaryLogPG::OpContextUPtr *ctxp)
+ bool first, const hobject_t &coid, snapid_t snap_to_trim,
+ PrimaryLogPG::OpContextUPtr *ctxp)
{
*ctxp = NULL;
for (set<snapid_t>::iterator i = old_snaps.begin();
i != old_snaps.end();
++i) {
- if (!osdmap->in_removed_snaps_queue(info.pgid.pgid.pool(), *i)) {
+ if (!osdmap->in_removed_snaps_queue(info.pgid.pgid.pool(), *i) &&
+ *i != snap_to_trim) {
new_snaps.insert(*i);
}
}
// Get next
ldout(pg->cct, 10) << "AwaitAsyncWork react trimming " << object << dendl;
OpContextUPtr ctx;
- int error = pg->trim_object(in_flight.empty(), object, &ctx);
+ int error = pg->trim_object(in_flight.empty(), object, snap_to_trim, &ctx);
if (error) {
if (error == -ENOLCK) {
ldout(pg->cct, 10) << "could not get write lock on obj "
void handle_backoff(OpRequestRef& op);
- int trim_object(bool first, const hobject_t &coid, OpContextUPtr *ctxp);
+ int trim_object(bool first, const hobject_t &coid, snapid_t snap_to_trim,
+ OpContextUPtr *ctxp);
void snap_trimmer(epoch_t e) override;
void kick_snap_trim() override;
void snap_trimmer_scrub_complete() override;