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 06b1a2d8b8..19e7192e43 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 9fc818b9ef..fb15447f25 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 40422269ef..54acdff8ce 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 0e3893b744..cfe3a9d200 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 bc1f8c7cd8..8594631567 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 b79747dc37..547b267d7c 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 e8e1d3be15..d9b89eed74 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 bceff481b4..5a627a3488 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 cd5a81a675..500a7d8777 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 9cb3f9b53a..edf2b8909c 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 f810f2ea4d..71338f2902 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} &