#!/bin/bash
# SPDX-License-Identifier: MIT or GPL-2.0-only

. common/fio_common

echo -e "\trun fio with dev recovery, type 2:"
echo -e "\t(1)kill all ubq_deamon, (2)recover with new ubq_daemon, (3)kill all ubq_deamon, (4)delete dev"

BS=4k
RW=rw
JOBS=4
QUEUES=2
RT=$TRUNTIME*2
LOOPS=2
URING_COMP=1
NEED_GET_DATA=1
RECOVERY=1
RECOVERY_REISSUE=0

ublk_run_recover_kill_test()
{
	local state=""
	local cnt=$1

	export T_TYPE_PARAMS="-t null -q $QUEUES -u $URING_COMP -g $NEED_GET_DATA -r $RECOVERY -i $RECOVERY_REISSUE"
	local dev=`__create_ublk_dev`

	echo -e "\trun fio with killing $dev(ublk add $T_TYPE_PARAMS) queue daemon $cnt"
	__run_fio_libaio $dev $BS $RW $JOBS $RT > /dev/null 2 >& 1 &
	sleep 2

	state=`__ublk_kill_daemon $dev "QUIESCED"`
	if [ "$state" == "QUIESCED" ]; then
		state=`recover_ublk_dev_and_wait $dev`
		if [ "$state" != "LIVE" ]; then
			echo "device isn't recovered($state)"
		fi
	else
		echo "device isn't changed to quiesced state($state)"
	fi

	pid2=`__ublk_get_pid $dev`
	kill -9 $pid2 > /dev/null 2>&1
	sleep 2
	RES=`__remove_ublk_dev_return $dev`
	if [ $RES -ne 0 ]; then
		echo -e "\tdelete $dev failed($RES)"
		break
	fi
	wait
}

for RECOVERY_REISSUE in `seq 0 1`; do
	for CNT in `seq $LOOPS`; do
		ublk_run_recover_kill_test $CNT
	done
done
