Whamcloud - gitweb
EX-2860 pcc: test interoperability with 2.14.0
authorQian Yingjin <qian@ddn.com>
Thu, 25 Mar 2021 02:44:16 +0000 (10:44 +0800)
committerLi Xi <lixi@ddn.com>
Fri, 14 May 2021 08:00:15 +0000 (08:00 +0000)
For Lustre 2.14.0 servers, it fails many of subtests that are
PCC-RO specific.
In this patch, each subtest related to PCC-RO adds an connect
flag check and skip it when run against old servers without
PCC-RO support.

Test-Parameters: serverversion=2.14 testlist=sanity-pcc
Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: Ie4fc41b2dc51a038027009fbcc6e86f9d61cd54f
Reviewed-on: https://review.whamcloud.com/43104
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Nunez <jnunez@whamcloud.com>
Reviewed-by: Li Xi <lixi@ddn.com>
lustre/include/uapi/linux/lustre/lustre_idl.h
lustre/llite/llite_lib.c
lustre/llite/pcc.c
lustre/tests/sanity-pcc.sh

index b932907..c4d224c 100644 (file)
@@ -930,8 +930,9 @@ struct ptlrpc_body_v2 {
                                OBD_CONNECT2_PCC | \
                                OBD_CONNECT2_CRUSH | \
                                OBD_CONNECT2_ENCRYPT | \
-                               OBD_CONNECT2_GETATTR_PFID |\
-                               OBD_CONNECT2_LSEEK | OBD_CONNECT2_DOM_LVB)
+                               OBD_CONNECT2_GETATTR_PFID | \
+                               OBD_CONNECT2_LSEEK | OBD_CONNECT2_DOM_LVB | \
+                               OBD_CONNECT2_PCCRO)
 
 #define OST_CONNECT_SUPPORTED  (OBD_CONNECT_SRVLOCK | OBD_CONNECT_GRANT | \
                                OBD_CONNECT_REQPORTAL | OBD_CONNECT_VERSION | \
index 2226da3..a4b517f 100644 (file)
@@ -281,7 +281,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt)
                                   OBD_CONNECT2_PCC |
                                   OBD_CONNECT2_CRUSH | OBD_CONNECT2_LSEEK |
                                   OBD_CONNECT2_GETATTR_PFID |
-                                  OBD_CONNECT2_DOM_LVB;
+                                  OBD_CONNECT2_DOM_LVB | OBD_CONNECT2_PCCRO;
 
 #ifdef HAVE_LRU_RESIZE_SUPPORT
         if (sbi->ll_flags & LL_SBI_LRU_RESIZE)
index 8923f30..ef415ab 100644 (file)
@@ -694,37 +694,6 @@ pcc_parse_value_pairs(struct pcc_cmd *cmd, char *buffer)
                        return rc;
        }
 
