Whamcloud - gitweb
LU-12770 test: zfs project_quota testing 97/36197/6
authorShaun Tancheff <stancheff@cray.com>
Fri, 4 Oct 2019 18:13:35 +0000 (13:13 -0500)
committerOleg Drokin <green@whamcloud.com>
Fri, 6 Dec 2019 01:07:39 +0000 (01:07 +0000)
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 <stancheff@cray.com>
Change-Id: I8111820aa2f4415e8d62c472a3553fe3b9288f19
Reviewed-on: https://review.whamcloud.com/36197
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Petros Koutoupis <pkoutoupis@cray.com>
lustre/tests/sanity-quota.sh
lustre/tests/test-framework.sh

index ad311bc..23a1ae8 100755 (executable)
@@ -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
index 207c0e0..53f40a7 100755 (executable)
@@ -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
+#   <pool/fs>`. 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