From 0643845665c08b4eb1d0c9d49488183b7bbabb63 Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang Date: Wed, 11 Mar 2015 15:40:57 +0800 Subject: [PATCH] osd: add num_objects_pinned in object_stat_sum_t To track the number of objects pinned in a PG. Signed-off-by: Zhiqiang Wang --- src/osd/ReplicatedPG.cc | 14 ++++++++++++++ src/osd/osd_types.cc | 32 ++++++++++++++++++++++++++------ src/osd/osd_types.h | 8 +++++++- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 6e2f86378f719..e4d9d31292630 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -3239,6 +3239,8 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid) ctx->delta_stats.num_whiteouts--; } ctx->delta_stats.num_object_clones--; + if (coi.is_cache_pinned()) + ctx->delta_stats.num_objects_pinned--; obc->obs.exists = false; snapset.clones.erase(p); @@ -5087,6 +5089,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) if (!oi.is_cache_pinned()) { oi.set_flag(object_info_t::FLAG_CACHE_PIN); ctx->modify = true; + ctx->delta_stats.num_objects_pinned++; ctx->delta_stats.num_wr++; } result = 0; @@ -5105,6 +5108,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) if (oi.is_cache_pinned()) { oi.clear_flag(object_info_t::FLAG_CACHE_PIN); ctx->modify = true; + ctx->delta_stats.num_objects_pinned--; ctx->delta_stats.num_wr++; } result = 0; @@ -6093,6 +6097,8 @@ void ReplicatedPG::make_writeable(OpContext *ctx) } if (snap_oi->is_omap()) ctx->delta_stats.num_objects_omap++; + if (snap_oi->is_cache_pinned()) + ctx->delta_stats.num_objects_pinned++; 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; @@ -8836,6 +8842,8 @@ void ReplicatedPG::add_object_context_to_pg_stat(ObjectContextRef obc, pg_stat_t stat.num_whiteouts++; if (oi.is_omap()) stat.num_objects_omap++; + if (oi.is_cache_pinned()) + stat.num_objects_pinned++; if (oi.soid.snap && oi.soid.snap != CEPH_NOSNAP && oi.soid.snap != CEPH_SNAPDIR) { stat.num_object_clones++; @@ -12172,6 +12180,8 @@ void ReplicatedPG::_scrub( ++stat.num_whiteouts; if (oi.is_omap()) ++stat.num_objects_omap; + if (oi.is_cache_pinned()) + ++stat.num_objects_pinned; } if (!next_clone.is_min() && next_clone != soid && @@ -12316,6 +12326,7 @@ void ReplicatedPG::_scrub_finish() << scrub_cstat.sum.num_object_clones << "/" << info.stats.stats.sum.num_object_clones << " clones, " << scrub_cstat.sum.num_objects_dirty << "/" << info.stats.stats.sum.num_objects_dirty << " dirty, " << scrub_cstat.sum.num_objects_omap << "/" << info.stats.stats.sum.num_objects_omap << " omap, " + << scrub_cstat.sum.num_objects_pinned << "/" << info.stats.stats.sum.num_objects_pinned << " pinned, " << scrub_cstat.sum.num_objects_hit_set_archive << "/" << info.stats.stats.sum.num_objects_hit_set_archive << " hit_set_archive, " << scrub_cstat.sum.num_bytes << "/" << info.stats.stats.sum.num_bytes << " bytes, " << scrub_cstat.sum.num_bytes_hit_set_archive << "/" << info.stats.stats.sum.num_bytes_hit_set_archive << " hit_set_archive bytes." @@ -12327,6 +12338,8 @@ void ReplicatedPG::_scrub_finish() !info.stats.dirty_stats_invalid) || (scrub_cstat.sum.num_objects_omap != info.stats.stats.sum.num_objects_omap && !info.stats.omap_stats_invalid) || + (scrub_cstat.sum.num_objects_pinned != info.stats.stats.sum.num_objects_pinned && + !info.stats.pin_stats_invalid) || (scrub_cstat.sum.num_objects_hit_set_archive != info.stats.stats.sum.num_objects_hit_set_archive && !info.stats.hitset_stats_invalid) || (scrub_cstat.sum.num_bytes_hit_set_archive != info.stats.stats.sum.num_bytes_hit_set_archive && @@ -12339,6 +12352,7 @@ void ReplicatedPG::_scrub_finish() << scrub_cstat.sum.num_object_clones << "/" << info.stats.stats.sum.num_object_clones << " clones, " << scrub_cstat.sum.num_objects_dirty << "/" << info.stats.stats.sum.num_objects_dirty << " dirty, " << scrub_cstat.sum.num_objects_omap << "/" << info.stats.stats.sum.num_objects_omap << " omap, " + << scrub_cstat.sum.num_objects_pinned << "/" << info.stats.stats.sum.num_objects_pinned << " pinned, " << scrub_cstat.sum.num_objects_hit_set_archive << "/" << info.stats.stats.sum.num_objects_hit_set_archive << " hit_set_archive, " << scrub_cstat.sum.num_whiteouts << "/" << info.stats.stats.sum.num_whiteouts << " whiteouts, " << scrub_cstat.sum.num_bytes << "/" << info.stats.stats.sum.num_bytes << " bytes, " diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 7adca4fbcd2c5..849a70d59cdc1 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1593,11 +1593,12 @@ void object_stat_sum_t::dump(Formatter *f) const f->dump_int("num_flush_mode_low", num_flush_mode_low); f->dump_int("num_evict_mode_some", num_evict_mode_some); f->dump_int("num_evict_mode_full", num_evict_mode_full); + f->dump_int("num_objects_pinned", num_objects_pinned); } void object_stat_sum_t::encode(bufferlist& bl) const { - ENCODE_START(13, 3, bl); + ENCODE_START(14, 3, bl); ::encode(num_bytes, bl); ::encode(num_objects, bl); ::encode(num_object_clones, bl); @@ -1630,12 +1631,13 @@ void object_stat_sum_t::encode(bufferlist& bl) const ::encode(num_flush_mode_low, bl); ::encode(num_evict_mode_some, bl); ::encode(num_evict_mode_full, bl); + ::encode(num_objects_pinned, bl); ENCODE_FINISH(bl); } void object_stat_sum_t::decode(bufferlist::iterator& bl) { - DECODE_START_LEGACY_COMPAT_LEN(13, 3, 3, bl); + DECODE_START_LEGACY_COMPAT_LEN(14, 3, 3, bl); ::decode(num_bytes, bl); if (struct_v < 3) { uint64_t num_kb; @@ -1723,6 +1725,11 @@ void object_stat_sum_t::decode(bufferlist::iterator& bl) num_evict_mode_some = 0; num_evict_mode_full = 0; } + if (struct_v >= 14) { + ::decode(num_objects_pinned, bl); + } else { + num_objects_pinned = 0; + } DECODE_FINISH(bl); } @@ -1759,6 +1766,7 @@ void object_stat_sum_t::generate_test_instances(list& o) a.num_flush_mode_low = 1; a.num_evict_mode_some = 1; a.num_evict_mode_full = 0; + a.num_objects_pinned = 20; o.push_back(new object_stat_sum_t(a)); } @@ -1796,6 +1804,7 @@ void object_stat_sum_t::add(const object_stat_sum_t& o) num_flush_mode_low += o.num_flush_mode_low; num_evict_mode_some += o.num_evict_mode_some; num_evict_mode_full += o.num_evict_mode_full; + num_objects_pinned += o.num_objects_pinned; } void object_stat_sum_t::sub(const object_stat_sum_t& o) @@ -1832,6 +1841,7 @@ void object_stat_sum_t::sub(const object_stat_sum_t& o) num_flush_mode_low -= o.num_flush_mode_low; num_evict_mode_some -= o.num_evict_mode_some; num_evict_mode_full -= o.num_evict_mode_full; + num_objects_pinned -= o.num_objects_pinned; } bool operator==(const object_stat_sum_t& l, const object_stat_sum_t& r) @@ -1868,7 +1878,8 @@ bool operator==(const object_stat_sum_t& l, const object_stat_sum_t& r) l.num_flush_mode_high == r.num_flush_mode_high && l.num_flush_mode_low == r.num_flush_mode_low && l.num_evict_mode_some == r.num_evict_mode_some && - l.num_evict_mode_full == r.num_evict_mode_full; + l.num_evict_mode_full == r.num_evict_mode_full && + l.num_objects_pinned == r.num_objects_pinned; } // -- object_stat_collection_t -- @@ -1995,7 +2006,7 @@ void pg_stat_t::dump_brief(Formatter *f) const void pg_stat_t::encode(bufferlist &bl) const { - ENCODE_START(21, 8, bl); + ENCODE_START(22, 8, bl); ::encode(version, bl); ::encode(reported_seq, bl); ::encode(reported_epoch, bl); @@ -2035,12 +2046,13 @@ void pg_stat_t::encode(bufferlist &bl) const ::encode(hitset_bytes_stats_invalid, bl); ::encode(last_peered, bl); ::encode(last_became_peered, bl); + ::encode(pin_stats_invalid, bl); ENCODE_FINISH(bl); } void pg_stat_t::decode(bufferlist::iterator &bl) { - DECODE_START_LEGACY_COMPAT_LEN(20, 8, 8, bl); + DECODE_START_LEGACY_COMPAT_LEN(22, 8, 8, bl); ::decode(version, bl); ::decode(reported_seq, bl); ::decode(reported_epoch, bl); @@ -2174,6 +2186,13 @@ void pg_stat_t::decode(bufferlist::iterator &bl) last_peered = last_active; last_became_peered = last_became_active; } + if (struct_v >= 22) { + ::decode(pin_stats_invalid, bl); + } else { + // if we are decoding an old encoding of this object, then the + // encoder may not have supported num_objects_pinned accounting. + pin_stats_invalid = true; + } DECODE_FINISH(bl); } @@ -2264,7 +2283,8 @@ bool operator==(const pg_stat_t& l, const pg_stat_t& r) l.hitset_stats_invalid == r.hitset_stats_invalid && l.hitset_bytes_stats_invalid == r.hitset_bytes_stats_invalid && l.up_primary == r.up_primary && - l.acting_primary == r.acting_primary; + l.acting_primary == r.acting_primary && + l.pin_stats_invalid == r.pin_stats_invalid; } // -- pool_stat_t -- diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 961bcfa54f27c..8d04c2477ca33 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1358,6 +1358,7 @@ struct object_stat_sum_t { int32_t num_flush_mode_low; // 1 when in low flush mode, otherwise 0 int32_t num_evict_mode_some; // 1 when in evict some mode, otherwise 0 int32_t num_evict_mode_full; // 1 when in evict full mode, otherwise 0 + int64_t num_objects_pinned; object_stat_sum_t() : num_bytes(0), @@ -1382,7 +1383,8 @@ struct object_stat_sum_t { num_evict_kb(0), num_promote(0), num_flush_mode_high(0), num_flush_mode_low(0), - num_evict_mode_some(0), num_evict_mode_full(0) + num_evict_mode_some(0), num_evict_mode_full(0), + num_objects_pinned(0) {} void floor(int64_t f) { @@ -1419,6 +1421,7 @@ struct object_stat_sum_t { FLOOR(num_flush_mode_low); FLOOR(num_evict_mode_some); FLOOR(num_evict_mode_full); + FLOOR(num_objects_pinned); #undef FLOOR } @@ -1463,6 +1466,7 @@ struct object_stat_sum_t { SPLIT(num_flush_mode_low); SPLIT(num_evict_mode_some); SPLIT(num_evict_mode_full); + SPLIT(num_objects_pinned); #undef SPLIT } @@ -1596,6 +1600,7 @@ struct pg_stat_t { bool omap_stats_invalid; bool hitset_stats_invalid; bool hitset_bytes_stats_invalid; + bool pin_stats_invalid; /// up, acting primaries int32_t up_primary; @@ -1614,6 +1619,7 @@ struct pg_stat_t { omap_stats_invalid(false), hitset_stats_invalid(false), hitset_bytes_stats_invalid(false), + pin_stats_invalid(false), up_primary(-1), acting_primary(-1) { } -- 2.39.5