mirror of
https://github.com/ceph/ceph
synced 2025-02-22 10:37:15 +00:00
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 <sage@inktank.com>
This commit is contained in:
parent
5a6ae2a978
commit
72fdd557c3
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user