215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# CDDL HEADER START
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# This file and its contents are supplied under the terms of the
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# Common Development and Distribution License ("CDDL"), version 1.0.
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# You may only use this file in accordance with the terms of version
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# 1.0 of the CDDL.
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# A full copy of the text of the CDDL should have accompanied this
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# source. A copy of the CDDL is also available via the Internet at
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# http://www.illumos.org/license/CDDL.
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# CDDL HEADER END
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2015, 2016 by Delphix. All rights reserved.
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction get_conf_section # regex conf
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset dsk_line next_vd_line conf section
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset regex="$1"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset conf="$2"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein dsk_line=$(grep -n "$regex" "$conf" | awk -F: '{print $1}')
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein if [[ -z "$dsk_line" ]]; then
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein return
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein fi
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein next_vd_line=$(tail -n +$dsk_line "$conf" | \
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein grep -n "children\[" | awk -F: '{print $1}' | head -n 1)
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein if [[ -n "$next_vd_line" ]]; then
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein section=$(cat "$conf" | sed "1,${dsk_line}d" | head -n \
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein $(($next_vd_line - 2)))
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein else
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein section=$(tail -n +$dsk_line "$conf")
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein fi
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein echo "$section"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction get_leaf_vd_zap # dsk conf
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset section=$(get_conf_section "$1" "$2")
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein echo "$section" | egrep \
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein "com.delphix:vdev_zap_leaf: [0-9]+" | awk '{print $2}'
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction get_top_vd_zap # dsk conf
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset section=$(get_conf_section "$1" "$2")
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein echo "$section" | egrep \
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein "com.delphix:vdev_zap_top: [0-9]+" | awk '{print $2}'
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction assert_has_sentinel # conf
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein res=$(grep "com.delphix:has_per_vdev_zaps" "$1")
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein [[ -z "$res" ]] && log_fail "Pool missing ZAP feature sentinel value"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction assert_zap_common # pool vd lvl zapobj
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset pool=$1
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset vd="$2"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset lvl=$3
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset zapobj=$4
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein if [[ -z "$zapobj" ]]; then
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein log_fail "$vd on $pool has no $lvl ZAP in config"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein elif [[ -z "$(zdb -d $pool $zapobj | grep 'zap')" ]]; then
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein log_fail "$vd on $pool has no $lvl ZAP in MOS"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein fi
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction assert_top_zap # pool vd conf
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset pool=$1
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset vd="$2"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset conf=$3
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein top_zap=$(get_top_vd_zap "$vd" $conf)
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein assert_zap_common $pool "$vd" "top" $top_zap
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction assert_leaf_zap # pool vd conf
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset pool=$1
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset vd="$2"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein typeset conf=$3
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein leaf_zap=$(get_leaf_vd_zap "$vd" $conf)
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein assert_zap_common $pool "$vd" "leaf" $leaf_zap
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein# Code common to setup/teardown for each test.
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein#
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinfunction cleanup
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein{
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein if datasetexists $TESTPOOL ; then
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein log_must zpool destroy -f $TESTPOOL
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein fi
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein if [[ -e $conf ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must rm -f "$conf"
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein fi
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein if [[ -e $POOL2 ]]; then
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein log_must zpool destroy -f $POOL2
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein fi
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein}
215198a6ad15cf4832370e2f19247abeb36b951aJoe Stein
215198a6ad15cf4832370e2f19247abeb36b951aJoe Steinlog_onexit cleanup