mirror of
https://github.com/ceph/ceph
synced 2024-12-22 19:34:30 +00:00
99 lines
1.9 KiB
Bash
99 lines
1.9 KiB
Bash
|
#!/bin/bash -e
|
||
|
|
||
|
RUN_TIME=300 # approximate duration of run (seconds)
|
||
|
|
||
|
[ $# -eq 1 ] && RUN_TIME="$1"
|
||
|
|
||
|
IMAGE_NAME="image-$$"
|
||
|
IMAGE_SIZE="1024" # MB
|
||
|
|
||
|
ID_TIMEOUT="10" # seconds to wait to get rbd id after mapping
|
||
|
ID_DELAY=".1" # floating-point seconds to delay before rescan
|
||
|
|
||
|
MAP_DELAY=".25" # floating-point seconds to delay before unmap
|
||
|
|
||
|
function get_time() {
|
||
|
date '+%s'
|
||
|
}
|
||
|
|
||
|
function times_up() {
|
||
|
local end_time="$1"
|
||
|
|
||
|
test $(get_time) -ge "${end_time}"
|
||
|
}
|
||
|
|
||
|
function get_id() {
|
||
|
[ $# -eq 1 ] || exit 99
|
||
|
local image_name="$1"
|
||
|
local id=""
|
||
|
local end_time=$(expr $(get_time) + ${ID_TIMEOUT})
|
||
|
|
||
|
cd /sys/bus/rbd/devices
|
||
|
|
||
|
while [ -z "${id}" ]; do
|
||
|
if times_up "${end_time}"; then
|
||
|
break;
|
||
|
fi
|
||
|
for i in *; do
|
||
|
if [ "$(cat $i/name)" = "${image_name}" ]; then
|
||
|
id=$i
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
sleep "${ID_DELAY}"
|
||
|
done
|
||
|
echo $id
|
||
|
test -n "${id}" # return code 0 if id was found
|
||
|
}
|
||
|
|
||
|
function map_unmap() {
|
||
|
[ $# -eq 1 ] || exit 99
|
||
|
local image_name="$1"
|
||
|
|
||
|
rbd map "${image_name}"
|
||
|
RBD_ID=$(get_id "${image_name}")
|
||
|
|
||
|
sleep "${MAP_DELAY}"
|
||
|
|
||
|
rbd unmap "/dev/rbd${RBD_ID}"
|
||
|
}
|
||
|
|
||
|
function setup() {
|
||
|
[ $# -eq 2 ] || exit 99
|
||
|
local image_name="$1"
|
||
|
local image_size="$2"
|
||
|
|
||
|
[ -d /sys/bus/rbd ] || sudo modprobe rbd
|
||
|
|
||
|
# allow ubuntu user to map/unmap rbd devices
|
||
|
sudo chown ubuntu /sys/bus/rbd/add
|
||
|
sudo chown ubuntu /sys/bus/rbd/remove
|
||
|
rbd create "${image_name}" --size="${image_size}"
|
||
|
}
|
||
|
|
||
|
function cleanup() {
|
||
|
# Have to rely on globals for the trap call
|
||
|
# rbd unmap "/dev/rbd${RBD_ID}" || true
|
||
|
rbd rm "${IMAGE_NAME}" || true
|
||
|
sudo chown root /sys/bus/rbd/remove || true
|
||
|
sudo chown root /sys/bus/rbd/add || true
|
||
|
}
|
||
|
trap cleanup EXIT HUP INT
|
||
|
|
||
|
#### Start
|
||
|
|
||
|
setup "${IMAGE_NAME}" "${IMAGE_SIZE}"
|
||
|
|
||
|
COUNT=0
|
||
|
START_TIME=$(get_time)
|
||
|
END_TIME=$(expr $(get_time) + ${RUN_TIME})
|
||
|
while ! times_up "${END_TIME}"; do
|
||
|
map_unmap "${IMAGE_NAME}"
|
||
|
COUNT=$(expr $COUNT + 1)
|
||
|
done
|
||
|
ELAPSED=$(expr "$(get_time)" - "${START_TIME}")
|
||
|
|
||
|
echo "${COUNT} iterations completed in ${ELAPSED} seconds"
|
||
|
|
||
|
exit 0
|