From a44c743417258f0fffc98328e2d8c8c4c64559a3 Mon Sep 17 00:00:00 2001 From: Tomasz Kulasek Date: Mon, 17 Jun 2019 09:23:20 +0200 Subject: [PATCH] test/iscsi_tgt: make sure iscsi devices are ready We have no guaranty that iscsiadm -m session shows all required iscsi devices at some point of time after login. It may cause that not all devices are used in further tests (e.g. in fio). This patch allows to wait for a certain number of sessions after login. Change-Id: I868cb8f1235dd04d88572bc8518e97de99a2c5e6 Signed-off-by: Tomasz Kulasek Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/458236 Reviewed-by: Tomasz Zawadzki Reviewed-by: Shuhei Matsumoto Reviewed-by: Darek Stojaczyk Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- test/common/autotest_common.sh | 4 ++-- test/iscsi_tgt/common.sh | 15 +++++++++++++++ test/iscsi_tgt/digests/digests.sh | 3 ++- test/iscsi_tgt/ext4test/ext4test.sh | 4 ++-- test/iscsi_tgt/filesystem/filesystem.sh | 18 ++++++++++++------ test/iscsi_tgt/fio/fio.sh | 1 + test/iscsi_tgt/lvol/iscsi_lvol.sh | 1 + .../multiconnection/multiconnection.sh | 1 + test/iscsi_tgt/perf/iscsi_initiator.sh | 3 ++- test/iscsi_tgt/reset/reset.sh | 3 ++- test/iscsi_tgt/trace_record/trace_record.sh | 1 + 11 files changed, 41 insertions(+), 13 deletions(-) diff --git a/test/common/autotest_common.sh b/test/common/autotest_common.sh index 06b1a2d8b..19e7192e4 100644 --- a/test/common/autotest_common.sh +++ b/test/common/autotest_common.sh @@ -671,13 +671,13 @@ function waitforblk_disconnect() function waitforfile() { local i=0 - while [ ! -f $1 ]; do + while [ ! -e $1 ]; do [ $i -lt 200 ] || break i=$[$i+1] sleep 0.1 done - if [ ! -f $1 ]; then + if [ ! -e $1 ]; then return 1 fi diff --git a/test/iscsi_tgt/common.sh b/test/iscsi_tgt/common.sh index 9fc818b9e..fb15447f2 100644 --- a/test/iscsi_tgt/common.sh +++ b/test/iscsi_tgt/common.sh @@ -64,6 +64,21 @@ function iscsitestinit() { fi } +function waitforiscsidevices() { + local num=$1 + + for ((i=1; i<=20; i++)); do + n=$( iscsiadm -m session -P 3 | grep "Attached scsi disk sd[a-z]*" | wc -l ) + if [ $n -ne $num ]; then + sleep 0.1 + else + return 0 + fi + done + + return 1 +} + function iscsitestfini() { if [ "$1" == "iso" ]; then if [ ! -z "$2" ]; then diff --git a/test/iscsi_tgt/digests/digests.sh b/test/iscsi_tgt/digests/digests.sh index 40422269e..54acdff8c 100755 --- a/test/iscsi_tgt/digests/digests.sh +++ b/test/iscsi_tgt/digests/digests.sh @@ -14,10 +14,11 @@ function node_login_fio_logout() { iscsiadm -m node -p $TARGET_IP:$ISCSI_PORT -o update -n node.conn[0].iscsi.$arg done iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT + waitforiscsidevices 1 $fio_py -p iscsi -i 512 -d 1 -t write -r 2 $fio_py -p iscsi -i 512 -d 1 -t read -r 2 iscsiadm -m node --logout -p $TARGET_IP:$ISCSI_PORT - sleep 1 + waitforiscsidevices 0 } function iscsi_header_digest_test() { diff --git a/test/iscsi_tgt/ext4test/ext4test.sh b/test/iscsi_tgt/ext4test/ext4test.sh index 0e3893b74..cfe3a9d20 100755 --- a/test/iscsi_tgt/ext4test/ext4test.sh +++ b/test/iscsi_tgt/ext4test/ext4test.sh @@ -42,12 +42,11 @@ sleep 1 iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT +waitforiscsidevices 1 trap 'for new_dir in $(dir -d /mnt/*dir); do umount $new_dir; rm -rf $new_dir; done; \ iscsicleanup; killprocess $pid; iscsitestfini $1 $2; exit 1' SIGINT SIGTERM EXIT -sleep 1 - echo "Test error injection" $rpc_py bdev_inject_error EE_Malloc0 'all' 'failure' -n 1000 @@ -77,6 +76,7 @@ fi iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT +waitforiscsidevices 1 devs=$(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}') diff --git a/test/iscsi_tgt/filesystem/filesystem.sh b/test/iscsi_tgt/filesystem/filesystem.sh index bc1f8c7cd..859463156 100755 --- a/test/iscsi_tgt/filesystem/filesystem.sh +++ b/test/iscsi_tgt/filesystem/filesystem.sh @@ -64,15 +64,15 @@ sleep 1 iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT +waitforiscsidevices 1 trap "remove_backends; umount /mnt/device; rm -rf /mnt/device; iscsicleanup; killprocess $pid; iscsitestfini $1 $2; exit 1" SIGINT SIGTERM EXIT -sleep 1 - mkdir -p /mnt/device dev=$(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}') +waitforfile /dev/$dev parted -s /dev/$dev mklabel msdos parted -s /dev/$dev mkpart primary '0%' '100%' sleep 1 @@ -91,10 +91,13 @@ for fstype in "ext4" "btrfs" "xfs"; do umount /mnt/device iscsiadm -m node --logout - sleep 1 + waitforiscsidevices 0 iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT - sleep 1 + waitforiscsidevices 1 + dev=$(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}') + + waitforfile /dev/${dev}1 mount -o rw /dev/${dev}1 /mnt/device if [ -f "/mnt/device/test" ]; then echo "File existed." @@ -112,10 +115,13 @@ for fstype in "ext4" "btrfs" "xfs"; do umount /mnt/device iscsiadm -m node --logout - sleep 1 + waitforiscsidevices 0 iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT - sleep 1 + waitforiscsidevices 1 + dev=$(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}') + + waitforfile /dev/${dev}1 mount -o rw /dev/${dev}1 /mnt/device if [ -f "/mnt/device/aaa" ]; then diff --git a/test/iscsi_tgt/fio/fio.sh b/test/iscsi_tgt/fio/fio.sh index b79747dc3..547b267d7 100755 --- a/test/iscsi_tgt/fio/fio.sh +++ b/test/iscsi_tgt/fio/fio.sh @@ -92,6 +92,7 @@ sleep 1 iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT +waitforiscsidevices 1 trap "iscsicleanup; killprocess $pid; iscsitestfini $1 $2; delete_tmp_files; exit 1" SIGINT SIGTERM EXIT diff --git a/test/iscsi_tgt/lvol/iscsi_lvol.sh b/test/iscsi_tgt/lvol/iscsi_lvol.sh index e8e1d3be1..d9b89eed7 100755 --- a/test/iscsi_tgt/lvol/iscsi_lvol.sh +++ b/test/iscsi_tgt/lvol/iscsi_lvol.sh @@ -71,6 +71,7 @@ sleep 1 timing_enter discovery iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT +waitforiscsidevices $(( $NUM_LVS * $NUM_LVOL )) timing_exit discovery timing_enter fio diff --git a/test/iscsi_tgt/multiconnection/multiconnection.sh b/test/iscsi_tgt/multiconnection/multiconnection.sh index bceff481b..5a627a348 100755 --- a/test/iscsi_tgt/multiconnection/multiconnection.sh +++ b/test/iscsi_tgt/multiconnection/multiconnection.sh @@ -70,6 +70,7 @@ sleep 1 echo "Logging into iSCSI target." iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT +waitforiscsidevices $CONNECTION_NUMBER echo "Running FIO" $fio_py -p iscsi -i 131072 -d 64 -t randrw -r 5 diff --git a/test/iscsi_tgt/perf/iscsi_initiator.sh b/test/iscsi_tgt/perf/iscsi_initiator.sh index cd5a81a67..500a7d877 100755 --- a/test/iscsi_tgt/perf/iscsi_initiator.sh +++ b/test/iscsi_tgt/perf/iscsi_initiator.sh @@ -20,12 +20,13 @@ iscsi_fio_results="$testdir/perf_output/iscsi_fio.json" trap "iscsiadm -m node --logout; iscsiadm -m node -o delete; exit 1" ERR SIGTERM SIGABRT iscsiadm -m discovery -t sendtargets -p $IP_T:$ISCSI_PORT iscsiadm -m node --login -p $IP_T:$ISCSI_PORT -sleep 1 +waitforiscsidevices 1 disks=($(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}')) for (( i=0; i < ${#disks[@]}; i++ )) do filename+=$(printf /dev/%s: "${disks[i]}") + waitforfile $filename echo noop > /sys/block/${disks[i]}/queue/scheduler echo "2" > /sys/block/${disks[i]}/queue/nomerges echo "1024" > /sys/block/${disks[i]}/queue/nr_requests diff --git a/test/iscsi_tgt/reset/reset.sh b/test/iscsi_tgt/reset/reset.sh index 9cb3f9b53..edf2b8909 100755 --- a/test/iscsi_tgt/reset/reset.sh +++ b/test/iscsi_tgt/reset/reset.sh @@ -48,7 +48,8 @@ sleep 1 iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT -sleep 1 +waitforiscsidevices 1 + dev=$(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}') $fio_py -p iscsi -i 512 -d 1 -t read -r 60 & diff --git a/test/iscsi_tgt/trace_record/trace_record.sh b/test/iscsi_tgt/trace_record/trace_record.sh index f810f2ea4..71338f290 100755 --- a/test/iscsi_tgt/trace_record/trace_record.sh +++ b/test/iscsi_tgt/trace_record/trace_record.sh @@ -68,6 +68,7 @@ sleep 1 iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT +waitforiscsidevices $(( $CONNECTION_NUMBER + 1 )) mkdir -p ${TRACE_TMP_FOLDER} ./app/trace_record/spdk_trace_record -s iscsi -p ${iscsi_pid} -f ${TRACE_RECORD_OUTPUT} -q 1>${TRACE_RECORD_NOTICE_LOG} &