From 1704f62c0831e6b07138f7dd14a89fef3c9ed2c1 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Mon, 20 Mar 2017 17:28:45 -0700 Subject: [PATCH] filestore, tools: Fix logging of DBObjectMap check() repairs Signed-off-by: David Zafman --- src/os/filestore/DBObjectMap.cc | 9 +++++++-- src/tools/ceph_osdomap_tool.cc | 10 ++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/os/filestore/DBObjectMap.cc b/src/os/filestore/DBObjectMap.cc index ed649085274..b0430c499e5 100644 --- a/src/os/filestore/DBObjectMap.cc +++ b/src/os/filestore/DBObjectMap.cc @@ -58,6 +58,7 @@ static void append_escaped(const string &in, string *out) int DBObjectMap::check(std::ostream &out, bool repair) { int errors = 0; + bool repaired = false; map parent_to_num_children; map parent_to_actual_num_children; KeyValueDB::Iterator iter = db->get_iterator(HOBJECT_TO_SEQ); @@ -90,6 +91,7 @@ int DBObjectMap::check(std::ostream &out, bool repair) out << complete_iter->key() << " -> " << string(complete_iter->value().c_str(), complete_iter->value().length() - 1) << std::endl; } if (repair) { + repaired = true; KeyValueDB::Transaction t = db->get_transaction(); t->rmkeys_by_prefix(USER_PREFIX + header_key(header.seq) + COMPLETE_PREFIX); db->submit_transaction(t); @@ -135,6 +137,8 @@ int DBObjectMap::check(std::ostream &out, bool repair) } parent_to_actual_num_children.erase(i->first); } + if (errors == 0 && repaired) + return -1; return errors; } @@ -1062,8 +1066,9 @@ int DBObjectMap::init(bool do_upgrade) ostringstream ss; int errors = check(ss, true); if (errors) { - dout(5) << ss.str() << dendl; - return -EINVAL; + derr << ss.str() << dendl; + if (errors > 0) + return -EINVAL; } dout(20) << "(init)dbobjectmap: seq is " << state.seq << dendl; return 0; diff --git a/src/tools/ceph_osdomap_tool.cc b/src/tools/ceph_osdomap_tool.cc index 0ac44105253..d27a2802bfb 100644 --- a/src/tools/ceph_osdomap_tool.cc +++ b/src/tools/ceph_osdomap_tool.cc @@ -164,11 +164,13 @@ int main(int argc, char **argv) { ostringstream ss; bool repair = (cmd == "repair"); r = omap.check(ss, repair); - if (r > 0) { + if (r) { std::cerr << ss.str() << std::endl; - std::cerr << "check got " << r << " error(s)" << std::endl; - r = 1; - goto done; + if (r > 0) { + std::cerr << "check got " << r << " error(s)" << std::endl; + r = 1; + goto done; + } } std::cout << (repair ? "repair" : "check") << " succeeded" << std::endl; } else if (cmd == "dump-headers") { -- 2.39.5