mirror of
https://github.com/ceph/ceph
synced 2025-03-01 05:51:33 +00:00
qa: workunits: mon: add workloadgen's workunit
Uses test/mon/test_osd_workloadgen to generate a bunch of map changes Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
This commit is contained in:
parent
e1820d870e
commit
2a681052b2
172
qa/workunits/mon/workloadgen.sh
Executable file
172
qa/workunits/mon/workloadgen.sh
Executable file
@ -0,0 +1,172 @@
|
||||
#!/bin/bash
|
||||
# vim: ts=8 sw=2 smarttab
|
||||
#
|
||||
# $0.sh - run mon workload generator
|
||||
|
||||
d() {
|
||||
[[ "$VERBOSE" != "" && $VERBOSE -eq 1 ]] && echo "## DEBUG ## $*"
|
||||
}
|
||||
|
||||
d "check for required binaries"
|
||||
|
||||
required_bins="ceph crushtool test_mon_workloadgen"
|
||||
for b in $required_bins; do
|
||||
which $b >& /dev/null
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Unable to find '$b' in PATH"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
d "Start workunit"
|
||||
|
||||
crush_map_fn=test.crush.map
|
||||
create_crush=0
|
||||
clobber_crush=0
|
||||
new_cluster=0
|
||||
do_run=0
|
||||
num_osds=0
|
||||
|
||||
# Assume the test is in PATH
|
||||
bin_test=test_mon_workloadgen
|
||||
|
||||
num_osds=10
|
||||
if [[ "$LOADGEN_NUM_OSDS" != "" ]]; then
|
||||
num_osds=$LOADGEN_NUM_OSDS
|
||||
fi
|
||||
|
||||
duration=300
|
||||
[ ! -z $DURATION ] && duration=$DURATION
|
||||
|
||||
extra=
|
||||
[ ! -z $TEST_CEPH_CONF ] && extra="$extra -c $TEST_CEPH_CONF"
|
||||
|
||||
d "checking osd tree"
|
||||
|
||||
crush_testing_root="`ceph $extra osd tree | grep 'root[ \t]\+testing'`"
|
||||
|
||||
d "$crush_testing_root"
|
||||
|
||||
if [[ "$crush_testing_root" == "" ]]; then
|
||||
d "set create_crush"
|
||||
create_crush=1
|
||||
fi
|
||||
|
||||
d "generate run_id (create_crush = $create_crush)"
|
||||
|
||||
run_id=`uuidgen`
|
||||
|
||||
d "run_id = $run_id ; create_crush = $create_crush"
|
||||
|
||||
if [[ $create_crush -eq 1 ]]; then
|
||||
tmp_crush_fn="/tmp/ceph.$run_id.crush"
|
||||
ceph $extra osd getcrushmap -o $tmp_crush_fn
|
||||
crushtool -d $tmp_crush_fn -o $tmp_crush_fn.plain
|
||||
|
||||
highest_root_id=0
|
||||
root_ids_raw="`cat $tmp_crush_fn.plain | grep id`"
|
||||
ifs=$IFS
|
||||
IFS=$'\n'
|
||||
for l in $root_ids_raw; do
|
||||
root_id=`echo $l | sed 's/.*-\([[:digit:]]\+\).*/\1/'`
|
||||
d "root id = $root_id ; highest = $highest_root_id"
|
||||
if [[ $root_id -gt $highest_root_id ]]; then
|
||||
highest_root_id=$root_id
|
||||
fi
|
||||
done
|
||||
our_root_id=$(($highest_root_id+1))
|
||||
IFS=$ifs
|
||||
|
||||
cat << EOF >> $tmp_crush_fn.plain
|
||||
root testing {
|
||||
id -$our_root_id
|
||||
alg straw
|
||||
hash 0 # rjenkins1
|
||||
}
|
||||
rule testingdata {
|
||||
ruleset 0
|
||||
type replicated
|
||||
min_size 1
|
||||
max_size 10
|
||||
step take testing
|
||||
step choose firstn 0 type osd
|
||||
step emit
|
||||
}
|
||||
rule testingmetadata {
|
||||
ruleset 1
|
||||
type replicated
|
||||
min_size 1
|
||||
max_size 10
|
||||
step take testing
|
||||
step choose firstn 0 type osd
|
||||
step emit
|
||||
}
|
||||
rule testingrbd {
|
||||
ruleset 2
|
||||
type replicated
|
||||
min_size 1
|
||||
max_size 10
|
||||
step take testing
|
||||
step choose firstn 0 type osd
|
||||
step emit
|
||||
}
|
||||
EOF
|
||||
|
||||
if [[ $VERBOSE -eq 1 ]]; then
|
||||
cat $tmp_crush_fn.plain
|
||||
fi
|
||||
|
||||
crushtool -c $tmp_crush_fn.plain -o $tmp_crush_fn
|
||||
if [[ $? -eq 1 ]]; then
|
||||
echo "Error compiling test crush map; probably need newer crushtool"
|
||||
echo "NOK"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
d "created crush"
|
||||
|
||||
ceph $extra osd setcrushmap -i $tmp_crush_fn
|
||||
fi
|
||||
|
||||
keyring="/tmp/ceph.$run_id.keyring"
|
||||
|
||||
ceph $extra auth get-or-create-key osd.admin mon 'allow rwx' osd 'allow *'
|
||||
ceph $extra auth export | grep -v "export" > $keyring
|
||||
|
||||
osd_ids=""
|
||||
|
||||
for osd in `seq 1 $num_osds`; do
|
||||
id=`ceph $extra osd create`
|
||||
osd_ids="$osd_ids $id"
|
||||
d "osd.$id"
|
||||
ceph $extra osd crush set $id osd.$id 1.0 host=testhost rack=testrack root=testing
|
||||
done
|
||||
|
||||
d "osds: $osd_ids"
|
||||
|
||||
stub_id_args=""
|
||||
f=
|
||||
l=
|
||||
for i in $osd_ids; do
|
||||
d "i: $i"
|
||||
if [[ $stub_id_args == "" ]]; then
|
||||
stub_id_args="--stub-id $i"
|
||||
f=$i
|
||||
fi
|
||||
if [[ $l != "" ]]; then
|
||||
if [[ $i -gt $(($l+1)) ]]; then
|
||||
stub_id_args="$stub_id_args..$l --stub-id $i"
|
||||
f=$i
|
||||
fi
|
||||
fi
|
||||
l=$i
|
||||
done
|
||||
if [[ $l -gt $f ]]; then
|
||||
stub_id_args="$stub_id_args..$l"
|
||||
fi
|
||||
|
||||
args="$EXTRA_ARGS --duration $duration $stub_id_args"
|
||||
|
||||
d "running: $args"
|
||||
|
||||
$bin_test $extra --keyring $keyring $args
|
Loading…
Reference in New Issue
Block a user