From 3168fd243d6a2088eec0207dc48273a8170c186c Mon Sep 17 00:00:00 2001 From: Shaun Tancheff Date: Fri, 4 Oct 2019 13:13:35 -0500 Subject: [PATCH] LU-12770 test: zfs project_quota testing Use zpool get all to query zfs features and check for project_quota Use zpool get/set to manage project_quota feature, where possible Cray-bug-id: LUS-7795 Test-Parameters: trivial testlist=sanity-quota Test-Parameters: fstype=zfs testlist=sanity-quota Signed-off-by: Shaun Tancheff Change-Id: I8111820aa2f4415e8d62c472a3553fe3b9288f19 Reviewed-on: https://review.whamcloud.com/36197 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Brian Behlendorf Reviewed-by: Petros Koutoupis --- lustre/tests/sanity-quota.sh | 24 +++++++++++++++++------- lustre/tests/test-framework.sh | 40 +++++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/lustre/tests/sanity-quota.sh b/lustre/tests/sanity-quota.sh index ad311bc..23a1ae8 100755 --- a/lustre/tests/sanity-quota.sh +++ b/lustre/tests/sanity-quota.sh @@ -412,13 +412,23 @@ quota_show_check() { project_quota_enabled () { local rc=0 - for num in $(seq $MDSCOUNT); do - do_facet mds$num $DEBUGFS -R features $(mdsdevname $num) | - grep -q project || rc=1 - done - for num in $(seq $OSTCOUNT); do - do_facet ost$num $DEBUGFS -R features $(ostdevname $num) | - grep -q project || rc=1 + local zfeat="feature@project_quota" + + for facet in $(seq -f mds%g $MDSCOUNT) $(seq -f ost%g $OSTCOUNT); do + local facet_fstype=${facet:0:3}1_FSTYPE + local devname + + if [ "${!facet_fstype}" = "zfs" ]; then + devname=$(zpool_name ${facet}) + do_facet ${facet} $ZPOOL get -H "$zfeat" $devname | + grep -wq active || rc=1 + else + [ ${facet:0:3} == "mds" ] && + devname=$(mdsdevname ${facet:3}) || + devname=$(ostdevname ${facet:3}) + do_facet ${facet} $DEBUGFS -R features $devname | + grep -q project || rc=1 + fi done [ $rc -eq 0 ] && PQ_CLEANUP=false || PQ_CLEANUP=true return $rc diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index 207c0e0..53f40a7 100755 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -9716,35 +9716,53 @@ is_project_quota_supported() { [ $(lustre_version_code $SINGLEMDS) -le \ $(version_code 2.10.53) ] && return 1 - do_facet mds1 $ZPOOL upgrade -v | - grep project_quota && return 0 + do_facet mds1 $ZPOOL get all | + grep -q project_quota && return 0 fi return 1 } +# ZFS project quota enable/disable: +# This feature will become active as soon as it is enabled and will never +# return to being disabled. Each filesystem will be upgraded automatically +# when remounted or when [a] new file is created under that filesystem. The +# upgrade can also be triggered on filesystems via `zfs set version=current +# `. The upgrade process runs in the background and may take a +# while to complete for the filesystems containing a large number of files. enable_project_quota() { is_project_quota_supported || return 0 - [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && return 0 + local zkeeper=${KEEP_ZPOOL} + stack_trap "KEEP_ZPOOL=$zkeeper" EXIT + KEEP_ZPOOL="true" stopall || error "failed to stopall (1)" - for num in $(seq $MDSCOUNT); do - do_facet mds$num $TUNE2FS -O project $(mdsdevname $num) || - error "tune2fs $(mdsdevname $num) failed" - done + local zfeat_en="feature@project_quota=enabled" + for facet in $(seq -f mds%g $MDSCOUNT) $(seq -f ost%g $OSTCOUNT); do + local facet_fstype=${facet:0:3}1_FSTYPE + local devname - for num in $(seq $OSTCOUNT); do - do_facet ost$num $TUNE2FS -O project $(ostdevname $num) || - error "tune2fs $(ostdevname $num) failed" + if [ "${!facet_fstype}" = "zfs" ]; then + devname=$(zpool_name ${facet}) + do_facet ${facet} $ZPOOL set "$zfeat_en" $devname || + error "$ZPOOL set $zfeat_en $devname" + else + [ ${facet:0:3} == "mds" ] && + devname=$(mdsdevname ${facet:3}) || + devname=$(ostdevname ${facet:3}) + do_facet ${facet} $TUNE2FS -O project $devname || + error "tune2fs $devname failed" + fi done + KEEP_ZPOOL="${zkeeper}" mount setupall } disable_project_quota() { is_project_quota_supported || return 0 - [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && return 0 + [ "$mds1_FSTYPE" != "ldiskfs" ] && return 0 stopall || error "failed to stopall (1)" for num in $(seq $MDSCOUNT); do -- 1.8.3.1