From 69b5fc54feb59f8b0a26a3ca3e925980c91b5b75 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Wed, 11 Oct 2017 20:16:44 -0700 Subject: [PATCH] test: Cleanup test-erasure-eio.sh code Signed-off-by: David Zafman --- .../erasure-code/test-erasure-eio.sh | 93 ++++++------------- 1 file changed, 29 insertions(+), 64 deletions(-) diff --git a/qa/standalone/erasure-code/test-erasure-eio.sh b/qa/standalone/erasure-code/test-erasure-eio.sh index 8404f7e000b..13b64f1238b 100755 --- a/qa/standalone/erasure-code/test-erasure-eio.sh +++ b/qa/standalone/erasure-code/test-erasure-eio.sh @@ -123,39 +123,6 @@ function rados_get() { rm $dir/COPY } -function rados_put_get() { - local dir=$1 - local poolname=$2 - local objname=${3:-SOMETHING} - local recovery=$4 - - # - # get and put an object, compare they are equal - # - rados_put $dir $poolname $objname || return 1 - # We can read even though caller injected read error on one of the shards - rados_get $dir $poolname $objname || return 1 - - if [ -n "$recovery" ]; - then - # - # take out the last OSD used to store the object, - # bring it back, and check for clean PGs which means - # recovery didn't crash the primary. - # - local -a initial_osds=($(get_osds $poolname $objname)) - local last_osd=${initial_osds[-1]} - # Kill OSD - kill_daemons $dir TERM osd.${last_osd} >&2 < /dev/null || return 1 - ceph osd out ${last_osd} || return 1 - ! get_osds $poolname $objname | grep '\<'${last_osd}'\>' || return 1 - ceph osd in ${last_osd} || return 1 - run_osd $dir ${last_osd} || return 1 - wait_for_clean || return 1 - fi - - rm $dir/ORIGINAL -} function inject_remove() { local pooltype=$1 @@ -176,33 +143,15 @@ function inject_remove() { objectstore_tool $dir $osd_id $objname remove || return 1 } -function rados_get_data_recovery() { - local inject=$1 - shift - local dir=$1 - shift - local shard_id=$1 - - # inject eio to speificied shard - # - local poolname=pool-jerasure - local objname=obj-$inject-$$-$shard_id - inject_$inject ec data $poolname $objname $dir $shard_id || return 1 - rados_put_get $dir $poolname $objname recovery || return 1 - - shard_id=$(expr $shard_id + 1) - inject_$inject ec data $poolname $objname $dir $shard_id || return 1 - # Now 2 out of 3 shards get EIO, so should fail - rados_get $dir $poolname $objname fail || return 1 -} - # Test with an inject error -function rados_get_data() { +function rados_put_get_data() { local inject=$1 shift local dir=$1 shift local shard_id=$1 + shift + local arg=$1 # inject eio to speificied shard # @@ -212,10 +161,29 @@ function rados_get_data() { inject_$inject ec data $poolname $objname $dir $shard_id || return 1 rados_get $dir $poolname $objname || return 1 + if [ "$arg" = "recovery" ]; + then + # + # take out the last OSD used to store the object, + # bring it back, and check for clean PGs which means + # recovery didn't crash the primary. + # + local -a initial_osds=($(get_osds $poolname $objname)) + local last_osd=${initial_osds[-1]} + # Kill OSD + kill_daemons $dir TERM osd.${last_osd} >&2 < /dev/null || return 1 + ceph osd out ${last_osd} || return 1 + ! get_osds $poolname $objname | grep '\<'${last_osd}'\>' || return 1 + ceph osd in ${last_osd} || return 1 + run_osd $dir ${last_osd} || return 1 + wait_for_clean || return 1 + fi + shard_id=$(expr $shard_id + 1) inject_$inject ec data $poolname $objname $dir $shard_id || return 1 # Now 2 out of 3 shards get an error, so should fail rados_get $dir $poolname $objname fail || return 1 + rm $dir/ORIGINAL } # Change the size of speificied shard @@ -273,6 +241,7 @@ function rados_get_data_bad_size() { shard_id=$(expr $shard_id + 1) set_size $objname $dir $shard_id $bytes $mode || return 1 rados_get $dir $poolname $objname fail || return 1 + rm $dir/ORIGINAL } # @@ -290,7 +259,7 @@ function TEST_rados_get_subread_eio_shard_0() { create_erasure_coded_pool $poolname 2 1 || return 1 # inject eio on primary OSD (0) and replica OSD (1) local shard_id=0 - rados_get_data eio $dir $shard_id || return 1 + rados_put_get_data eio $dir $shard_id || return 1 delete_pool $poolname } @@ -302,7 +271,7 @@ function TEST_rados_get_subread_eio_shard_1() { create_erasure_coded_pool $poolname 2 1 || return 1 # inject eio into replicas OSD (1) and OSD (2) local shard_id=1 - rados_get_data eio $dir $shard_id || return 1 + rados_put_get_data eio $dir $shard_id || return 1 delete_pool $poolname } @@ -317,7 +286,7 @@ function TEST_rados_get_subread_missing() { create_erasure_coded_pool $poolname 2 1 || return 1 # inject remove into replicas OSD (1) and OSD (2) local shard_id=1 - rados_get_data remove $dir $shard_id || return 1 + rados_put_get_data remove $dir $shard_id || return 1 delete_pool $poolname } @@ -366,23 +335,21 @@ function TEST_rados_get_with_subreadall_eio_shard_0() { local poolname=pool-jerasure create_erasure_coded_pool $poolname 2 1 || return 1 # inject eio on primary OSD (0) - local shard_id=0 - rados_get_data_recovery eio $dir $shard_id || return 1 + rados_put_get_data eio $dir $shard_id recovery || return 1 delete_pool $poolname } function TEST_rados_get_with_subreadall_eio_shard_1() { local dir=$1 - local shard_id=0 + local shard_id=1 setup_osds 4 || return 1 local poolname=pool-jerasure create_erasure_coded_pool $poolname 2 1 || return 1 # inject eio on replica OSD (1) - local shard_id=1 - rados_get_data_recovery eio $dir $shard_id || return 1 + rados_put_get_data eio $dir $shard_id recovery || return 1 delete_pool $poolname } @@ -410,8 +377,6 @@ function TEST_ec_recovery_errors() { # Cluster should recover this object wait_for_clean || return 1 - #rados_get_data_recovery eio $dir $shard_id || return 1 - delete_pool $poolname } -- 2.39.5