From 72fdd557c35cb721d4b502c5a8f68c878f11a19c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 2 May 2014 16:41:26 -0700 Subject: [PATCH] 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 --- src/osd/ReplicatedPG.cc | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) 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; } } -- 2.47.3