diff options
Diffstat (limited to '')
-rwxr-xr-x | qa/workunits/mon/pg_autoscaler.sh | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/qa/workunits/mon/pg_autoscaler.sh b/qa/workunits/mon/pg_autoscaler.sh new file mode 100755 index 00000000..706f87d0 --- /dev/null +++ b/qa/workunits/mon/pg_autoscaler.sh @@ -0,0 +1,79 @@ +#!/bin/bash -ex + +NUM_OSDS=$(ceph osd ls | wc -l) +if [ $NUM_OSDS -lt 6 ]; then + echo "test requires at least 6 OSDs" + exit 1 +fi + +NUM_POOLS=$(ceph osd pool ls | wc -l) +if [ $NUM_POOLS -gt 0 ]; then + echo "test requires no preexisting pools" + exit 1 +fi + +function wait_for() { + local sec=$1 + local cmd=$2 + + while true ; do + if bash -c "$cmd" ; then + break + fi + sec=$(( $sec - 1 )) + if [ $sec -eq 0 ]; then + echo failed + return 1 + fi + sleep 1 + done + return 0 +} + +# enable +ceph config set mgr mgr/pg_autoscaler/sleep_interval 5 +ceph mgr module enable pg_autoscaler + +# pg_num_min +ceph osd pool create a 16 --pg-num-min 4 +ceph osd pool create b 16 --pg-num-min 2 +ceph osd pool set a pg_autoscale_mode on +ceph osd pool set b pg_autoscale_mode on + +wait_for 120 "ceph osd pool get a pg_num | grep 4" +wait_for 120 "ceph osd pool get b pg_num | grep 2" + +# target ratio +ceph osd pool set a target_size_ratio 5 +ceph osd pool set b target_size_ratio 1 +sleep 10 +APGS=$(ceph osd dump -f json-pretty | jq '.pools[0].pg_num_target') +BPGS=$(ceph osd dump -f json-pretty | jq '.pools[1].pg_num_target') +test $APGS -gt 100 +test $BPGS -gt 10 + +# small ratio change does not change pg_num +ceph osd pool set a target_size_ratio 7 +ceph osd pool set b target_size_ratio 2 +sleep 10 +APGS2=$(ceph osd dump -f json-pretty | jq '.pools[0].pg_num_target') +BPGS2=$(ceph osd dump -f json-pretty | jq '.pools[1].pg_num_target') +test $APGS -eq $APGS2 +test $BPGS -eq $BPGS2 + +# target_size +ceph osd pool set a target_size_bytes 1000000000000000 +ceph osd pool set b target_size_bytes 1000000000000000 +ceph osd pool set a target_size_ratio 0 +ceph osd pool set b target_size_ratio 0 +wait_for 60 "ceph health detail | grep POOL_TARGET_SIZE_BYTES_OVERCOMMITTED" + +ceph osd pool set a target_size_bytes 1000 +ceph osd pool set b target_size_bytes 1000 +ceph osd pool set a target_size_ratio 1 +wait_for 60 "ceph health detail | grep POOL_HAS_TARGET_SIZE_BYTES_AND_RATIO" + +ceph osd pool rm a a --yes-i-really-really-mean-it +ceph osd pool rm b b --yes-i-really-really-mean-it + +echo OK |