OSD_FLAGS
_________
-One or more OSDs has a per-OSD flag of interest set. These flags include:
+One or more OSDs or CRUSH nodes has a flag of interest set. These flags include:
-* *noup*: OSD is not allowed to start
-* *nodown*: failure reports for this OSD will be ignored
-* *noin*: if this OSD was previously marked `out` automatically
- after a failure, it will not be marked in when it stats
-* *noout*: if this OSD is down it will not automatically be marked
+* *noup*: these OSDs are not allowed to start
+* *nodown*: failure reports for these OSDs will be ignored
+* *noin*: if these OSDs were previously marked `out` automatically
+ after a failure, they will not be marked in when they start
+* *noout*: if these OSDs are down they will not automatically be marked
`out` after the configured interval
-Per-OSD flags can be set and cleared with::
+These flags can be set and cleared with::
- ceph osd add-<flag> <osd-id>
- ceph osd rm-<flag> <osd-id>
+ ceph osd add-<flag> <osd-id-or-crush-node-name>
+ ceph osd rm-<flag> <osd-id-or-crush-node-name>
For example, ::
ceph osd rm-nodown osd.123
+ ceph osd rm-noout hostfoo
OLD_CRUSH_TUNABLES
__________________
detail.push_back(ss.str());
}
}
+ for (auto& i : crush_node_flags) {
+ if (i.second && crush->item_exists(i.first)) {
+ ostringstream ss;
+ set<string> states;
+ OSDMap::calc_state_set(i.second, states);
+ int t = i.first >= 0 ? 0 : crush->get_bucket_type(i.first);
+ const char *tn = crush->get_type_name(t);
+ ss << (tn ? tn : "node") << " "
+ << crush->get_item_name(i.first) << " has flags " << states;
+ detail.push_back(ss.str());
+ }
+ }
if (!detail.empty()) {
ostringstream ss;
- ss << detail.size() << " osd(s) have {NOUP,NODOWN,NOIN,NOOUT} flags set";
+ ss << detail.size() << " OSDs or CRUSH nodes have {NOUP,NODOWN,NOIN,NOOUT} flags set";
auto& d = checks->add("OSD_FLAGS", HEALTH_WARN, ss.str());
d.detail.swap(detail);
}