Whamcloud - gitweb
LU-4748 test: get one single qos_threshold_rr number
[fs/lustre-release.git] / lustre / tests / mdsrate-create-small.sh
1  #!/bin/bash
2 #
3 # This test was used in a set of CMD3 tests (cmd3-3 test).
4
5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 . $LUSTRE/tests/test-framework.sh
7 init_test_env $@
8 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
9
10 assert_env CLIENTS MDSRATE SINGLECLIENT MPIRUN
11
12 MACHINEFILE=${MACHINEFILE:-$TMP/$(basename $0 .sh).machines}
13 BASEDIR=$MOUNT/mdsrate
14
15 # Requirements
16 NUM_FILES=${NUM_FILES:-1000000}
17 TIME_PERIOD=${TIME_PERIOD:-600}                        # seconds
18
19 # Local test variables
20 TESTDIR_SINGLE="${BASEDIR}/single"
21 TESTDIR_MULTI="${BASEDIR}/multi"
22
23 LOG=${TESTSUITELOG:-$TMP/$(basename $0 .sh).log}
24 CLIENT=$SINGLECLIENT
25 NODES_TO_USE=${NODES_TO_USE:-$CLIENTS}
26 NUM_CLIENTS=$(get_node_count ${NODES_TO_USE//,/ })
27 # XXX - this needs to be determined given the number of MDTs and the number
28 #       of clients.
29 THREADS_PER_CLIENT=3                   # threads/client for multi client test
30 if [ $NUM_CLIENTS -gt 50 ]; then
31     THREADS_PER_CLIENT=1
32 fi
33
34 [ ! -x ${MDSRATE} ] && error "${MDSRATE} not built."
35
36 # Make sure we start with a clean slate
37 rm -f ${LOG}
38
39 log "===== $0 ====== "
40
41 check_and_setup_lustre
42
43 mkdir -p $BASEDIR
44 chmod 0777 $BASEDIR
45 $LFS setstripe $BASEDIR -i 0 -c 1
46 get_stripe $BASEDIR
47
48 IFree=$(mdsrate_inodes_available)
49 if [ $IFree -lt $NUM_FILES ]; then
50     NUM_FILES=$IFree
51 fi
52
53 generate_machine_file $NODES_TO_USE $MACHINEFILE || error "can not generate machinefile"
54
55 if [ -n "$NOSINGLE" ]; then
56     echo "NO Tests on single client."
57 else
58     if [ -n "$NOCREATE" ]; then
59         echo "NO Test for creates for a single client."
60     else
61         # We can use np = $NUM_CLIENTS to speed up the cleanup
62         mdsrate_cleanup $NUM_CLIENTS $MACHINEFILE $NUM_FILES $TESTDIR_SINGLE 'f%%d' --ignore
63
64         log "===== $0 ### 1 NODE CREATE ###"
65
66         COMMAND="${MDSRATE} ${MDSRATE_DEBUG} --create --time ${TIME_PERIOD}
67                 --nfiles $NUM_FILES --dir ${TESTDIR_SINGLE} --filefmt 'f%%d'"
68         echo "+ ${COMMAND}"
69         mpi_run ${MACHINEFILE_OPTION} ${MACHINEFILE} -np 1 ${COMMAND} |
70                 tee ${LOG}
71
72         if [ ${PIPESTATUS[0]} != 0 ]; then
73                 [ -f $LOG ] && sed -e "s/^/log: /" $LOG
74                 error_noexit "mdsrate create on single client failed, aborting"
75                 mdsrate_cleanup $NUM_CLIENTS $MACHINEFILE $NUM_FILES \
76                                 $TESTDIR_SINGLE 'f%%d' --ignore
77                 exit 1
78         fi
79     fi
80
81     if [ -n "$NOUNLINK" ]; then
82         echo "NO Test for unlinks for a single client."
83     else
84         log "===== $0 ### 1 NODE UNLINK ###"
85
86         COMMAND="${MDSRATE} ${MDSRATE_DEBUG} --unlink
87                      --nfiles ${NUM_FILES} --dir ${TESTDIR_SINGLE} --filefmt 'f%%d'"
88         echo "+ ${COMMAND}"
89         mpi_run ${MACHINEFILE_OPTION} ${MACHINEFILE} -np 1 ${COMMAND} |
90                 tee ${LOG}
91
92         if [ ${PIPESTATUS[0]} != 0 ]; then
93             [ -f $LOG ] && sed -e "s/^/log: /" $LOG
94             error "mdsrate unlinks for a single client failed, aborting"
95         fi
96
97         rmdir $TESTDIR_SINGLE
98     fi
99 fi
100
101 IFree=$(mdsrate_inodes_available)
102 if [ $IFree -lt $NUM_FILES ]; then
103     NUM_FILES=$IFree
104 fi
105
106 if [ -n "$NOMULTI" ]; then
107     echo "NO tests on multiple nodes."
108 else
109     if [ -n "$NOCREATE" ]; then
110         echo "NO test for create on multiple nodes."
111     else
112         mdsrate_cleanup $NUM_CLIENTS $MACHINEFILE $NUM_FILES $TESTDIR_MULTI 'f%%d' --ignore
113
114         log "===== $0 ### $NUM_CLIENTS NODES CREATE with $THREADS_PER_CLIENT threads per client ###"
115
116         COMMAND="${MDSRATE} ${MDSRATE_DEBUG} --create --time ${TIME_PERIOD}
117                 --nfiles $NUM_FILES --dir ${TESTDIR_MULTI} --filefmt 'f%%d'"
118         echo "+ ${COMMAND}"
119         mpi_run ${MACHINEFILE_OPTION} ${MACHINEFILE} \
120                 -np $((NUM_CLIENTS * THREADS_PER_CLIENT)) ${COMMAND} |
121                 tee ${LOG}
122
123         if [ ${PIPESTATUS[0]} != 0 ]; then
124                 [ -f $LOG ] && sed -e "s/^/log: /" $LOG
125                 error_noexit "mdsrate create on multiple nodes failed, aborting"
126                 mdsrate_cleanup $((NUM_CLIENTS * THREADS_PER_CLIENT)) \
127                                 $MACHINEFILE $NUM_FILES \
128                                 $TESTDIR_MULTI 'f%%d' --ignore
129                 exit 1
130         fi
131     fi
132
133     if [ -n "$NOUNLINK" ]; then
134         echo "NO Test for unlinks multiple nodes."
135     else
136         log "===== $0 ### $NUM_CLIENTS NODES UNLINK with $THREADS_PER_CLIENT threads per client ###"
137
138         COMMAND="${MDSRATE} ${MDSRATE_DEBUG} --unlink
139                       --nfiles ${NUM_FILES} --dir ${TESTDIR_MULTI} --filefmt 'f%%d'"
140         echo "+ ${COMMAND}"
141         mpi_run ${MACHINEFILE_OPTION} ${MACHINEFILE} \
142                 -np $((NUM_CLIENTS * THREADS_PER_CLIENT)) ${COMMAND} |
143                 tee ${LOG}
144         if [ ${PIPESTATUS[0]} != 0 ]; then
145             [ -f $LOG ] && sed -e "s/^/log: /" $LOG
146             error "mdsrate unlinks multiple nodes failed, aborting"
147         fi
148
149         rmdir $TESTDIR_MULTI
150     fi
151 fi
152
153 complete $SECONDS
154 rmdir $BASEDIR || true
155 rm -f $MACHINEFILE
156 check_and_cleanup_lustre
157 #rm -f $LOG
158
159 exit 0