5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 . $LUSTRE/tests/test-framework.sh
13 # the summary file a bit smaller than OSTSIZE
14 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
16 [ "$SLOW" = no ] && { nobjhi=1; thrhi=4; }
17 thrlo=${thrlo:-$(( thrhi / 2))}
20 ALWAYS_EXCEPT="$OBDFILTER_SURVEY_EXCEPT"
22 OBDSURVEY=${OBDSURVEY:-$(which obdfilter-survey)}
25 check_and_setup_lustre
28 $LCTL get_param -n osc.*.kbytesavail | sort -n | head -n1
31 # FIXME: the summary file a bit smaller than OSTSIZE, add estimation
32 minsize=$(min_ost_size)
33 if [ $(( size * 1024 )) -ge $minsize ]; then
34 size=$((minsize * 10 / 1024 / 12 ))
35 echo min kbytesavail: $minsize using size=${size} MBytes per obd instance
43 for oss in $(osts_nodes); do
44 devs=$(do_node $oss "lctl dl |grep obdfilter |sort" | awk '{print $4}')
46 # if oss is local -- obdfilter-survey needs dev wo/ host
48 [[ $oss = `hostname` ]] || target=$oss:$target
49 targets="$targets $target"
56 obdflter_survey_targets () {
61 disk) targets=$(get_targets);;
62 netdisk) targets=$(get_targets);;
63 network) targets="$(osts_nodes)";;
64 *) error "unknown obdflter-survey case!" ;;
69 obdflter_survey_run () {
72 rm -f ${TMP}/obdfilter_survey*
74 local targets=$(obdflter_survey_targets $case)
75 local cmd="NETTYPE=$NETTYPE thrlo=$thrlo nobjhi=$nobjhi thrhi=$thrhi size=$size case=$case rslt_loc=${TMP} targets=\"$targets\" $OBDSURVEY"
79 cat ${TMP}/obdfilter_survey*
82 obdflter_survey_run disk
84 run_test 1a "Object Storage Targets survey"
89 local varsvc=${facet}_svc
90 local dev=$(basename $(do_facet $facet lctl get_param -n *.${!varsvc}.mntdev))
92 # ext4: /proc/fs/jbd2/sda1:8/history
93 # ext3: /proc/fs/jbd/sdb1/history
95 do_facet $facet cat /proc/fs/jbd*/${dev}*/$file
102 # last two lines from history
104 # $8: hndls >= thrhi * 2
105 local hist=("$(print_jbd history $facet | tail -3 | head -2)")
107 local run=($(echo "${hist[*]}" | awk '{print $4}'))
108 local hndls=($(echo "${hist[*]}" | awk '{print $8}'))
111 for (( i=0; i<1; i++)); do
112 [[ ${run[i]} -lt 5000 ]] && \
113 error "$facet: run expected 5000, have ${run[i]}" && rc=1
114 [[ ${hndls[i]} -lt $((thrhi * 2)) ]] && \
115 error "$facet: hndls expected > $((thrhi * 2)), have ${hndls[i]}" && rc=2
120 check_jbd_values_facets () {
125 for facet in ${facets//,/ }; do
126 check_jbd_values $facet $thrhi || rc=$((rc+$?))
132 local major=$(get_mds_kernel_major)
133 local minor=$(get_mds_kernel_minor)
134 [ "$major"=="2.6" -a $minor -eq 32 ] && \
135 skip "There is no jbd history in this kernel version." && return
136 local param_file=$TMP/$tfile-params
138 do_nodesv $(comma_list $(osts_nodes)) lctl get_param obdfilter.${FSNAME}-*.sync_journal
140 save_lustre_params $(comma_list $(osts_nodes)) "obdfilter.${FSNAME}-*.sync_journal" >$param_file
141 do_nodesv $(comma_list $(osts_nodes)) lctl set_param obdfilter.${FSNAME}-*.sync_journal=0
143 thrlo=4 nobjhi=1 thrhi=4 obdflter_survey_run disk
145 check_jbd_values_facets $(get_facets OST) 4 || rc=$((rc+$?))
147 restore_lustre_params < $param_file
152 run_test 1b "Object Storage Targets survey, async journal"
155 obdflter_survey_run netdisk
157 run_test 2a "Stripe F/S over the Network"
160 local major=$(get_mds_kernel_major)
161 local minor=$(get_mds_kernel_minor)
162 [ "$major"=="2.6" -a $minor -eq 32 ] && \
163 skip "There is no jbd history in this kernel version." && return
164 local param_file=$TMP/$tfile-params
166 do_nodesv $(comma_list $(osts_nodes)) lctl get_param obdfilter.${FSNAME}-*.sync_journal
168 save_lustre_params $(comma_list $(osts_nodes)) "obdfilter.${FSNAME}-*.sync_journal" >$param_file
169 do_nodesv $(comma_list $(osts_nodes)) lctl set_param obdfilter.${FSNAME}-*.sync_journal=0
171 thrlo=4 nobjhi=1 thrhi=4 obdflter_survey_run netdisk
173 check_jbd_values_facets $(get_facets OST) 4 || rc=$((rc+$?))
175 restore_lustre_params < $param_file
180 run_test 2b "Stripe F/S over the Network, async journal"
183 # README.obdfilter-survey: In network test only automated run is supported.
185 remote_servers || { skip "Local servers" && return 0; }
187 # The Network survey test needs:
188 # Start lctl and check for the device list. The device list must be empty.
191 obdflter_survey_run network
195 run_test 3a "Network survey"
197 equals_msg `basename $0`: test complete, cleaning up
199 check_and_cleanup_lustre
200 [ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true