From: Loic Dachary Date: Fri, 28 Nov 2014 15:57:27 +0000 (+0100) Subject: tests: convert osd-scrub-repair to ceph_objectstore_tool X-Git-Tag: v0.91~55^2^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F3033%2Fhead;p=ceph.git tests: convert osd-scrub-repair to ceph_objectstore_tool http://tracker.ceph.com/issues/10201 Fixes: #10201 Signed-off-by: Loic Dachary --- diff --git a/src/test/osd/osd-scrub-repair.sh b/src/test/osd/osd-scrub-repair.sh index 0d7c63c7ade3..8eb6d7c15b44 100755 --- a/src/test/osd/osd-scrub-repair.sh +++ b/src/test/osd/osd-scrub-repair.sh @@ -14,111 +14,113 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library Public License for more details. # - -source test/mon/mon-test-helpers.sh -source test/osd/osd-test-helpers.sh +source test/ceph-helpers.sh function run() { local dir=$1 + shift export CEPH_MON="127.0.0.1:7107" export CEPH_ARGS CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none " CEPH_ARGS+="--mon-host=$CEPH_MON " - setup $dir || return 1 - run_mon $dir a --public-addr $CEPH_MON || return 1 - for id in $(seq 0 3) ; do - run_osd $dir $id || return 1 - done - FUNCTIONS=${FUNCTIONS:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')} - for TEST_function in $FUNCTIONS ; do - if ! $TEST_function $dir ; then - cat $dir/a/log - return 1 - fi + local funcs=${@:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')} + for func in $funcs ; do + $func $dir || return 1 done - teardown $dir || return 1 } -function wait_for_repair() { +function add_something() { 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 + local poolname=$2 + + wait_for_clean || return 1 + + ceph osd set noscrub || return 1 + ceph osd set nodeep-scrub || return 1 + + local payload=ABCDEF + echo $payload > $dir/ORIGINAL + rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1 } -function TEST_log_repair() { +# +# Corrupt one copy of a replicated pool +# +function TEST_corrupt_and_repair_replicated() { 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 + setup $dir || return 1 + run_mon $dir a --osd_pool_default_size=2 || return 1 + run_osd $dir 0 || return 1 + run_osd $dir 1 || return 1 + + add_something $dir $poolname + corrupt_and_repair_one $dir $poolname $(get_not_primary $poolname SOMETHING) || return 1 + # Reproduces http://tracker.ceph.com/issues/8914 + corrupt_and_repair_one $dir $poolname $(get_primary $poolname SOMETHING) || return 1 + + teardown $dir || return 1 } -# -# 1) add an object -# 2) remove the corresponding file from the primary OSD -# 3) repair the PG # -# Reproduces http://tracker.ceph.com/issues/8914 +# 1) add an object +# 2) remove the corresponding file from a designated OSD +# 3) repair the PG +# 4) check that the file has been restored in the designated OSD # -function TEST_bug_8914() { +function corrupt_and_repair_one() { local dir=$1 - local poolname=rbd - local payload=ABCDEF + local poolname=$2 + local osd=$3 + + # + # 1) remove the corresponding file from the OSD + # + objectstore_tool $dir $osd SOMETHING remove || return 1 + # + # 2) repair the PG + # + local pg=$(get_pg $poolname SOMETHING) + repair $pg + # + # 3) The file must be back + # + objectstore_tool $dir $osd SOMETHING list-attrs || return 1 + rados --pool $poolname get SOMETHING $dir/COPY || return 1 + diff $dir/ORIGINAL $dir/COPY || return 1 +} + wait_for_clean || return 1 - ./ceph osd set noscrub || return 1 - ./ceph osd set nodeep-scrub || return 1 + ceph osd set noscrub || return 1 + ceph osd set nodeep-scrub || return 1 + local payload=ABCDEF echo $payload > $dir/ORIGINAL # - # 1) add an object + # 1) add an object # - ./rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1 - local -a osds=($(get_osds $poolname SOMETHING)) - local file=$(find $dir/${osds[$first]} -name '*SOMETHING*') - local -i tries=0 - while [ ! -f $file -a $tries -lt 100 ] ; do - let tries++ - sleep 1 - done - grep --quiet --recursive --text $payload $file || return 1 + rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1 # - # 2) remove the corresponding file from the primary OSD + # 2) remove the corresponding file from the OSD # - rm $file + objectstore_tool $dir $osd SOMETHING remove || return 1 # # 3) repair the PG # local pg=$(get_pg $poolname SOMETHING) - ./ceph pg repair $pg - local -i tries=0 - while [ ! -f $file -a $tries -lt 100 ] ; do - let tries++ - sleep 1 - done + repair $pg # # The file must be back # - test -f $file || return 1 + objectstore_tool $dir $osd SOMETHING list-attrs || return 1 } -main osd-scrub-repair +main osd-scrub-repair "$@" # Local Variables: -# compile-command: "cd ../.. ; make -j4 && test/osd/osd-scrub-repair.sh" +# compile-command: "cd ../.. ; make -j4 && \ +# test/osd/osd-scrub-repair.sh # TEST_corrupt_and_repair_primary_replicated" # End: