test/nvmf/discovery: add get_notification_count
This will be helpful to ensure we do not unregister and then reregister a bdev during a discovery failover event. We will want to make sure that if a path gets replaced, that we register the new path before removing the old one, if the old one is removed from the discovery log. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I9a65f7b8e462ed262e615f2680742db309640e79 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11748 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
52f7aeb703
commit
e65549fc34
@ -61,6 +61,14 @@ function get_subsystem_paths() {
|
|||||||
$rpc_py -s $HOST_SOCK bdev_nvme_get_controllers -n $1 | jq -r '.[].ctrlrs[].trid.trsvcid' | sort -n | xargs
|
$rpc_py -s $HOST_SOCK bdev_nvme_get_controllers -n $1 | jq -r '.[].ctrlrs[].trid.trsvcid' | sort -n | xargs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Note that tests need to call get_notification_count and then check $notification_count,
|
||||||
|
# because if we use $(get_notification_count), the notify_id gets updated in the subshell.
|
||||||
|
notify_id=0
|
||||||
|
function get_notification_count() {
|
||||||
|
notification_count=$($rpc_py -s $HOST_SOCK notify_get_notifications -i $notify_id | jq '. | length')
|
||||||
|
notify_id=$((notify_id + notification_count))
|
||||||
|
}
|
||||||
|
|
||||||
[[ "$(get_subsystem_names)" == "" ]]
|
[[ "$(get_subsystem_names)" == "" ]]
|
||||||
[[ "$(get_bdev_list)" == "" ]]
|
[[ "$(get_bdev_list)" == "" ]]
|
||||||
|
|
||||||
@ -77,6 +85,8 @@ $rpc_py nvmf_subsystem_add_ns ${NQN}0 null0
|
|||||||
$rpc_py nvmf_subsystem_add_listener ${NQN}0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
$rpc_py nvmf_subsystem_add_listener ${NQN}0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
||||||
[[ "$(get_subsystem_names)" == "" ]]
|
[[ "$(get_subsystem_names)" == "" ]]
|
||||||
[[ "$(get_bdev_list)" == "" ]]
|
[[ "$(get_bdev_list)" == "" ]]
|
||||||
|
get_notification_count
|
||||||
|
[[ $notification_count == 0 ]]
|
||||||
|
|
||||||
# Discovery hostnqn is added, so now the host should see the subsystem, with a single path for the
|
# Discovery hostnqn is added, so now the host should see the subsystem, with a single path for the
|
||||||
# port of the single listener on the target.
|
# port of the single listener on the target.
|
||||||
@ -84,10 +94,14 @@ $rpc_py nvmf_subsystem_add_host ${NQN}0 $HOST_NQN
|
|||||||
[[ "$(get_subsystem_names)" == "nvme0" ]]
|
[[ "$(get_subsystem_names)" == "nvme0" ]]
|
||||||
[[ "$(get_bdev_list)" == "nvme0n1" ]]
|
[[ "$(get_bdev_list)" == "nvme0n1" ]]
|
||||||
[[ "$(get_subsystem_paths nvme0)" == "$NVMF_PORT" ]]
|
[[ "$(get_subsystem_paths nvme0)" == "$NVMF_PORT" ]]
|
||||||
|
get_notification_count
|
||||||
|
[[ $notification_count == 1 ]]
|
||||||
|
|
||||||
# Adding a namespace isn't a discovery function, but do it here anyways just to confirm we see a new bdev.
|
# Adding a namespace isn't a discovery function, but do it here anyways just to confirm we see a new bdev.
|
||||||
$rpc_py nvmf_subsystem_add_ns ${NQN}0 null1
|
$rpc_py nvmf_subsystem_add_ns ${NQN}0 null1
|
||||||
[[ "$(get_bdev_list)" == "nvme0n1 nvme0n2" ]]
|
[[ "$(get_bdev_list)" == "nvme0n1 nvme0n2" ]]
|
||||||
|
get_notification_count
|
||||||
|
[[ $notification_count == 1 ]]
|
||||||
|
|
||||||
# Add a second path to the same subsystem. This shouldn't change the list of subsystems or bdevs, but
|
# Add a second path to the same subsystem. This shouldn't change the list of subsystems or bdevs, but
|
||||||
# we should see a second path on the nvme0 subsystem now.
|
# we should see a second path on the nvme0 subsystem now.
|
||||||
@ -95,6 +109,8 @@ $rpc_py nvmf_subsystem_add_listener ${NQN}0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TA
|
|||||||
[[ "$(get_subsystem_names)" == "nvme0" ]]
|
[[ "$(get_subsystem_names)" == "nvme0" ]]
|
||||||
[[ "$(get_bdev_list)" == "nvme0n1 nvme0n2" ]]
|
[[ "$(get_bdev_list)" == "nvme0n1 nvme0n2" ]]
|
||||||
[[ "$(get_subsystem_paths nvme0)" == "$NVMF_PORT $NVMF_SECOND_PORT" ]]
|
[[ "$(get_subsystem_paths nvme0)" == "$NVMF_PORT $NVMF_SECOND_PORT" ]]
|
||||||
|
get_notification_count
|
||||||
|
[[ $notification_count == 0 ]]
|
||||||
|
|
||||||
# Remove the listener for the first port. The subsystem and bdevs should stay, but we should see
|
# Remove the listener for the first port. The subsystem and bdevs should stay, but we should see
|
||||||
# the path to that first port disappear.
|
# the path to that first port disappear.
|
||||||
@ -102,10 +118,14 @@ $rpc_py nvmf_subsystem_remove_listener ${NQN}0 -t $TEST_TRANSPORT -a $NVMF_FIRST
|
|||||||
[[ "$(get_subsystem_names)" == "nvme0" ]]
|
[[ "$(get_subsystem_names)" == "nvme0" ]]
|
||||||
[[ "$(get_bdev_list)" == "nvme0n1 nvme0n2" ]]
|
[[ "$(get_bdev_list)" == "nvme0n1 nvme0n2" ]]
|
||||||
[[ "$(get_subsystem_paths nvme0)" == "$NVMF_SECOND_PORT" ]]
|
[[ "$(get_subsystem_paths nvme0)" == "$NVMF_SECOND_PORT" ]]
|
||||||
|
get_notification_count
|
||||||
|
[[ $notification_count == 0 ]]
|
||||||
|
|
||||||
$rpc_py -s $HOST_SOCK bdev_nvme_stop_discovery -b nvme
|
$rpc_py -s $HOST_SOCK bdev_nvme_stop_discovery -b nvme
|
||||||
[[ "$(get_subsystem_names)" == "" ]]
|
[[ "$(get_subsystem_names)" == "" ]]
|
||||||
[[ "$(get_bdev_list)" == "" ]]
|
[[ "$(get_bdev_list)" == "" ]]
|
||||||
|
get_notification_count
|
||||||
|
[[ $notification_count == 2 ]]
|
||||||
|
|
||||||
trap - SIGINT SIGTERM EXIT
|
trap - SIGINT SIGTERM EXIT
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user