void PGMapDigest::encode(bufferlist& bl, uint64_t features) const
{
// NOTE: see PGMap::encode_digest
- ENCODE_START(4, 1, bl);
+ ENCODE_START(5, 1, bl);
::encode(num_pg, bl);
::encode(num_pg_active, bl);
::encode(num_osd, bl);
::encode(per_pool_sum_deltas_stamps, bl);
::encode(pg_sum_delta, bl, features);
::encode(stamp_delta, bl);
+ ::encode(num_pg_unknown, bl);
ENCODE_FINISH(bl);
}
void PGMapDigest::decode(bufferlist::iterator& p)
{
- DECODE_START(4, p);
+ DECODE_START(5, p);
::decode(num_pg, p);
::decode(num_pg_active, p);
::decode(num_osd, p);
::decode(pg_sum_delta, p);
::decode(stamp_delta, p);
}
+ if (struct_v >= 5) {
+ ::decode(num_pg_unknown, p);
+ }
DECODE_FINISH(p);
}
{
f->dump_unsigned("num_pg", num_pg);
f->dump_unsigned("num_pg_active", num_pg_active);
+ f->dump_unsigned("num_pg_unknown", num_pg_unknown);
f->dump_unsigned("num_osd", num_osd);
f->dump_object("pool_sum", pg_sum);
f->dump_object("osd_sum", osd_sum);
}
bool pad = false;
- if (num_pg_active < num_pg) {
- float p = (float)num_pg_active / (float)num_pg;
+
+ if (num_pg_unknown > 0) {
+ float p = (float)num_pg_unknown / (float)num_pg;
+ if (f) {
+ f->dump_float("unknown_pgs_ratio", p);
+ } else {
+ char b[20];
+ snprintf(b, sizeof(b), "%.3lf", p * 100.0);
+ *out << b << "% pgs unknown\n";
+ pad = true;
+ }
+ }
+
+ int num_pg_inactive = num_pg - num_pg_active - num_pg_unknown;
+ if (num_pg_inactive > 0) {
+ float p = (float)num_pg_inactive / (float)num_pg;
if (f) {
- f->dump_float("active_pgs_ratio", p);
+ f->dump_float("inactive_pgs_ratio", p);
} else {
+ if (pad) {
+ *out << " ";
+ }
char b[20];
- snprintf(b, sizeof(b), "%.3f", (1.0 - p) * 100.0);
- *out << b << "% pgs inactive\n";
+ snprintf(b, sizeof(b), "%.3f", p * 100.0);
+ *out << b << "% pgs not active\n";
pad = true;
}
}
{
num_pg = 0;
num_pg_active = 0;
+ num_pg_unknown = 0;
num_osd = 0;
pg_pool_sum.clear();
num_pg_by_pool.clear();
if (s.state & PG_STATE_ACTIVE) {
++num_pg_active;
}
+ if (s.state == 0) {
+ ++num_pg_unknown;
+ }
if (sameosds)
return;
if (s.state & PG_STATE_ACTIVE) {
--num_pg_active;
}
+ if (s.state == 0) {
+ --num_pg_unknown;
+ }
if (sameosds)
return;