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);
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;
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;
}
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;
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++;
++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 &&
<< 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."
!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 &&
<< 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, "
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);
::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;
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);
}
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));
}
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)
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)
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 --
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);
::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);
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);
}
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 --
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),
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) {
FLOOR(num_flush_mode_low);
FLOOR(num_evict_mode_some);
FLOOR(num_evict_mode_full);
+ FLOOR(num_objects_pinned);
#undef FLOOR
}
SPLIT(num_flush_mode_low);
SPLIT(num_evict_mode_some);
SPLIT(num_evict_mode_full);
+ SPLIT(num_objects_pinned);
#undef SPLIT
}
bool omap_stats_invalid;
bool hitset_stats_invalid;
bool hitset_bytes_stats_invalid;
+ bool pin_stats_invalid;
/// up, acting primaries
int32_t up_primary;
omap_stats_invalid(false),
hitset_stats_invalid(false),
hitset_bytes_stats_invalid(false),
+ pin_stats_invalid(false),
up_primary(-1),
acting_primary(-1)
{ }