scrubber.start = hobject_t();
scrubber.state = PG::Scrubber::NEW_CHUNK;
+ {
+ bool repair = state_test(PG_STATE_REPAIR);
+ bool deep_scrub = state_test(PG_STATE_DEEP_SCRUB);
+ const char *mode = (repair ? "repair": (deep_scrub ? "deep-scrub" : "scrub"));
+ stringstream oss;
+ oss << info.pgid.pgid << " " << mode << " starts" << std::endl;
+ osd->clog->info(oss);
+ }
break;
case PG::Scrubber::NEW_CHUNK:
teardown $dir || return 1
}
+function wait_for_repair() {
+ local dir=$1
+ local primary=$2
+ local pg=$3
+ local -i tries=0
+ while [ $tries -lt 100 ] ; do
+ CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-osd.$primary.asok log flush || return 1
+ if grep --quiet "$pg repair ok" $dir/osd-$primary.log ; then
+ return 0
+ fi
+ let tries++
+ sleep 1
+ done
+ grep --quiet "$pg repair ok" $dir/osd-$primary.log || return 1
+}
+
+function TEST_log_repair() {
+ local dir=$1
+ local poolname=rbd
+ local pg=$(get_pg $poolname SOMETHING)
+ local -a osds=($(get_osds $poolname SOMETHING))
+ local primary=${osds[$first]}
+
+ ./ceph pg repair $pg
+ wait_for_repair $dir $primary $pg
+ grep --quiet "$pg repair starts" $dir/osd-$primary.log || return 1
+}
+
#
# 1) add an object
# 2) remove the corresponding file from the primary OSD