int DBObjectMap::check(std::ostream &out, bool repair)
{
int errors = 0;
+ bool repaired = false;
map<uint64_t, uint64_t> parent_to_num_children;
map<uint64_t, uint64_t> parent_to_actual_num_children;
KeyValueDB::Iterator iter = db->get_iterator(HOBJECT_TO_SEQ);
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);
}
parent_to_actual_num_children.erase(i->first);
}
+ if (errors == 0 && repaired)
+ return -1;
return errors;
}
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;
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") {