{
stringstream ss;
ScrubMap scrubmap;
+ int errors = 0;
osd->map_lock.get_read();
lock();
*/
// ok, do the pg-type specific scrubbing
- _scrub(scrubmap);
+ errors += _scrub(scrubmap);
/*
lock();
}
*/
+ ss << info.pgid << " scrub " << errors << " errors";
+ osd->get_logclient()->log(errors ? LOG_ERROR:LOG_INFO, ss);
+
+
// finish up
info.stats.last_scrub = info.last_update;
info.stats.last_scrub_stamp = g_clock.now();
void scrub();
void build_scrub_map(ScrubMap &map);
- virtual void _scrub(ScrubMap &map) {}
+ virtual int _scrub(ScrubMap &map) { return 0; }
void sub_op_scrub(class MOSDSubOp *op);
void sub_op_scrub_reply(class MOSDSubOpReply *op);
// SCRUB
-void ReplicatedPG::_scrub(ScrubMap& scrubmap)
+int ReplicatedPG::_scrub(ScrubMap& scrubmap)
{
+ int errors = 0;
dout(10) << "_scrub" << dendl;
coll_t c = info.pgid.to_coll();
eversion_t v;
if (p->attrs.count("version") == 0) {
dout(0) << "scrub no 'version' attr on " << poid << dendl;
+ errors++;
continue;
}
p->attrs["version"].copy_out(0, sizeof(v), (char *)&v);
if (head != pobject_t()) {
derr(0) << " missing clone(s) for " << head << dendl;
assert(head == pobject_t()); // we had better be done
+ errors++;
}
bufferlist bl;
if (p->attrs.count("snapset") == 0) {
dout(0) << "no 'snapset' attr on " << p->poid << dendl;
+ errors++;
continue;
}
bl.push_back(p->attrs["snapset"]);
bufferlist bl;
if (p->attrs.count("snaps") == 0) {
dout(0) << "no 'snaps' attr on " << p->poid << dendl;
+ errors++;
continue;
}
bl.push_back(p->attrs["snaps"]);
eversion_t from;
if (p->attrs.count("from_version") == 0) {
dout(0) << "no 'from_version' attr on " << p->poid << dendl;
+ errors++;
continue;
}
p->attrs["from_version"].copy_out(0, sizeof(from), (char *)&from);
<< stat.num_bytes << "/" << info.stats.num_bytes << " bytes, "
<< stat.num_kb << "/" << info.stats.num_kb << " kb.";
osd->get_logclient()->log(LOG_ERROR, ss);
- } else {
- stringstream ss;
- ss << info.pgid << " scrub ok";
- //osd->get_logclient()->log(LOG_DEBUG, ss);
+ errors++;
}
dout(10) << "scrub finish" << dendl;
+ return errors;
}