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);
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);
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;
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;
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;
}
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;
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++;
++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
<< 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;
!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
<< 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;
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();
}
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
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);
}
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;
}
if (struct_v >= 17) {
decode(num_large_omap_objects, bl);
}
+ if (struct_v >= 18) {
+ decode(num_objects_manifest, bl);
+ }
}
DECODE_FINISH(bl);
}
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));
}
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)
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)
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 --
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");
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);
__u32 top_state = (state >> 32);
encode(top_state, bl);
encode(purged_snaps, bl);
+ encode(manifest_stats_invalid, bl);
ENCODE_FINISH(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);
} else {
state = old_state;
}
+ if (struct_v >= 25) {
+ decode(tmp, bl);
+ manifest_stats_invalid = tmp;
+ } else {
+ manifest_stats_invalid = true;
+ }
}
DECODE_FINISH(bl);
}
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;
}
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),
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);
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);
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) +
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),
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 {