From 1cdb01b47b0656f5e61715e0ec35329356c651a1 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 12 Jan 2011 15:09:51 -0800 Subject: [PATCH] ReplicatedPG: Fix oi.size bug in _rollback_to _rollback_to calls _delete_head before cloning the clone into place. _delete_head sets the object info size to 0. _rollback_to now resets the size to match the rolled back object. Previously, this bug manifested as a failed assert in scrub when checking the object sizes. Signed-off-by: Samuel Just --- src/osd/ReplicatedPG.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index e99ed28160d2b..67161f90eeaad 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1671,6 +1671,13 @@ void ReplicatedPG::_rollback_to(OpContext *ctx, ceph_osd_op& op) t.setattrs(coll_t(info.pgid), soid, attrs); ssc->snapset.head_exists = true; + // Adjust the cached objectcontext + ObjectContext *clone_context = get_object_context(rollback_to_sobject, + oi.oloc, + false); + assert(clone_context); + ctx->obs->oi.size = clone_context->obs.oi.size; + map >::iterator iter = ssc->snapset.clone_overlap.lower_bound(snapid); interval_set overlaps = iter->second; -- 2.39.5