in src/kudu/tools/ksck_results.cc [213:316]
Status KsckResults::PrintTo(PrintMode mode, ostream& out) {
if (mode == PrintMode::JSON_PRETTY || mode == PrintMode::JSON_COMPACT) {
return PrintJsonTo(mode, out);
}
// First, report on the masters and master tablet.
std::sort(master_summaries.begin(), master_summaries.end(), ServerByHealthComparator);
RETURN_NOT_OK(PrintServerHealthSummaries(KsckServerType::MASTER,
master_summaries,
out));
if (mode == PrintMode::PLAIN_FULL || master_consensus_conflict) {
RETURN_NOT_OK(PrintConsensusMatrix(master_uuids,
boost::none,
master_consensus_state_map,
out));
}
out << endl;
RETURN_NOT_OK(PrintFlagTable(KsckServerType::MASTER,
master_summaries.size(),
master_flag_to_servers_map,
master_flag_tags_map,
out));
if (!master_flag_to_servers_map.empty()) {
out << endl;
}
// Then, on the health of the tablet servers.
std::sort(tserver_summaries.begin(), tserver_summaries.end(), ServerByHealthComparator);
RETURN_NOT_OK(PrintServerHealthSummaries(KsckServerType::TABLET_SERVER,
tserver_summaries,
out));
if (!tserver_summaries.empty()) {
out << endl;
}
RETURN_NOT_OK(PrintFlagTable(KsckServerType::TABLET_SERVER,
tserver_summaries.size(),
tserver_flag_to_servers_map,
tserver_flag_tags_map,
out));
if (!tserver_flag_to_servers_map.empty()) {
out << endl;
}
// Finally, in the "server section", print the version summary.
RETURN_NOT_OK(PrintVersionTable(master_summaries, tserver_summaries, out));
out << endl;
// Then, on each tablet.
RETURN_NOT_OK(PrintTabletSummaries(tablet_summaries, mode, out));
// Then, summarize the tablets by table.
// Sort the tables so unhealthy tables are easy to see at the bottom.
std::sort(table_summaries.begin(), table_summaries.end(),
[](const KsckTableSummary& left, const KsckTableSummary& right) {
return std::make_pair(left.TableStatus() != KsckCheckResult::HEALTHY, left.name) <
std::make_pair(right.TableStatus() != KsckCheckResult::HEALTHY, right.name);
});
RETURN_NOT_OK(PrintTableSummaries(table_summaries, out));
if (!table_summaries.empty()) {
out << endl;
}
// Next, report on checksum scans.
RETURN_NOT_OK(PrintChecksumResults(checksum_results, out));
if (!checksum_results.tables.empty()) {
out << endl;
}
// And, add a summary of all the things we checked.
RETURN_NOT_OK(PrintTotalCounts(*this, out));
out << endl;
// Penultimately, print the warnings.
if (!warning_messages.empty()) {
out << "==================" << endl;
out << "Warnings:" << endl;
out << "==================" << endl;
for (const auto& s : warning_messages) {
out << s.message().ToString() << endl;
}
out << endl;
}
// Finally, print a summary of all errors.
if (error_messages.empty()) {
// All good.
out << "OK" << endl;
} else {
// Something went wrong.
out << "==================" << endl;
out << "Errors:" << endl;
out << "==================" << endl;
for (const auto& s : error_messages) {
out << s.ToString() << endl;
}
out << endl;
out << "FAILED" << endl;
}
// Remember, we only return non-OK if printing failed, not if ksck checks failed.
return Status::OK();
}