delta.num_objects--;
if (coi.is_dirty())
delta.num_objects_dirty--;
- if (coi.is_whiteout())
+ if (coi.is_whiteout()) {
+ dout(20) << __func__ << " trimming whiteout on " << coid << dendl;
delta.num_whiteouts--;
+ }
delta.num_object_clones--;
delta.num_bytes -= snapset.clone_size[last];
info.stats.stats.add(delta, obc->obs.oi.category);
ctx->delta_stats.num_objects--;
if (oi.is_dirty())
ctx->delta_stats.num_objects_dirty--;
- if (oi.is_whiteout())
+ if (oi.is_whiteout()) {
+ dout(20) << __func__ << " deleting whiteout on " << soid << dendl;
ctx->delta_stats.num_whiteouts--;
+ }
snapset.head_exists = false;
obs.exists = false;
return 0;
ctx->delta_stats.num_objects++;
if (snap_oi->is_dirty())
ctx->delta_stats.num_objects_dirty++;
- if (snap_oi->is_whiteout())
+ if (snap_oi->is_whiteout()) {
+ dout(20) << __func__ << " cloning whiteout on " << soid << " to " << coid << dendl;
ctx->delta_stats.num_whiteouts++;
+ }
ctx->delta_stats.num_object_clones++;
ctx->new_snapset.clones.push_back(coid.snap);
ctx->new_snapset.clone_size[coid.snap] = ctx->obs->oi.size;
tctx->op_t->touch(soid);
tctx->new_obs.oi.set_flag(object_info_t::FLAG_WHITEOUT);
++tctx->delta_stats.num_whiteouts;
- dout(20) << __func__ << " creating whiteout" << dendl;
+ dout(20) << __func__ << " creating whiteout on " << soid << dendl;
} else {
tctx->op_t->append(results->final_tx);
delete results->final_tx;
RepGather *repop = simple_repop_create(obc);
OpContext *ctx = repop->ctx;
ctx->at_version = get_next_version();
+ assert(ctx->new_obs.exists);
int r = _delete_head(ctx, true);
assert(r == 0);
finish_ctx(ctx, pg_log_entry_t::DELETE);