From 615cc5e8b7325d3399e3d8212aeb9f5714e997d9 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Fri, 2 Mar 2018 16:39:53 +0900 Subject: [PATCH] osd: add num_object_manifest to count manifest object Signed-off-by: Myoungwon Oh --- src/osd/PrimaryLogPG.cc | 23 +++++++++++++++++++++++ src/osd/osd_types.cc | 30 ++++++++++++++++++++++++------ src/osd/osd_types.h | 8 +++++++- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index dc194e0372998..4acb466b419d9 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -4206,6 +4206,8 @@ int PrimaryLogPG::trim_object( ctx->delta_stats.num_object_clones--; if (coi.is_cache_pinned()) ctx->delta_stats.num_objects_pinned--; + if (coi.has_manifest()) + ctx->delta_stats.num_objects_manifest--; obc->obs.exists = false; snapset.clones.erase(p); @@ -4304,6 +4306,8 @@ int PrimaryLogPG::trim_object( if (oi.is_cache_pinned()) { ctx->delta_stats.num_objects_pinned--; } + if (coi.has_manifest()) + ctx->delta_stats.num_objects_manifest--; head_obc->obs.exists = false; head_obc->obs.oi = object_info_t(head_oid); t->remove(head_oid); @@ -6576,6 +6580,9 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector& ops) result = -EINVAL; break; } + if (!oi.has_manifest() && !oi.manifest.is_redirect()) + ctx->delta_stats.num_objects_manifest++; + oi.set_flag(object_info_t::FLAG_MANIFEST); oi.manifest.redirect_target = target; oi.manifest.type = object_manifest_t::TYPE_REDIRECT; @@ -6668,6 +6675,8 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector& ops) chunk_info.offset = tgt_offset; chunk_info.length= src_length; oi.manifest.chunk_map[src_offset] = chunk_info; + if (!oi.has_manifest() && !oi.manifest.is_chunked()) + ctx->delta_stats.num_objects_manifest++; oi.set_flag(object_info_t::FLAG_MANIFEST); oi.manifest.type = object_manifest_t::TYPE_CHUNKED; @@ -7461,6 +7470,9 @@ inline int PrimaryLogPG::_delete_oid( if (oi.is_cache_pinned()) { ctx->delta_stats.num_objects_pinned--; } + if (oi.has_manifest()) { + ctx->delta_stats.num_objects_manifest--; + } obs.exists = false; return 0; } @@ -7731,6 +7743,8 @@ void PrimaryLogPG::make_writeable(OpContext *ctx) ctx->delta_stats.num_objects_omap++; if (snap_oi->is_cache_pinned()) ctx->delta_stats.num_objects_pinned++; + if (snap_oi->has_manifest()) + ctx->delta_stats.num_objects_manifest++; 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; @@ -10764,6 +10778,8 @@ void PrimaryLogPG::add_object_context_to_pg_stat(ObjectContextRef obc, pg_stat_t stat.num_objects_omap++; if (oi.is_cache_pinned()) stat.num_objects_pinned++; + if (oi.has_manifest()) + stat.num_objects_manifest++; if (oi.soid.is_snap()) { stat.num_object_clones++; @@ -14285,6 +14301,8 @@ void PrimaryLogPG::scrub_snapshot_metadata( ++stat.num_objects_omap; if (oi->is_cache_pinned()) ++stat.num_objects_pinned; + if (oi->has_manifest()) + ++stat.num_objects_manifest; } // Check for any problems while processing clones @@ -14547,6 +14565,7 @@ void PrimaryLogPG::_scrub_finish() << 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_objects_manifest << "/" << info.stats.stats.sum.num_objects_manifest << " manifest objects, " << scrub_cstat.sum.num_bytes_hit_set_archive << "/" << info.stats.stats.sum.num_bytes_hit_set_archive << " hit_set_archive bytes." << dendl; @@ -14562,6 +14581,8 @@ void PrimaryLogPG::_scrub_finish() !info.stats.hitset_stats_invalid) || (scrub_cstat.sum.num_bytes_hit_set_archive != info.stats.stats.sum.num_bytes_hit_set_archive && !info.stats.hitset_bytes_stats_invalid) || + (scrub_cstat.sum.num_objects_manifest != info.stats.stats.sum.num_objects_manifest && + !info.stats.manifest_stats_invalid) || scrub_cstat.sum.num_whiteouts != info.stats.stats.sum.num_whiteouts || scrub_cstat.sum.num_bytes != info.stats.stats.sum.num_bytes) { osd->clog->error() << info.pgid << " " << mode @@ -14574,6 +14595,7 @@ void PrimaryLogPG::_scrub_finish() << 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, " + << scrub_cstat.sum.num_objects_manifest << "/" << info.stats.stats.sum.num_objects_manifest << " manifest objects, " << scrub_cstat.sum.num_bytes_hit_set_archive << "/" << info.stats.stats.sum.num_bytes_hit_set_archive << " hit_set_archive bytes."; ++scrubber.shallow_errors; @@ -14585,6 +14607,7 @@ void PrimaryLogPG::_scrub_finish() info.stats.hitset_stats_invalid = false; info.stats.hitset_bytes_stats_invalid = false; info.stats.pin_stats_invalid = false; + info.stats.manifest_stats_invalid = false; publish_stats_to_osd(); share_pg_info(); } diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index bf53249c0a7f5..ca5ddc0bea3cc 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1965,11 +1965,12 @@ void object_stat_sum_t::dump(Formatter *f) const f->dump_int("num_objects_pinned", num_objects_pinned); f->dump_int("num_legacy_snapsets", num_legacy_snapsets); f->dump_int("num_large_omap_objects", num_large_omap_objects); + f->dump_int("num_objects_manifest", num_objects_manifest); } void object_stat_sum_t::encode(bufferlist& bl) const { - ENCODE_START(17, 14, bl); + ENCODE_START(18, 14, bl); #if defined(CEPH_LITTLE_ENDIAN) bl.append((char *)(&num_bytes), sizeof(object_stat_sum_t)); #else @@ -2009,6 +2010,7 @@ void object_stat_sum_t::encode(bufferlist& bl) const encode(num_objects_missing, bl); encode(num_legacy_snapsets, bl); encode(num_large_omap_objects, bl); + encode(num_objects_manifest, bl); #endif ENCODE_FINISH(bl); } @@ -2016,9 +2018,9 @@ void object_stat_sum_t::encode(bufferlist& bl) const void object_stat_sum_t::decode(bufferlist::iterator& bl) { bool decode_finish = false; - DECODE_START(17, bl); // make sure to also update fast decode below + DECODE_START(18, bl); // make sure to also update fast decode below #if defined(CEPH_LITTLE_ENDIAN) - if (struct_v >= 17) { // this must match newest decode version + if (struct_v >= 18) { // this must match newest decode version bl.copy(sizeof(object_stat_sum_t), (char*)(&num_bytes)); decode_finish = true; } @@ -2066,6 +2068,9 @@ void object_stat_sum_t::decode(bufferlist::iterator& bl) if (struct_v >= 17) { decode(num_large_omap_objects, bl); } + if (struct_v >= 18) { + decode(num_objects_manifest, bl); + } } DECODE_FINISH(bl); } @@ -2106,6 +2111,7 @@ void object_stat_sum_t::generate_test_instances(list& o) a.num_evict_mode_full = 0; a.num_objects_pinned = 20; a.num_large_omap_objects = 5; + a.num_objects_manifest = 2; o.push_back(new object_stat_sum_t(a)); } @@ -2147,6 +2153,7 @@ void object_stat_sum_t::add(const object_stat_sum_t& o) num_objects_pinned += o.num_objects_pinned; num_legacy_snapsets += o.num_legacy_snapsets; num_large_omap_objects += o.num_large_omap_objects; + num_objects_manifest += o.num_objects_manifest; } void object_stat_sum_t::sub(const object_stat_sum_t& o) @@ -2187,6 +2194,7 @@ void object_stat_sum_t::sub(const object_stat_sum_t& o) num_objects_pinned -= o.num_objects_pinned; num_legacy_snapsets -= o.num_legacy_snapsets; num_large_omap_objects -= o.num_large_omap_objects; + num_objects_manifest -= o.num_objects_manifest; } bool operator==(const object_stat_sum_t& l, const object_stat_sum_t& r) @@ -2227,7 +2235,8 @@ bool operator==(const object_stat_sum_t& l, const object_stat_sum_t& r) l.num_evict_mode_full == r.num_evict_mode_full && l.num_objects_pinned == r.num_objects_pinned && l.num_legacy_snapsets == r.num_legacy_snapsets && - l.num_large_omap_objects == r.num_large_omap_objects; + l.num_large_omap_objects == r.num_large_omap_objects && + l.num_objects_manifest == r.num_objects_manifest; } // -- object_stat_collection_t -- @@ -2324,6 +2333,7 @@ void pg_stat_t::dump(Formatter *f) const f->dump_bool("hitset_stats_invalid", hitset_stats_invalid); f->dump_bool("hitset_bytes_stats_invalid", hitset_bytes_stats_invalid); f->dump_bool("pin_stats_invalid", pin_stats_invalid); + f->dump_bool("manifest_stats_invalid", manifest_stats_invalid); f->dump_unsigned("snaptrimq_len", snaptrimq_len); stats.dump(f); f->open_array_section("up"); @@ -2370,7 +2380,7 @@ void pg_stat_t::dump_brief(Formatter *f) const void pg_stat_t::encode(bufferlist &bl) const { - ENCODE_START(24, 22, bl); + ENCODE_START(25, 22, bl); encode(version, bl); encode(reported_seq, bl); encode(reported_epoch, bl); @@ -2415,6 +2425,7 @@ void pg_stat_t::encode(bufferlist &bl) const __u32 top_state = (state >> 32); encode(top_state, bl); encode(purged_snaps, bl); + encode(manifest_stats_invalid, bl); ENCODE_FINISH(bl); } @@ -2422,7 +2433,7 @@ void pg_stat_t::decode(bufferlist::iterator &bl) { bool tmp; uint32_t old_state; - DECODE_START(24, bl); + DECODE_START(25, bl); decode(version, bl); decode(reported_seq, bl); decode(reported_epoch, bl); @@ -2479,6 +2490,12 @@ void pg_stat_t::decode(bufferlist::iterator &bl) } else { state = old_state; } + if (struct_v >= 25) { + decode(tmp, bl); + manifest_stats_invalid = tmp; + } else { + manifest_stats_invalid = true; + } } DECODE_FINISH(bl); } @@ -2575,6 +2592,7 @@ bool operator==(const pg_stat_t& l, const pg_stat_t& r) l.up_primary == r.up_primary && l.acting_primary == r.acting_primary && l.pin_stats_invalid == r.pin_stats_invalid && + l.manifest_stats_invalid == r.manifest_stats_invalid && l.purged_snaps == r.purged_snaps && l.snaptrimq_len == r.snaptrimq_len; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 4a7c36f4d4a53..cf9c3bd80dd2b 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1664,6 +1664,7 @@ struct object_stat_sum_t { int64_t num_objects_missing; int64_t num_legacy_snapsets; ///< upper bound on pre-luminous-style SnapSets int64_t num_large_omap_objects = 0; + int64_t num_objects_manifest = 0; object_stat_sum_t() : num_bytes(0), @@ -1712,6 +1713,7 @@ struct object_stat_sum_t { FLOOR(num_wr_kb); FLOOR(num_scrub_errors); FLOOR(num_large_omap_objects); + FLOOR(num_objects_manifest); FLOOR(num_shallow_scrub_errors); FLOOR(num_deep_scrub_errors); FLOOR(num_objects_recovered); @@ -1767,6 +1769,7 @@ struct object_stat_sum_t { SPLIT(num_wr_kb); SPLIT(num_scrub_errors); SPLIT(num_large_omap_objects); + SPLIT(num_objects_manifest); SPLIT(num_shallow_scrub_errors); SPLIT(num_deep_scrub_errors); SPLIT(num_objects_recovered); @@ -1824,6 +1827,7 @@ struct object_stat_sum_t { sizeof(num_wr_kb) + sizeof(num_scrub_errors) + sizeof(num_large_omap_objects) + + sizeof(num_objects_manifest) + sizeof(num_objects_recovered) + sizeof(num_bytes_recovered) + sizeof(num_keys_recovered) + @@ -1974,6 +1978,7 @@ struct pg_stat_t { bool hitset_stats_invalid:1; bool hitset_bytes_stats_invalid:1; bool pin_stats_invalid:1; + bool manifest_stats_invalid:1; pg_stat_t() : reported_seq(0), @@ -1991,7 +1996,8 @@ struct pg_stat_t { omap_stats_invalid(false), hitset_stats_invalid(false), hitset_bytes_stats_invalid(false), - pin_stats_invalid(false) + pin_stats_invalid(false), + manifest_stats_invalid(false) { } epoch_t get_effective_last_epoch_clean() const { -- 2.39.5