From 47ed1850a1e27edadd117faa213517d50670a552 Mon Sep 17 00:00:00 2001 From: Qian Yingjin Date: Thu, 25 Mar 2021 10:44:16 +0800 Subject: [PATCH] EX-2860 pcc: test interoperability with 2.14.0 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 Change-Id: Ie4fc41b2dc51a038027009fbcc6e86f9d61cd54f Reviewed-on: https://review.whamcloud.com/43104 Reviewed-by: Andreas Dilger Tested-by: jenkins Tested-by: Maloo Reviewed-by: James Nunez Reviewed-by: Li Xi --- lustre/include/uapi/linux/lustre/lustre_idl.h | 5 +- lustre/llite/llite_lib.c | 2 +- lustre/llite/pcc.c | 75 ++++++++++-------- lustre/tests/sanity-pcc.sh | 108 ++++++++++++++++++++++++++ 4 files changed, 156 insertions(+), 34 deletions(-) diff --git a/lustre/include/uapi/linux/lustre/lustre_idl.h b/lustre/include/uapi/linux/lustre/lustre_idl.h index b932907..c4d224c 100644 --- a/lustre/include/uapi/linux/lustre/lustre_idl.h +++ b/lustre/include/uapi/linux/lustre/lustre_idl.h @@ -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 | \ diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 2226da3..a4b517f 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -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) diff --git a/lustre/llite/pcc.c b/lustre/llite/pcc.c index 8923f30..ef415ab 100644 --- a/lustre/llite/pcc.c +++ b/lustre/llite/pcc.c @@ -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; diff --git a/lustre/tests/sanity-pcc.sh b/lustre/tests/sanity-pcc.sh index 8e0a4a5..b708c85 100644 --- a/lustre/tests/sanity-pcc.sh +++ b/lustre/tests/sanity-pcc.sh @@ -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 -- 1.8.3.1