Whamcloud - gitweb
LU-8055 ldev: Introduced role filtering
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 9d0f17e..6702d6c 100755 (executable)
@@ -3199,8 +3199,8 @@ test_45() { #17310
        df -h $MOUNT &
        log "sleep 60 sec"
        sleep 60
-       #define OBD_FAIL_PTLRPC_LONG_UNLINK   0x50f
-       do_facet client "$LCTL set_param fail_loc=0x50f"
+#define OBD_FAIL_PTLRPC_LONG_REPL_UNLINK   0x50f
+       do_facet client "$LCTL set_param fail_loc=0x50f fail_val=0"
        log "sleep 10 sec"
        sleep 10
        manual_umount_client --force || error "manual_umount_client failed"
@@ -4069,7 +4069,7 @@ test_56() {
        MDSJOURNALSIZE=16
 
        for num in $(seq 1 $MDSCOUNT); do
-               reformat_mdt $num
+               format_mdt $num
        done
        add ost1 $(mkfs_opts ost1 $(ostdevname 1)) --index=10000 --reformat \
                $(ostdevname 1) $(ostvdevname 1)
@@ -5117,6 +5117,28 @@ test_76b() { # LU-4783
 }
 run_test 76b "verify params log setup correctly"
 
+test_76c() {
+       [[ $(lustre_version_code mgs) -ge $(version_code 2.8.54) ]] ||
+               { skip "Need MDS version at least 2.4.52" && return 0; }
+       setupall
+       local MASK_PARAM="mdd.*.changelog_mask"
+       echo "Change changelog_mask"
+       do_facet mgs $LCTL set_param -P $MASK_PARAM=-CLOSE ||
+               error "Can't change changlog_mask"
+       wait_update $(facet_host mds) "$LCTL get_param -n $MASK_PARAM |
+               grep 'CLOSE'" ""
+
+       echo "Check the value is stored after mds remount"
+       stop_mds || error "Failed to stop MDS"
+       start_mds || error "Failed to start MDS"
+       local CHANGELOG_MASK=$(do_facet mgs $LCTL get_param -n $MASK_PARAM)
+       echo $CHANGELOG_MASK | grep CLOSE > /dev/null &&
+               error "changelog_mask is not changed"
+
+       stopall
+}
+run_test 76c "verify changelog_mask is applied with set_param -P"
+
 test_77() { # LU-3445
        local server_version=$(lustre_version_code $SINGLEMDS)
 
@@ -5817,6 +5839,15 @@ test_85() {
 }
 run_test 85 "osd_ost init: fail ea_fid_set"
 
+cleanup_86() {
+       trap 0
+
+       # ost1 has already registered to the MGS before the reformat.
+       # So after reformatting it with option "-G", it could not be
+       # mounted to the MGS. Cleanup the system for subsequent tests.
+       reformat_and_config
+}
+
 test_86() {
        [ "$(facet_fstype ost1)" = "zfs" ] &&
                skip "LU-6442: no such mkfs params for ZFS OSTs" && return
@@ -5840,6 +5871,9 @@ test_86() {
 
        echo "params: $opts"
 
+       trap cleanup_86 EXIT ERR
+
+       stopall
        add ost1 $opts || error "add ost1 failed with new params"
 
        local FOUNDSIZE=$(do_facet ost1 "$DEBUGFS -c -R stats $(ostdevname 1)" |
@@ -5847,7 +5881,8 @@ test_86() {
 
        [[ $FOUNDSIZE == $NEWSIZE ]] ||
                error "Flex block group size: $FOUNDSIZE, expected: $NEWSIZE"
-       return 0
+
+       cleanup_86
 }
 run_test 86 "Replacing mkfs.lustre -G option"
 
@@ -6319,11 +6354,22 @@ run_test 91 "evict-by-nid support"
 generate_ldev_conf() {
        # generate an ldev.conf file
        local ldevconfpath=$1
+       local fstype=
+       local fsldevformat=""
        touch $ldevconfpath
-       printf "%s\t-\t%s-MGS0000\t%s\n" \
+
+       fstype=$(facet_fstype mgs)
+       if [ "$fstype" == "zfs" ]; then
+               fsldevformat="$fstype:"
+       else
+               fsldevformat=""
+       fi
+
+       printf "%s\t-\t%s-MGS0000\t%s%s\n" \
                $mgs_HOST \
                $FSNAME \
-               $(mgsdevname) >> $ldevconfpath
+               $fsldevformat \
+               $(mgsdevname) > $ldevconfpath
 
        local mdsfo_host=$mdsfailover_HOST;
        if [ -z "$mdsfo_host" ]; then
@@ -6331,11 +6377,19 @@ generate_ldev_conf() {
        fi
 
        for num in $(seq $MDSCOUNT); do
-               printf "%s\t%s\t%s-MDT%04d\t%s\n" \
+               fstype=$(facet_fstype mds$num)
+               if [ "$fstype" == "zfs" ]; then
+                       fsldevformat="$fstype:"
+               else
+                       fsldevformat=""
+               fi
+
+               printf "%s\t%s\t%s-MDT%04d\t%s%s\n" \
                        $mds_HOST \
                        $mdsfo_host \
                        $FSNAME \
                        $num \
+                       $fsldevformat \
                        $(mdsdevname $num) >> $ldevconfpath
        done
 
@@ -6345,13 +6399,26 @@ generate_ldev_conf() {
        fi
 
        for num in $(seq $OSTCOUNT); do
-               printf "%s\t%s\t%s-OST%04d\t%s\n" \
+               fstype=$(facet_fstype ost$num)
+               if [ "$fstype" == "zfs" ]; then
+                       fsldevformat="$fstype:"
+               else
+                       fsldevformat=""
+               fi
+
+               printf "%s\t%s\t%s-OST%04d\t%s%s\n" \
                        $ost_HOST \
                        $ostfo_host \
                        $FSNAME \
                        $num \
+                       $fsldevformat \
                        $(ostdevname $num) >> $ldevconfpath
        done
+
+       echo "----- $ldevconfpath -----"
+       cat $ldevconfpath
+       echo "--- END $ldevconfpath ---"
+
 }
 
 generate_nids() {
@@ -6359,11 +6426,37 @@ generate_nids() {
        # looks like we only have the MGS nid available to us
        # so just echo that to a file
        local nidspath=$1
-       touch $nidspath
-       echo -e "${mgs_HOST}\t${MGSNID}" >> $nidspath
+       echo -e "${mgs_HOST}\t${MGSNID}" > $nidspath
+
+       echo "----- $nidspath -----"
+       cat $nidspath
+       echo "--- END $nidspath ---"
+}
+
+compare_ldev_output() {
+       ldev_output=$1
+       expected_output=$2
+
+       sort $expected_output -o $expected_output
+       sort $ldev_output -o $ldev_output
+
+       echo "-- START OF LDEV OUTPUT --"
+       cat $ldev_output
+       echo "--- END OF LDEV OUTPUT ---"
+
+       echo "-- START OF EXPECTED OUTPUT --"
+       cat $expected_output
+       echo "--- END OF EXPECTED OUTPUT ---"
+
+       diff $expected_output $ldev_output
+       return $?
 }
 
 test_92() {
+       if [ -z "$LDEV" ]; then
+               error "ldev is missing!"
+       fi
+
        local LDEVCONFPATH=$TMP/ldev.conf
        local NIDSPATH=$TMP/nids
 
@@ -6372,32 +6465,11 @@ test_92() {
        generate_ldev_conf $LDEVCONFPATH
        generate_nids $NIDSPATH
 
-       echo "----- ldev.conf -----"
-       cat $LDEVCONFPATH
-       echo "--- END ldev.conf ---"
-
-       echo "----- /etc/nids -----"
-       cat $NIDSPATH
-       echo "--- END /etc/nids ---"
-
-       # ldev can be in our build tree and if we aren't in a
-       # build tree, use 'which' to try and find it
-       local LDEV=$LUSTRE/scripts/ldev
-       [ ! -f "$LDEV" ] && local LDEV=$(which ldev 2> /dev/null)
-
-       echo "ldev path is $LDEV"
-
-       if [ ! -f "$LDEV" ]; then
-               rm $LDEVCONFPATH $NIDSPATH
-               error "failed to find ldev!"
-       fi
-
        # echo the mgs nid and compare it to environment variable MGSNID
        # also, ldev.conf and nids is a server side thing, use the OSS
        # hostname
        local output
-       output=$(perl $LDEV -c $LDEVCONFPATH -H \
-                       $ost_HOST -n $NIDSPATH echo %m)
+       output=$($LDEV -c $LDEVCONFPATH -H $ost_HOST -n $NIDSPATH echo %m)
 
        echo "-- START OF LDEV OUTPUT --"
        echo -e "$output"
@@ -6421,6 +6493,292 @@ test_92() {
 }
 run_test 92 "ldev returns MGS NID correctly in command substitution"
 
+test_93() {
+       [ $MDSCOUNT -lt 3 ] && skip "needs >= 3 MDTs" && return
+
+       reformat
+       #start mgs or mgs/mdt0
+       if ! combined_mgs_mds ; then
+               start_mgs
+               start_mdt 1
+       else
+               start_mdt 1
+       fi
+
+       start_ost || error "OST0 start fail"
+
+       #define OBD_FAIL_MGS_WRITE_TARGET_DELAY  0x90e
+       do_facet mgs "$LCTL set_param fail_val = 10 fail_loc=0x8000090e"
+       for num in $(seq 2 $MDSCOUNT); do
+               start_mdt $num &
+       done
+
+       mount_client $MOUNT || error "mount client fails"
+       wait_osc_import_state mds ost FULL
+       wait_osc_import_state client ost FULL
+       check_mount || error "check_mount failed"
+
+       cleanup || error "cleanup failed with $?"
+}
+run_test 93 "register mulitple MDT at the same time"
+
+test_94() {
+       if [ -z "$LDEV" ]; then
+               error "ldev is missing!"
+       fi
+
+       local LDEVCONFPATH=$TMP/ldev.conf
+       local NIDSPATH=$TMP/nids
+
+       generate_ldev_conf $LDEVCONFPATH
+       generate_nids $NIDSPATH
+
+       local LDEV_OUTPUT=$TMP/ldev-output.txt
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME > $LDEV_OUTPUT
+
+       # ldev failed, error
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT
+               error "ldev failed to execute!"
+       fi
+
+       # expected output
+       local EXPECTED_OUTPUT=$TMP/ldev-expected.txt
+
+       printf "%s-MGS0000\n" $FSNAME > $EXPECTED_OUTPUT
+
+       for num in $(seq $MDSCOUNT); do
+               printf "%s-MDT%04d\n" $FSNAME $num >> $EXPECTED_OUTPUT
+       done
+
+       for num in $(seq $OSTCOUNT); do
+               printf "%s-OST%04d\n" $FSNAME $num >> $EXPECTED_OUTPUT
+       done
+
+       compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+               error "ldev failed to produce the correct hostlist!"
+       fi
+
+       rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+}
+run_test 94 "ldev outputs correct labels for file system name query"
+
+test_95() {
+       if [ -z "$LDEV" ]; then
+               error "ldev is missing!"
+       fi
+
+       local LDEVCONFPATH=$TMP/ldev.conf
+       local NIDSPATH=$TMP/nids
+
+       generate_ldev_conf $LDEVCONFPATH
+       generate_nids $NIDSPATH
+
+       # SUCCESS CASES
+       # file sys filter
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME &>/dev/null
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -F failed!"
+       fi
+
+       # local filter
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -l  &>/dev/null
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -l failed!"
+       fi
+
+       # foreign filter
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -f &>/dev/null
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -f failed!"
+       fi
+
+       # all filter
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -a &>/dev/null
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -a failed!"
+       fi
+
+       # FAILURE CASES
+       # all & file sys
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -a -F $FSNAME &>/dev/null
+       if [ $? -eq 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -a and -F incorrectly succeeded"
+       fi
+
+       # all & foreign
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -a -f &>/dev/null
+       if [ $? -eq 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -a and -f incorrectly succeeded"
+       fi
+
+       # all & local
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -a -l &>/dev/null
+       if [ $? -eq 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -a and -l incorrectly succeeded"
+       fi
+
+       # foreign & local
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -f -l &>/dev/null
+       if [ $? -eq 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -f and -l incorrectly succeeded"
+       fi
+
+       # file sys & local
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -l &>/dev/null
+       if [ $? -eq 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -F and -l incorrectly succeeded"
+       fi
+
+       # file sys & foreign
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -f &>/dev/null
+       if [ $? -eq 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH
+               error "ldev label filtering w/ -F and -f incorrectly succeeded"
+       fi
+
+       rm $LDEVCONFPATH $NIDSPATH
+}
+run_test 95 "ldev should only allow one label filter"
+
+test_96() {
+       if [ -z "$LDEV" ]; then
+               error "ldev is missing!"
+       fi
+
+       local LDEVCONFPATH=$TMP/ldev.conf
+       local NIDSPATH=$TMP/nids
+
+       generate_ldev_conf $LDEVCONFPATH
+       generate_nids $NIDSPATH
+
+       local LDEV_OUTPUT=$TMP/ldev-output.txt
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -H $mgs_HOST \
+               echo %H-%b | \
+               awk '{print $2}' > $LDEV_OUTPUT
+
+       # ldev failed, error
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT
+               error "ldev failed to execute!"
+       fi
+
+       # expected output
+       local EXPECTED_OUTPUT=$TMP/ldev-expected-output.txt
+
+       echo "$mgs_HOST-$(facet_fstype mgs)" > $EXPECTED_OUTPUT
+
+       if [ "$mgs_HOST" == "$mds_HOST" ]; then
+               for num in $(seq $MDSCOUNT); do
+                       echo "$mds_HOST-$(facet_fstype mds$num)" \
+                       >> $EXPECTED_OUTPUT
+               done
+       fi
+
+       if [ "$mgs_HOST" == "$ost_HOST" ]; then
+               for num in $(seq $OSTCOUNT); do
+                       echo "$ost_HOST-$(facet_fstype ost$num)" \
+                       >> $EXPECTED_OUTPUT
+               done
+       fi
+
+       compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+               error "ldev failed to produce the correct output!"
+       fi
+
+       rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+}
+run_test 96 "ldev returns hostname and backend fs correctly in command sub"
+
+test_97() {
+       if [ -z "$LDEV" ]; then
+               error "ldev is missing!"
+       fi
+
+       local LDEVCONFPATH=$TMP/ldev.conf
+       local NIDSPATH=$TMP/nids
+
+       generate_ldev_conf $LDEVCONFPATH
+       generate_nids $NIDSPATH
+
+       local LDEV_OUTPUT=$TMP/ldev-output.txt
+       local EXPECTED_OUTPUT=$TMP/ldev-expected-output.txt
+
+       echo -e "\nMDT role"
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -R mdt > $LDEV_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT
+               error "ldev failed to execute for mdt role!"
+       fi
+
+       for num in $(seq $MDSCOUNT); do
+               printf "%s-MDT%04d\n" $FSNAME $num >> $EXPECTED_OUTPUT
+       done
+
+       compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+               error "ldev failed to produce the correct output for mdt role!"
+       fi
+
+       echo -e "\nOST role"
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -R ost > $LDEV_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT $EXPECTED_OUTPUT
+               error "ldev failed to execute for ost role!"
+       fi
+
+       rm $EXPECTED_OUTPUT
+       for num in $(seq $OSTCOUNT); do
+               printf "%s-OST%04d\n" $FSNAME $num >> $EXPECTED_OUTPUT
+       done
+
+       compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+               error "ldev failed to produce the correct output for ost role!"
+       fi
+
+       echo -e "\nMGS role"
+       $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -R mgs > $LDEV_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT $EXPECTED_OUTPUT
+               error "ldev failed to execute for mgs role!"
+       fi
+
+       printf "%s-MGS0000\n" $FSNAME > $EXPECTED_OUTPUT
+
+       compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+       if [ $? -ne 0 ]; then
+               rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+               error "ldev failed to produce the correct output for mgs role!"
+       fi
+
+       rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+}
+run_test 97 "ldev returns correct ouput when querying based on role"
+
 if ! combined_mgs_mds ; then
        stop mgs
 fi