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'
}
test $(get_time) -ge "${end_time}"
}
-function get_id() {
+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;
+ for i in *; do
+ if [ "$(cat $i/name)" = "${image_name}" ]; then
+ id="$i"
+ break
fi
- for i in *; do
- if [ "$(cat $i/name)" = "${image_name}" ]; then
- id=$i
- break
- fi
- done
+ done
+ cd - >/dev/null
+
+ echo $id
+ test -n "${id}" # return code 0 if id was found
+}
+function get_id() {
+ [ $# -eq 1 ] || exit 99
+ local image_name="$1"
+ local id=""
+ local end_time=$(expr $(get_time) + ${ID_TIMEOUT})
+
+ while ! id=$(_get_id "${image_name}") && ! times_up "${end_time}"; do
+ echo "get_id: image not mapped; trying again after delay" >&2
sleep "${ID_DELAY}"
done
+
echo $id
test -n "${id}" # return code 0 if id was found
}
local image_name="$1"
rbd map "${image_name}"
- RBD_ID=$(get_id "${image_name}")
+ udevadm settle
- sleep "${MAP_DELAY}"
+ RBD_ID=$(get_id "${image_name}")
rbd unmap "/dev/rbd${RBD_ID}"
+ udevadm settle
}
function setup() {