From: Guang Yang Date: Mon, 19 Oct 2015 20:45:36 +0000 (+0000) Subject: test: add test for pg list_missing on EC pool X-Git-Tag: v10.0.3~170^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d4869a6f7c15143646d3795dd058146eddd27a7c;p=ceph.git test: add test for pg list_missing on EC pool Signed-off-by: Guang Yang --- diff --git a/src/test/osd/osd-scrub-repair.sh b/src/test/osd/osd-scrub-repair.sh index 13fac7c2a8ee..90561dea0f21 100755 --- a/src/test/osd/osd-scrub-repair.sh +++ b/src/test/osd/osd-scrub-repair.sh @@ -34,6 +34,7 @@ function run() { function add_something() { local dir=$1 local poolname=$2 + local obj=${3:-SOMETHING} wait_for_clean || return 1 @@ -42,7 +43,7 @@ function add_something() { local payload=ABCDEF echo $payload > $dir/ORIGINAL - rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1 + rados --pool $poolname put $obj $dir/ORIGINAL || return 1 } # @@ -232,6 +233,56 @@ function TEST_unfound_erasure_coded() { teardown $dir || return 1 } +# +# list_missing for EC pool +# +function TEST_list_missing_erasure_coded() { + local dir=$1 + local poolname=ecpool + local profile=myprofile + + setup $dir || return 1 + run_mon $dir a || return 1 + for id in $(seq 0 2) ; do + run_osd $dir $id || return 1 + done + wait_for_clean || return 1 + + ceph osd erasure-code-profile set $profile \ + k=2 m=1 ruleset-failure-domain=osd || return 1 + ceph osd pool create $poolname 1 1 erasure $profile \ + || return 1 + wait_for_clean || return 1 + + # Put an object and remove the two shards (including primary) + add_something $dir $poolname OBJ0 || return 1 + local -a osds=($(get_osds $poolname OBJ0)) + objectstore_tool $dir ${osds[0]} OBJ0 remove || return 1 + objectstore_tool $dir ${osds[1]} OBJ0 remove || return 1 + + # Put another object and remove two shards (excluding primary) + add_something $dir $poolname OBJ1 || return 1 + local -a osds=($(get_osds $poolname OBJ1)) + objectstore_tool $dir ${osds[1]} OBJ1 remove || return 1 + objectstore_tool $dir ${osds[2]} OBJ1 remove || return 1 + + # Get get - both objects should in the same PG + local pg=$(get_pg $poolname OBJ0) + + # Repair the PG, which triggers the recovering, + # and should mark the object as unfound + ceph pg repair $pg + + for i in $(seq 0 120) ; do + [ $i -lt 60 ] || return 1 + matches=$(ceph pg $pg list_missing | egrep "OBJ0|OBJ1" | wc -l) + [ $matches -eq 2 ] && break + done + + teardown $dir || return 1 +} + + main osd-scrub-repair "$@" # Local Variables: