diff --git a/src/mgr/MgrCommands.h b/src/mgr/MgrCommands.h index 62d3df508af22..3bd6cdbdcae6d 100644 --- a/src/mgr/MgrCommands.h +++ b/src/mgr/MgrCommands.h @@ -21,21 +21,21 @@ COMMAND("pg dump_pools_json", "show pg pools info in json only",\ COMMAND("pg ls-by-pool " \ "name=poolstr,type=CephString " \ - "name=states,type=CephChoices,strings=active|clean|down|scrubbing|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized|activating|peered,n=N,req=false ", \ + "name=states,type=CephString,n=N,req=false", \ "list pg with pool = [poolname]", "pg", "r", "cli,rest") COMMAND("pg ls-by-primary " \ "name=osd,type=CephOsdName " \ "name=pool,type=CephInt,req=false " \ - "name=states,type=CephChoices,strings=active|clean|down|scrubbing|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized|activating|peered,n=N,req=false ", \ + "name=states,type=CephString,n=N,req=false", \ "list pg with primary = [osd]", "pg", "r", "cli,rest") COMMAND("pg ls-by-osd " \ "name=osd,type=CephOsdName " \ "name=pool,type=CephInt,req=false " \ - "name=states,type=CephChoices,strings=active|clean|down|scrubbing|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized|activating|peered,n=N,req=false ", \ + "name=states,type=CephString,n=N,req=false", \ "list pg on osd [osd]", "pg", "r", "cli,rest") COMMAND("pg ls " \ "name=pool,type=CephInt,req=false " \ - "name=states,type=CephChoices,strings=active|clean|down|scrubbing|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized|activating|peered,n=N,req=false ", \ + "name=states,type=CephString,n=N,req=false", \ "list pg with specific pool, osd, state", "pg", "r", "cli,rest") COMMAND("pg dump_stuck " \ "name=stuckops,type=CephChoices,strings=inactive|unclean|stale|undersized|degraded,n=N,req=false " \ @@ -82,7 +82,7 @@ COMMAND("osd test-reweight-by-utilization " \ "name=max_osds,type=CephInt,req=false " \ "name=no_increasing,type=CephChoices,strings=--no-increasing,req=false",\ "dry run of reweight OSDs by utilization [overload-percentage-for-consideration, default 120]", \ - "osd", "rw", "cli,rest") + "osd", "r", "cli,rest") COMMAND("osd reweight-by-pg " \ "name=oload,type=CephInt,req=false " \ "name=max_change,type=CephFloat,req=false " \ @@ -96,7 +96,7 @@ COMMAND("osd test-reweight-by-pg " \ "name=max_osds,type=CephInt,req=false " \ "name=pools,type=CephPoolname,n=N,req=false", \ "dry run of reweight OSDs by PG distribution [overload-percentage-for-consideration, default 120]", \ - "osd", "rw", "cli,rest") + "osd", "r", "cli,rest") COMMAND("osd scrub " \ "name=who,type=CephString", \ diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 553a3c5b8aed0..1b5ce757c1be0 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -3146,40 +3146,45 @@ void PGMap::get_health_checks( // PG_NOT_SCRUBBED // PG_NOT_DEEP_SCRUBBED { - list detail, deep_detail; - const double age = cct->_conf->mon_warn_not_scrubbed + - cct->_conf->mon_scrub_interval; - utime_t cutoff = now; - cutoff -= age; - const double deep_age = cct->_conf->mon_warn_not_deep_scrubbed + - cct->_conf->osd_deep_scrub_interval; - utime_t deep_cutoff = now; - deep_cutoff -= deep_age; - for (auto& p : pg_stat) { - if (p.second.last_scrub_stamp < cutoff) { - ostringstream ss; - ss << "pg " << p.first << " not scrubbed since " - << p.second.last_scrub_stamp; - detail.push_back(ss.str()); + if (cct->_conf->mon_warn_not_scrubbed || + cct->_conf->mon_warn_not_deep_scrubbed) { + list detail, deep_detail; + const double age = cct->_conf->mon_warn_not_scrubbed + + cct->_conf->mon_scrub_interval; + utime_t cutoff = now; + cutoff -= age; + const double deep_age = cct->_conf->mon_warn_not_deep_scrubbed + + cct->_conf->osd_deep_scrub_interval; + utime_t deep_cutoff = now; + deep_cutoff -= deep_age; + for (auto& p : pg_stat) { + if (cct->_conf->mon_warn_not_scrubbed && + p.second.last_scrub_stamp < cutoff) { + ostringstream ss; + ss << "pg " << p.first << " not scrubbed since " + << p.second.last_scrub_stamp; + detail.push_back(ss.str()); + } + if (cct->_conf->mon_warn_not_deep_scrubbed && + p.second.last_deep_scrub_stamp < deep_cutoff) { + ostringstream ss; + ss << "pg " << p.first << " not deep-scrubbed since " + << p.second.last_deep_scrub_stamp; + deep_detail.push_back(ss.str()); + } } - if (p.second.last_deep_scrub_stamp < deep_cutoff) { - ostringstream ss; - ss << "pg " << p.first << " not deep-scrubbed since " - << p.second.last_deep_scrub_stamp; - deep_detail.push_back(ss.str()); + if (!detail.empty()) { + ostringstream ss; + ss << detail.size() << " pgs not scrubbed for " << age; + auto& d = checks->add("PG_NOT_SCRUBBED", HEALTH_WARN, ss.str()); + d.detail.swap(detail); + } + if (!deep_detail.empty()) { + ostringstream ss; + ss << deep_detail.size() << " pgs not deep-scrubbed for " << deep_age; + auto& d = checks->add("PG_NOT_DEEP_SCRUBBED", HEALTH_WARN, ss.str()); + d.detail.swap(deep_detail); } - } - if (!detail.empty()) { - ostringstream ss; - ss << detail.size() << " pgs not scrubbed for " << age; - auto& d = checks->add("PG_NOT_SCRUBBED", HEALTH_WARN, ss.str()); - d.detail.swap(detail); - } - if (!deep_detail.empty()) { - ostringstream ss; - ss << deep_detail.size() << " pgs not deep-scrubbed for " << deep_age; - auto& d = checks->add("PG_NOT_DEEP_SCRUBBED", HEALTH_WARN, ss.str()); - d.detail.swap(deep_detail); } } } @@ -3772,7 +3777,10 @@ int process_pg_map_command( break; } else { int filter = pg_string_state(state_str); - assert(filter != -1); + if (filter < 0) { + *ss << "'" << state_str << "' is not a valid pg state"; + return -EINVAL; + } state |= filter; }