-       switch (cmd->pccc_cmd) {
-       case PCC_ADD_DATASET:
-               if (cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC &&
-                   cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
-                       return -EINVAL;
-               /*
-                * By default, a PCC backend can provide caching service for
-                * both PCC-RW and PCC-RO.
-                */
-               if ((cmd->u.pccc_add.pccc_flags & PCC_DATASET_PCC_ALL) == 0)
-                       cmd->u.pccc_add.pccc_flags |= PCC_DATASET_PCC_ALL;
-
-               if (cmd->u.pccc_add.pccc_rwid == 0 &&
-                   cmd->u.pccc_add.pccc_roid == 0)
-                       return -EINVAL;
-
-               if (cmd->u.pccc_add.pccc_rwid == 0 &&
-                   cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC)
-                       cmd->u.pccc_add.pccc_rwid = cmd->u.pccc_add.pccc_roid;
-
-               if (cmd->u.pccc_add.pccc_roid == 0 &&
-                   cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
-                       cmd->u.pccc_add.pccc_roid = cmd->u.pccc_add.pccc_rwid;
-
-               break;
-       case PCC_DEL_DATASET:
-       case PCC_CLEAR_ALL:
-               break;
-       default:
-               return -EINVAL;
-       }
        return 0;
 }
 
@@ -947,6 +916,46 @@ pcc_dataset_match_get(struct pcc_super *super, enum lu_pcc_type type,
        return selected;
 }
 
+static int
+pcc_dataset_flags_check(struct pcc_super *super, struct pcc_cmd *cmd)
+{
+       struct ll_sb_info *sbi;
+
+       sbi = container_of(super, struct ll_sb_info, ll_pcc_super);
+
+       if (cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC &&
+           cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
+               return -EINVAL;
+
+       if (cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC &&
+           !(exp_connect_flags2(sbi->ll_md_exp) & OBD_CONNECT2_PCCRO))
+               return -EOPNOTSUPP;
+
+       /*
+        * By default, a PCC backend can provide caching service for
+        * both RW-PCC and RO-PCC.
+        */
+       if ((cmd->u.pccc_add.pccc_flags & PCC_DATASET_PCC_ALL) == 0) {
+               cmd->u.pccc_add.pccc_flags |= PCC_DATASET_RWPCC;
+               if (exp_connect_flags2(sbi->ll_md_exp) & OBD_CONNECT2_PCCRO)
+                       cmd->u.pccc_add.pccc_flags |= PCC_DATASET_ROPCC;
+       }
+
+       if (cmd->u.pccc_add.pccc_rwid == 0 &&
+           cmd->u.pccc_add.pccc_roid == 0)
+               return -EINVAL;
+
+       if (cmd->u.pccc_add.pccc_rwid == 0 &&
+           cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC)
+               cmd->u.pccc_add.pccc_rwid = cmd->u.pccc_add.pccc_roid;
+
+       if (cmd->u.pccc_add.pccc_roid == 0 &&
+           cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
+               cmd->u.pccc_add.pccc_roid = cmd->u.pccc_add.pccc_rwid;
+
+       return 0;
+}
+
 /**
  * pcc_dataset_add - Add a Cache policy to control which files need be
  * cached and where it will be cached.
@@ -963,6 +972,10 @@ pcc_dataset_add(struct pcc_super *super, struct pcc_cmd *cmd)
        bool found = false;
        int rc;
 
+       rc = pcc_dataset_flags_check(super, cmd);
+       if (rc)
+               return rc;
+
        OBD_ALLOC_PTR(dataset);
        if (dataset == NULL)
                return -ENOMEM;
index 8e0a4a5..b708c85 100644 (file)
@@ -642,6 +642,9 @@ test_3a() {
        local file=$DIR/$tdir/$tfile
        local file2=$DIR2/$tdir/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
                "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
@@ -1060,11 +1063,17 @@ test_10b() {
 run_test 10b "Test RW-PCC with group quota on loop PCC device"
 
 test_10c() {
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        test_usrgrp_quota "u" "-r"
 }
 run_test 10c "Test RO-PCC with user quota on loop PCC device"
 
 test_10d() {
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        test_usrgrp_quota "g" "-r"
 }
 run_test 10d "Test RO-PCC with group quota on loop PCC device"
@@ -1077,6 +1086,9 @@ test_usrgrp_edquot() {
        local id=$RUNAS_ID
        local ug=$1
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        [[ $ug == "g" ]] && id=$RUNAS_GID
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        do_facet $SINGLEAGT quotacheck -c$ug $mntpt ||
@@ -1363,6 +1375,9 @@ run_test 13c "Check auto RW-PCC create caching for UID/GID/ProjID/fname rule"
 test_14() {
        local file=$DIR/$tdir/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
                "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
@@ -1401,6 +1416,9 @@ test_15() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tdir/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -1492,6 +1510,9 @@ test_16() {
        local file=$DIR/$tfile
        local -a lpcc_path
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -1696,6 +1717,9 @@ test_21a() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -1734,6 +1758,9 @@ test_21b() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -1775,6 +1802,9 @@ test_21c() {
        local file=$DIR/$tfile
        local fid
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -1811,6 +1841,9 @@ test_21d() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -1837,6 +1870,9 @@ test_21e() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -1863,6 +1899,9 @@ test_21f() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -1895,6 +1934,9 @@ test_21g() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -1921,6 +1963,9 @@ test_21h() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -1963,6 +2008,9 @@ test_21i() {
        local file2=$DIR2/$tfile
        local fid
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -2011,6 +2059,9 @@ test_22() {
        local file2=$DIR2/$tfile
        local fid
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -2079,6 +2130,9 @@ test_23() {
        local file=$DIR/$tfile
        local -a lpcc_path
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -2145,6 +2199,9 @@ test_24a() {
        local file=$DIR/$tdir/$tfile
        local -a lpcc_path
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -2196,6 +2253,9 @@ test_24b() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tdir/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -2238,6 +2298,9 @@ test_25() {
        local file=$DIR/$tdir/$tfile
        local content
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -2291,6 +2354,9 @@ test_26() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER" -h "$hsm_root"
        setup_pcc_mapping $SINGLEAGT \
@@ -2387,6 +2453,9 @@ test_27() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER" -h "$hsm_root"
        setup_pcc_mapping $SINGLEAGT \
@@ -2505,6 +2574,9 @@ test_29a() {
        local file=$DIR/$tdir/$tfile
        local file2=$DIR2/$tdir/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        is_project_quota_supported || skip "project quota is not supported"
 
        enable_project_quota
@@ -2542,6 +2614,9 @@ test_29b() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/myfile.dat
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
@@ -2572,6 +2647,9 @@ test_30() {
        local hsm_root="$mntpt/$tdir"
        local file
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -2609,6 +2687,9 @@ test_31() {
        local -a lpcc_path3
        local file
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -2668,6 +2749,9 @@ test_32() {
        local file=$DIR/$tfile
        local -a lpcc_path
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
@@ -2710,6 +2794,9 @@ test_33() {
        local file=$DIR/myfile.doc
        local file2=$DIR2/myfile.doc
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
 
@@ -2775,6 +2862,9 @@ test_34() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        is_project_quota_supported || skip "project quota is not supported"
 
        enable_project_quota
@@ -2851,6 +2941,9 @@ test_35() {
        local file=$DIR/$tfile
        local -a lpcc_path
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
@@ -2913,6 +3006,9 @@ test_36a() {
 run_test 36a "Stale RW-PCC copy should be deleted after remove the PCC backend"
 
 test_36b() {
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        test_36_base "-r"
 }
 run_test 36b "Stale RO-PCC copy should be deleted after remove the PCC backend"
@@ -2925,6 +3021,9 @@ test_37() {
        local file=$DIR/$tdir/$tfile
        local file2=$DIR2/$tdir/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        mkdir -p $DIR/$tdir || error "mkdir $DIR/$tdir failed"
        touch $file
 
@@ -2964,6 +3063,9 @@ test_38() {
        local dir=$DIR/$tdir
        local file=$dir/$tfile
 
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        is_project_quota_supported || skip "project quota is not supported"
 
        enable_project_quota
@@ -2989,6 +3091,9 @@ test_38() {
 run_test 38 "Verify LFS pcc state does not trigger prefetch for auto PCC-RO"
 
 test_39() {
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        quotaon --help |& grep -q 'project quotas' ||
                skip "Not support project quota on local filesystem"
 
@@ -3055,6 +3160,9 @@ calc_stats_facet() {
 }
 
 test_40() {
+       $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+               skip "Server does not support PCC-RO"
+
        is_project_quota_supported || skip "project quota is not supported"
 
        enable_project_quota