diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2017-02-21 00:49:49 +0100 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2017-02-21 00:52:05 +0100 |
commit | d409fec079d27c349b4e570a619bd860ce4fde7e (patch) | |
tree | 3ac78bb78a60c92da6650cbe5475500ff0f9b83b | |
parent | 921d5972e8bfa778f7389c4abdaa8691ce432c70 (diff) | |
download | lvm2-d409fec079d27c349b4e570a619bd860ce4fde7e.tar.gz |
tests: paralelize creation and teardown
To speedup initial construction and destruction of test devices
(mainly in case more then 1 is needed) call dmsetup
in parallel.
-rw-r--r-- | test/lib/aux.sh | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/test/lib/aux.sh b/test/lib/aux.sh index 7c3daa5b0..10f6f92b9 100644 --- a/test/lib/aux.sh +++ b/test/lib/aux.sh @@ -405,23 +405,25 @@ teardown_devs_prefixed() { fi # Remove devices, start with closed (sorted by open count) - local remfail=no + # Run 'dmsetup remove' in parallel + rm -f REMOVE_FAILED local need_udev_wait=0 init_udev_transaction - for dm in $(dm_info name --sort open | grep "$prefix"); do - dmsetup remove "$dm" &>/dev/null || remfail=yes + for dm in $(dm_info name --sort open,name | grep "$prefix"); do + dmsetup remove "$dm" &>/dev/null || touch REMOVE_FAILED & need_udev_wait=1 done + wait finish_udev_transaction test $need_udev_wait -eq 0 || udev_wait - if test $remfail = yes; then + if test -f REMOVE_FAILED; then local num_devs local num_remaining_devs=999 while num_devs=$(dm_table | grep "$prefix" | wc -l) && \ test $num_devs -lt $num_remaining_devs -a $num_devs -ne 0; do test "$stray" -eq 0 || echo "Removing $num_devs stray mapped devices with names beginning with $prefix: " - # HACK: sort also by minors - so we try to close 'possibly later' created device first + # HACK: sort also by minors - so we try to close 'possibly later' created device first for dm in $(dm_info name --sort open,-minor | grep "$prefix") ; do dmsetup remove -f "$dm" || true done @@ -794,6 +796,7 @@ prepare_devs() { local size=$(($devsize*2048)) # sectors local count=0 + rm -f CREATE_FAILED init_udev_transaction for i in $(seq 1 $n); do local name="${PREFIX}$pvname$i" @@ -801,17 +804,19 @@ prepare_devs() { DEVICES[$count]=$dev count=$(( $count + 1 )) echo 0 $size linear "$BACKING_DEV" $((($i-1)*$size + $shift)) > "$name.table" - if not dmsetup create -u "TEST-$name" "$name" "$name.table" && - test -n "$LVM_TEST_BACKING_DEVICE"; - then # maybe the backing device is too small for this test - LVM_TEST_BACKING_DEVICE= - rm -f BACKING_DEV - prepare_devs "$@" - return $? - fi + dmsetup create -u "TEST-$name" "$name" "$name.table" || touch CREATE_FAILED & + test -f CREATE_FAILED && break; done + wait finish_udev_transaction + if test -f CREATE_FAILED -a -n "$LVM_TEST_BACKING_DEVICE"; then + LVM_TEST_BACKING_DEVICE= + rm -f BACKING_DEV CREATE_FAILED + prepare_devs "$@" + return $? + fi + # non-ephemeral devices need to be cleared between tests test -f LOOP || for d in ${DEVICES[@]}; do blkdiscard "$d" 2>/dev/null || true @@ -833,9 +838,11 @@ prepare_devs() { # ( IFS=$'\n'; echo "${DEVICES[*]}" ) >DEVICES echo "ok" - for dev in "${DEVICES[@]}"; do - notify_lvmetad "$dev" - done + if test -e LOCAL_LVMETAD; then + for dev in "${DEVICES[@]}"; do + notify_lvmetad "$dev" + done + fi } |