Whamcloud - gitweb
Merge b_md into HEAD
[fs/lustre-release.git] / lustre / tests / recovery-small.sh
1 #!/bin/sh
2
3 set -ex
4
5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 PATH=$PATH:$LUSTRE/utils:$LUSTRE/tests
7
8 . $LUSTRE/../ltest/functional/llite/common/common.sh
9
10 PDSH='pdsh -S -w'
11
12 # XXX I wish all this stuff was in some default-config.sh somewhere
13 MDSNODE=${MDSNODE:-dev2}
14 OSTNODE=${OSTNODE:-dev3}
15 CLIENT=${CLIENTNODE:-dev4}
16 NETWORKTYPE=${NETWORKTYPE:-tcp}
17 MOUNTPT=${MOUNTPT:-/mnt/lustre}
18 CONFIG=recovery-small.xml
19 MDSDEV=/tmp/mds
20 OSTDEV=/tmp/ost
21 MDSSIZE=100000
22 OSTSIZE=100000
23
24 do_mds() {
25     $PDSH $MDSNODE "PATH=\$PATH:$LUSTRE/utils:$LUSTRE/tests; cd $PWD; $@"
26 }
27
28 do_client() {
29     $PDSH $CLIENT "PATH=\$PATH:$LUSTRE/utils:$LUSTRE/tests; cd $PWD; $@"
30 }
31
32 do_ost() {
33     $PDSH $OSTNODE "PATH=\$PATH:$LUSTRE/utils:$LUSTRE/tests; cd $PWD; $@"
34 }
35
36 drop_request() {
37     do_mds "echo 0x121 > /proc/sys/lustre/fail_loc"
38     do_client "$1"
39     do_mds "echo 0 > /proc/sys/lustre/fail_loc"
40 }
41
42 drop_reply() {
43     do_mds "echo 0x120 > /proc/sys/lustre/fail_loc"
44     do_client "$@"
45     do_mds "echo 0 > /proc/sys/lustre/fail_loc"
46 }
47
48 make_config() {
49     rm -f $CONFIG
50     for NODE in $CLIENT $MDSNODE $OSTNODE; do
51        lmc -m $CONFIG --add net --node $NODE --nid `h2$NETWORKTYPE $NODE` \
52            --nettype $NETWORKTYPE || exit 4
53     done
54     lmc -m $CONFIG --add mds --node $MDSNODE --mds mds1 --dev $MDSDEV \
55         --size $MDSSIZE || exit 5
56     lmc -m $CONFIG --add ost --node $OSTNODE --ost ost1 --dev $OSTDEV \
57         --size $OSTSIZE || exit 6
58     lmc -m $CONFIG --add mtpt --node $CLIENT --path $MOUNTPT --mds mds1 \
59         --ost ost1 || exit 7
60 }
61
62 start_mds() {
63     do_mds "lconf $@ $CONFIG"
64 }
65
66 shutdown_mds() {
67     do_mds "lconf $@ --cleanup $CONFIG"
68 }
69
70 start_ost() {
71     do_ost "lconf $@ $CONFIG"
72 }
73
74 shutdown_ost() {
75     do_ost "lconf $@ --cleanup $CONFIG"
76 }
77
78 mount_client() {
79     do_client "lconf $@ $CONFIG"
80 }
81
82 unmount_client() {
83     do_client "lconf $@ --cleanup $CONFIG"
84 }
85
86 setup() {
87     make_config
88     start_mds --reformat
89     start_ost --reformat
90     # XXX we should write our own upcall, when we move this somewhere better.
91     mount_client --timeout=10 \
92         --recovery_upcall=$PWD/../../ltest/functional/llite/09/client-upcall.sh
93 }
94
95 cleanup() {
96     unmount_client || true
97     shutdown_mds || true
98     shutdown_ost || true
99 }
100
101 replay() {
102     if [ $# -gt 1 ]; then
103         do_client "$1"
104         shift
105     fi
106     do_mds "sync"
107     do_mds 'echo -e "device \$mds1\\nprobe\\nnotransno\\nreadonly" | lctl'
108     do_client "$1" &
109     shutdown_mds -f
110     start_mds
111     wait
112     do_client "ls $MOUNPT" # trigger failover, if we haven't already
113 }
114
115 if [ ! -z "$ONLY" ]; then
116     eval "$ONLY"
117     exit $?
118 fi
119
120 setup
121 drop_request "mcreate /mnt/lustre/1"
122 drop_reply "mcreate /mnt/lustre/2"
123 replay "mcreate /mnt/lustre/3"
124 cleanup