Whamcloud - gitweb
LU-11749 tests: sanity-sec 23b exec commands on right node
[fs/lustre-release.git] / lustre / tests / mds-survey.sh
1 #!/bin/bash
2 #set -x
3 set -e
4
5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 . $LUSTRE/tests/test-framework.sh
7 init_test_env $@
8 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
9 init_logging
10
11 file_count=${file_count:-150000}
12 dir_count=${dir_count:-4}
13 thrhi=${thrhi:-8}
14 thrlo=${thrlo:-1}
15
16 [ "$SLOW" = no ] && { file_count=50000; dir_count=2; thrhi=4; }
17
18 # Skip these tests
19 ALWAYS_EXCEPT="$MDS_SURVEY_EXCEPT"
20
21 MDSSURVEY=${MDSSURVEY:-$(which mds-survey 2>/dev/null || true)}
22 [ -z ${MDSSURVEY} ] && skip_env "mds-survey not found"
23
24 if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.51) ]; then
25         skip_env "Need MDS version at least 2.3.51"
26 fi
27
28 build_test_filter
29 check_and_setup_lustre
30
31 adjust_inode() {
32     local require_inode=0
33     local avail_mdt_inode=0
34     local avail_ost_inode=0
35
36     require_inode=$((file_count * thrhi))
37     # get available inode for mdt
38     avail_mdt_inode=$(mdt_free_inodes 0)
39     avail_mdt_inode=$((avail_mdt_inode * 9 / 10))
40
41     # get available inode for ost
42     for i in $($LFS df -i | grep ${FSNAME}-OST | awk '{print $4}'); do
43         avail_ost_inode=$((avail_ost_inode + i))
44     done
45     avail_ost_inode=$((avail_ost_inode * 9 / 10))
46
47     ((require_inode > avail_mdt_inode)) && require_inode=$avail_mdt_inode
48     ((require_inode > avail_ost_inode)) && require_inode=$avail_ost_inode
49
50     if ((require_inode == 0)); then
51         error "Fail to get the inode count"
52     fi
53     # convert it back to per thread inode
54     require_inode=$((require_inode / thrhi))
55
56     echo $require_inode
57 }
58
59
60 file_count=$(adjust_inode)
61 ost_count=$($LCTL dl | grep -c osc)
62
63 # first unmount all the lustre clients
64 cleanup_mount $MOUNT
65 cleanup_mount $MOUNT2
66
67 get_target() {
68         local node=$1
69         local mdt
70         local mdts
71         local target
72
73         mdts=$(do_node $node "$LCTL dl" |
74                awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}")
75
76         for mdt in $mdts; do
77                 target+="${target:+ }$node:$mdt"
78         done
79
80         echo -n $target
81 }
82
83 get_targets() {
84         local targets
85         local node
86
87         for node in $(mdts_nodes); do
88                 targets+="${targets:+ }$(get_target $node)"
89         done
90
91         echo -n $targets
92 }
93
94 mds_survey_run() {
95         local layer=${1:-mdd}
96         local stripe_count=${2:-0}
97         local rc=0
98
99         rm -f ${TMP}/mds_survey*
100
101         local cmd="file_count=$file_count thrlo=$thrlo thrhi=$thrhi"
102         cmd+=" dir_count=$dir_count layer=$layer stripe_count=$stripe_count"
103         cmd+=" rslt_loc=${TMP} targets=\"$(get_targets)\" $MDSSURVEY"
104
105         trap cleanup_echo_devs EXIT ERR
106
107         echo + $cmd
108         eval $cmd || rc=$?
109         cat ${TMP}/mds_survey*
110         rm -f ${TMP}/mds_survey*
111         ((rc == 0)) || error "mds-survey failed"
112 }
113
114 test_1() {
115         mds_survey_run "mdd" "0"
116 }
117 run_test 1 "Metadata survey with zero-stripe"
118
119 test_2() {
120         local mdscount=$(get_node_count "$(mdts_nodes)")
121
122         [ $mdscount -gt 1 ] && skip_env "Only run this test on single MDS"
123         [ $ost_count -eq 0 ] && skip_env "Need to mount OST to test"
124
125         mds_survey_run "mdd" "1"
126 }
127 run_test 2 "Metadata survey with stripe_count = 1"
128
129 # remount the clients
130 restore_mount $MOUNT
131
132 complete $SECONDS
133 cleanup_echo_devs
134 check_and_cleanup_lustre
135 exit_status