From: Sage Weil Date: Fri, 2 May 2014 23:41:26 +0000 (-0700) Subject: osd/ReplicatedPG: fix trim of in-flight hit_sets X-Git-Tag: v0.81~71^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=72fdd557c35cb721d4b502c5a8f68c878f11a19c;p=ceph.git osd/ReplicatedPG: fix trim of in-flight hit_sets We normally need to stat the hit_set to know how many bytes to adjust the stats by. If the hit_set was just written, we will get ENOENT. Get the obc instead, which will either get the in-memory copy (because the repop is still in flight) or load it off of disk. Fixes: #8283 Backport: firefly Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 2521b966d030..7b6e4332189c 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -10924,15 +10924,11 @@ void ReplicatedPG::hit_set_trim(RepGather *repop, unsigned max) agent_state->remove_oldest_hit_set(); updated_hit_set_hist.history.pop_front(); - struct stat st; - int r = osd->store->stat( - coll, - ghobject_t(oid, ghobject_t::NO_GEN, pg_whoami.shard), - &st); - assert(r == 0); + ObjectContextRef obc = get_object_context(oid, false); + assert(obc); --repop->ctx->delta_stats.num_objects; --repop->ctx->delta_stats.num_objects_hit_set_archive; - repop->ctx->delta_stats.num_bytes -= st.st_size; + repop->ctx->delta_stats.num_bytes -= obc->obs.oi.size; } }