uint64_t num_object_clones;
uint64_t num_object_copies; // num_objects * num_replicas
uint64_t num_objects_missing_on_primary;
+ uint64_t num_objects_unfound;
uint64_t num_objects_degraded;
uint64_t num_rd, num_rd_kb,num_wr, num_wr_kb;
};
uint64_t num_object_clones;
uint64_t num_object_copies; // num_objects * num_replicas
uint64_t num_objects_missing_on_primary;
+ uint64_t num_objects_unfound;
uint64_t num_objects_degraded;
uint64_t num_rd, num_rd_kb, num_wr, num_wr_kb;
};
v.num_object_clones = p->second.num_object_clones;
v.num_object_copies = p->second.num_object_copies;
v.num_objects_missing_on_primary = p->second.num_objects_missing_on_primary;
+ v.num_objects_unfound = p->second.num_objects_unfound;
v.num_objects_degraded = p->second.num_objects_degraded;
v.num_rd = p->second.num_rd;
v.num_rd_kb = p->second.num_rd_kb;
stats->num_object_clones = r.num_object_clones;
stats->num_object_copies = r.num_object_copies;
stats->num_objects_missing_on_primary = r.num_objects_missing_on_primary;
+ stats->num_objects_unfound = r.num_objects_unfound;
stats->num_objects_degraded = r.num_objects_degraded;
stats->num_rd = r.num_rd;
stats->num_rd_kb = r.num_rd_kb;
ss << "last_pg_scan " << last_pg_scan << std::endl;
ss << "full_ratio " << full_ratio << std::endl;
ss << "nearfull_ratio " << nearfull_ratio << std::endl;
- ss << "pg_stat\tobjects\tmip\tdegr\tkb\tbytes\tlog\tdisklog\tstate\tv\treported\tup\tacting\tlast_scrub" << std::endl;
+ ss << "pg_stat\tobjects\tmip\tunf\tdegr\tkb\tbytes\tlog\tdisklog\tstate\tv\treported\tup\tacting\tlast_scrub" << std::endl;
for (set<pg_t>::const_iterator p = pg_set.begin();
p != pg_set.end();
p++) {
<< "\t" << st.num_objects
//<< "\t" << st.num_object_copies
<< "\t" << st.num_objects_missing_on_primary
+ << "\t" << st.num_objects_unfound
<< "\t" << st.num_objects_degraded
<< "\t" << st.num_kb
<< "\t" << st.num_bytes
<< "\t" << p->second.num_objects
//<< "\t" << p->second.num_object_copies
<< "\t" << p->second.num_objects_missing_on_primary
+ << "\t" << p->second.num_objects_unfound
<< "\t" << p->second.num_objects_degraded
<< "\t" << p->second.num_kb
<< "\t" << p->second.num_bytes
ss << " sum\t" << pg_sum.num_objects
//<< "\t" << pg_sum.num_object_copies
<< "\t" << pg_sum.num_objects_missing_on_primary
+ << "\t" << pg_sum.num_objects_unfound
<< "\t" << pg_sum.num_objects_degraded
<< "\t" << pg_sum.num_kb
<< "\t" << pg_sum.num_bytes
degraded += peer_missing[acting[i]].num_missing();
}
pg_stats_stable.num_objects_degraded += degraded;
+
+ pg_stats_stable.num_objects_unfound =
+ missing.num_missing() - missing_loc.size();
}
dout(15) << "update_stats " << pg_stats_stable.reported << dendl;
uint64_t num_objects;
uint64_t num_object_clones;
uint64_t num_object_copies; // num_objects * num_replicas
+
+ // The number of objects missing on the primary OSD
uint64_t num_objects_missing_on_primary;
+
uint64_t num_objects_degraded;
uint64_t log_size;
uint64_t ondisk_log_size; // >= active_log_size
uint64_t num_rd, num_rd_kb;
uint64_t num_wr, num_wr_kb;
+
+ // The number of objects missing on the primary OSD
+ uint64_t num_objects_unfound;
vector<int> up, acting;
num_objects(0), num_object_clones(0), num_object_copies(0),
num_objects_missing_on_primary(0), num_objects_degraded(0),
log_size(0), ondisk_log_size(0),
- num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0)
+ num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0),
+ num_objects_unfound(0)
{ }
void encode(bufferlist &bl) const {
- __u8 v = 3;
+ __u8 v = 4;
::encode(v, bl);
::encode(version, bl);
::encode(num_wr, bl);
::encode(num_wr_kb, bl);
::encode(up, bl);
+ ::encode(num_objects_unfound, bl);
::encode(acting, bl);
}
void decode(bufferlist::iterator &bl) {
::decode(num_wr, bl);
::decode(num_wr_kb, bl);
}
- if (v >= 3)
+ if (v >= 3) {
::decode(up, bl);
+ }
+ if (v >= 4) {
+ ::decode(num_objects_unfound, bl);
+ }
::decode(acting, bl);
}
num_rd_kb += o.num_rd_kb;
num_wr += o.num_wr;
num_wr_kb += o.num_wr_kb;
+ num_objects_unfound += o.num_objects_unfound;
}
void sub(const pg_stat_t& o) {
num_bytes -= o.num_bytes;
num_rd_kb -= o.num_rd_kb;
num_wr -= o.num_wr;
num_wr_kb -= o.num_wr_kb;
+ num_objects_unfound -= o.num_objects_unfound;
}
};
WRITE_CLASS_ENCODER(pg_stat_t)
uint64_t num_rd, num_rd_kb;
uint64_t num_wr, num_wr_kb;
+ // The number of logical objects that are still unfound
+ uint64_t num_objects_unfound;
+
pool_stat_t() : num_bytes(0), num_kb(0),
num_objects(0), num_object_clones(0), num_object_copies(0),
num_objects_missing_on_primary(0), num_objects_degraded(0),
log_size(0), ondisk_log_size(0),
- num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0)
+ num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0),
+ num_objects_unfound(0)
{ }
void encode(bufferlist &bl) const {
- __u8 v = 2;
+ __u8 v = 3;
::encode(v, bl);
::encode(num_bytes, bl);
::encode(num_kb, bl);
::encode(num_rd_kb, bl);
::encode(num_wr, bl);
::encode(num_wr_kb, bl);
+ ::encode(num_objects_unfound, bl);
}
void decode(bufferlist::iterator &bl) {
__u8 v;
::decode(num_wr, bl);
::decode(num_wr_kb, bl);
}
+ if (v >= 3) {
+ ::decode(num_objects_unfound, bl);
+ }
}
void add(const pg_stat_t& o) {
num_rd_kb += o.num_rd_kb;
num_wr += o.num_wr;
num_wr_kb += o.num_wr_kb;
+ num_objects_unfound += o.num_objects_unfound;
}
void sub(const pg_stat_t& o) {
num_bytes -= o.num_bytes;
num_rd_kb -= o.num_rd_kb;
num_wr -= o.num_wr;
num_wr_kb -= o.num_wr_kb;
+ num_objects_unfound -= o.num_objects_unfound;
}
};
WRITE_CLASS_ENCODER(pool_stat_t)
map<string,pool_stat_t> stats;
rados.get_pool_stats(vec, stats);
- printf("%-15s %12s %12s %12s %12s %12s %12s %12s %12s\n",
- "pool name", "KB", "objects", "clones", "degraded", "rd", "rd KB", "wr", "wr KB");
+ printf("%-15s "
+ "%12s %12s %12s %12s "
+ "%12s %12s %12s %12s %12s\n",
+ "pool name",
+ "KB", "objects", "clones", "degraded",
+ "unfound", "rd", "rd KB", "wr", "wr KB");
for (map<string,pool_stat_t>::iterator i = stats.begin(); i != stats.end(); ++i) {
- printf("%-15s %12lld %12lld %12lld %12lld %12lld %12lld %12lld %12lld\n",
+ printf("%-15s "
+ "%12lld %12lld %12lld %12lld"
+ "%12lld %12lld %12lld %12lld %12lld\n",
i->first.c_str(),
(long long)i->second.num_kb,
(long long)i->second.num_objects,
(long long)i->second.num_object_clones,
(long long)i->second.num_objects_degraded,
+ (long long)i->second.num_objects_unfound,
(long long)i->second.num_rd, (long long)i->second.num_rd_kb,
(long long)i->second.num_wr, (long long)i->second.num_wr_kb);
}
str(boost::format("%llu") % stat.num_objects_missing_on_primary));
insert_stats("Number of Objects Degraded",
str(boost::format("%llu") % stat.num_objects_degraded));
+ insert_stats("Number of Objects Unfound",
+ str(boost::format("%llu") % stat.num_objects_unfound));
insert_stats("KB", str(boost::format("%llu") % stat.num_kb));
insert_stats("Bytes", str(boost::format("%llu") % stat.num_bytes));
insert_stats("Log Size", str(boost::format("%llu") % stat.log_size));