#include <iomanip> // for std::setw()
#include <sstream>
+#include <algorithm>
+#include <vector>
#define dout_context g_ceph_context
void PGMap::dump_osd_perf_stats(ceph::Formatter *f) const
{
f->open_array_section("osd_perf_infos");
- for (auto i = osd_stat.begin();
- i != osd_stat.end();
- ++i) {
- f->open_object_section("osd");
- f->dump_int("id", i->first);
- {
- f->open_object_section("perf_stats");
- i->second.os_perf_stat.dump(f);
+ std::vector<int> sorted_osds;
+ for (auto i = osd_stat.begin(); i != osd_stat.end(); ++i) {
+ sorted_osds.push_back(i->first);
+ }
+ std::sort(sorted_osds.begin(), sorted_osds.end());
+
+ for (int osd_id : sorted_osds) {
+ auto i = osd_stat.find(osd_id);
+ if (i != osd_stat.end()) {
+ f->open_object_section("osd");
+ f->dump_int("id", i->first);
+ {
+ f->open_object_section("perf_stats");
+ i->second.os_perf_stat.dump(f);
+ f->close_section();
+ }
f->close_section();
}
- f->close_section();
}
f->close_section();
}
tab.define_column("osd", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("commit_latency(ms)", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("apply_latency(ms)", TextTable::LEFT, TextTable::RIGHT);
- for (auto i = osd_stat.begin();
- i != osd_stat.end();
- ++i) {
- tab << i->first;
- tab << i->second.os_perf_stat.os_commit_latency_ns / 1000000ull;
- tab << i->second.os_perf_stat.os_apply_latency_ns / 1000000ull;
- tab << TextTable::endrow;
+
+ std::vector<int32_t> sorted_osds;
+ for (auto i = osd_stat.begin(); i != osd_stat.end(); ++i) {
+ sorted_osds.push_back(i->first);
+ }
+ std::sort(sorted_osds.begin(), sorted_osds.end());
+
+ for (int osd_id : sorted_osds) {
+ auto i = osd_stat.find(osd_id);
+ if (i != osd_stat.end()) {
+ tab << i->first;
+ tab << i->second.os_perf_stat.os_commit_latency_ns / 1000000ull;
+ tab << i->second.os_perf_stat.os_apply_latency_ns / 1000000ull;
+ tab << TextTable::endrow;
+ }
}
(*ss) << tab;
}