Whamcloud - gitweb
b=13669
[fs/lustre-release.git] / lustre / tests / replay-single.sh
1 #!/bin/bash
2
3 set -e
4 #set -v
5
6 #
7 # This test needs to be run on the client
8 #
9 SAVE_PWD=$PWD
10 LUSTRE=${LUSTRE:-`dirname $0`/..}
11 SETUP=${SETUP:-}
12 CLEANUP=${CLEANUP:-}
13 . $LUSTRE/tests/test-framework.sh
14 init_test_env $@
15 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
16 CHECK_GRANT=${CHECK_GRANT:-"yes"}
17 GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""}
18
19 # Skip these tests
20 # bug number: 
21 ALWAYS_EXCEPT="$REPLAY_SINGLE_EXCEPT"
22
23 build_test_filter
24
25 cleanup_and_setup_lustre
26
27 mkdir -p $DIR
28
29 test_0() {
30     replay_barrier mds
31     fail mds
32 }
33 run_test 0 "empty replay"
34
35 test_0b() {
36     # this test attempts to trigger a race in the precreation code, 
37     # and must run before any other objects are created on the filesystem
38     fail ost1
39     createmany -o $DIR/$tfile 20 || return 1
40     unlinkmany $DIR/$tfile 20 || return 2
41 }
42 run_test 0b "ensure object created after recover exists. (3284)"
43
44 test_1() {
45     replay_barrier mds
46     mcreate $DIR/$tfile
47     fail mds
48     $CHECKSTAT -t file $DIR/$tfile || return 1
49     rm $DIR/$tfile
50 }
51 run_test 1 "simple create"
52
53 test_1a() {
54     do_facet ost1 "sysctl -w lustre.fail_loc=0"
55
56     rm -fr $DIR/$tfile
57     local old_last_id=`cat $LPROC/obdfilter/*/last_id`
58     touch -o $DIR/$tfile 1
59     sync
60     local new_last_id=`cat $LPROC/obdfilter/*/last_id`
61     
62     test "$old_last_id" = "$new_last_id" || {
63         echo "OST object create is caused by MDS"
64         return 1
65     }
66     
67     old_last_id=`cat $LPROC/obdfilter/*/last_id`
68     echo "data" > $DIR/$tfile
69     sync
70     new_last_id=`cat $LPROC/obdfilter/*/last_id`
71     test "$old_last_id" = "$new_last_id "&& {
72         echo "CROW does not work on write"
73         return 1
74     }
75     
76     rm -fr $DIR/$tfile
77
78 #define OBD_FAIL_OST_CROW_EIO | OBD_FAIL_ONCE
79     do_facet ost1 "sysctl -w lustre.fail_loc=0x80000801"
80
81     rm -fr $DIR/1a1
82     old_last_id=`cat $LPROC/obdfilter/*/last_id`
83     echo "data" > $DIR/1a1
84     sync
85     new_last_id=`cat $LPROC/obdfilter/*/last_id`
86     test "$old_last_id" = "$new_last_id" || {
87         echo "CROW does work with fail_loc=0x80000801"
88         return 1
89     }
90     
91     rm -fr $DIR/1a1
92     
93     do_facet ost1 "sysctl -w lustre.fail_loc=0"
94 }
95 #CROW run_test 1a "CROW object create (check OST last_id)"
96
97 test_2a() {
98     replay_barrier mds
99     touch $DIR/$tfile
100     fail mds
101     $CHECKSTAT -t file $DIR/$tfile || return 1
102     rm $DIR/$tfile
103 }
104 run_test 2a "touch"
105
106 test_2b() {
107     mcreate $DIR/$tfile
108     replay_barrier mds
109     touch $DIR/$tfile
110     fail mds
111     $CHECKSTAT -t file $DIR/$tfile || return 1
112     rm $DIR/$tfile
113 }
114 run_test 2b "touch"
115
116 test_3a() {
117     replay_barrier mds
118     mcreate $DIR/$tfile
119     o_directory $DIR/$tfile
120     fail mds
121     $CHECKSTAT -t file $DIR/$tfile || return 2
122     rm $DIR/$tfile
123 }
124 run_test 3a "replay failed open(O_DIRECTORY)"
125
126 test_3b() {
127     replay_barrier mds
128 #define OBD_FAIL_MDS_OPEN_PACK | OBD_FAIL_ONCE
129     do_facet mds "sysctl -w lustre.fail_loc=0x80000114"
130     touch $DIR/$tfile
131     do_facet mds "sysctl -w lustre.fail_loc=0"
132     fail mds
133     $CHECKSTAT -t file $DIR/$tfile && return 2
134     return 0
135 }
136 run_test 3b "replay failed open -ENOMEM"
137
138 test_3c() {
139     replay_barrier mds
140 #define OBD_FAIL_MDS_ALLOC_OBDO | OBD_FAIL_ONCE
141     do_facet mds "sysctl -w lustre.fail_loc=0x80000128"
142     touch $DIR/$tfile
143     do_facet mds "sysctl -w lustre.fail_loc=0"
144     fail mds
145
146     $CHECKSTAT -t file $DIR/$tfile && return 2
147     return 0
148 }
149 run_test 3c "replay failed open -ENOMEM"
150
151 test_4() {
152     replay_barrier mds
153     for i in `seq 10`; do
154         echo "tag-$i" > $DIR/$tfile-$i
155     done 
156     fail mds
157     for i in `seq 10`; do
158       grep -q "tag-$i" $DIR/$tfile-$i || error "$tfile-$i"
159     done 
160 }
161 run_test 4 "|x| 10 open(O_CREAT)s"
162
163 test_4b() {
164     replay_barrier mds
165     rm -rf $DIR/$tfile-*
166     fail mds
167     $CHECKSTAT -t file $DIR/$tfile-* && return 1 || true
168 }
169 run_test 4b "|x| rm 10 files"
170
171 # The idea is to get past the first block of precreated files on both 
172 # osts, and then replay.
173 test_5() {
174     replay_barrier mds
175     for i in `seq 220`; do
176         echo "tag-$i" > $DIR/$tfile-$i
177     done 
178     fail mds
179     for i in `seq 220`; do
180       grep -q "tag-$i" $DIR/$tfile-$i || error "f1c-$i"
181     done 
182     rm -rf $DIR/$tfile-*
183     sleep 3
184     # waiting for commitment of removal
185 }
186 run_test 5 "|x| 220 open(O_CREAT)"
187
188
189 test_6() {
190     replay_barrier mds
191     mkdir $DIR/$tdir
192     mcreate $DIR/$tdir/$tfile
193     fail mds
194     $CHECKSTAT -t dir $DIR/$tdir || return 1
195     $CHECKSTAT -t file $DIR/$tdir/$tfile || return 2
196     sleep 2
197     # waiting for log process thread
198 }
199 run_test 6 "mkdir + contained create"
200
201 test_6b() {
202     replay_barrier mds
203     rm -rf $DIR/$tdir
204     fail mds
205     $CHECKSTAT -t dir $DIR/$tdir && return 1 || true 
206 }
207 run_test 6b "|X| rmdir"
208
209 test_7() {
210     mkdir $DIR/$tdir
211     replay_barrier mds
212     mcreate $DIR/$tdir/$tfile
213     fail mds
214     $CHECKSTAT -t dir $DIR/$tdir || return 1
215     $CHECKSTAT -t file $DIR/$tdir/$tfile || return 2
216     rm -fr $DIR/$tdir
217 }
218 run_test 7 "mkdir |X| contained create"
219
220 test_8() {
221     replay_barrier mds
222     multiop $DIR/$tfile mo_c &
223     MULTIPID=$!
224     sleep 1
225     fail mds
226     ls $DIR/$tfile
227     $CHECKSTAT -t file $DIR/$tfile || return 1
228     kill -USR1 $MULTIPID || return 2
229     wait $MULTIPID || return 3
230     rm $DIR/$tfile
231 }
232 run_test 8 "creat open |X| close"
233
234 test_9() {
235     replay_barrier mds
236     mcreate $DIR/$tfile
237     local old_inum=`ls -i $DIR/$tfile | awk '{print $1}'`
238     fail mds
239     local new_inum=`ls -i $DIR/$tfile | awk '{print $1}'`
240
241     echo " old_inum == $old_inum, new_inum == $new_inum"
242     if [ $old_inum -eq $new_inum  ] ;
243     then
244         echo " old_inum and new_inum match"
245     else
246         echo "!!!! old_inum and new_inum NOT match"
247         return 1
248     fi
249     rm $DIR/$tfile
250 }
251 run_test 9  "|X| create (same inum/gen)"
252
253 test_10() {
254     mcreate $DIR/$tfile
255     replay_barrier mds
256     mv $DIR/$tfile $DIR/$tfile-2
257     rm -f $DIR/$tfile
258     fail mds
259     $CHECKSTAT $DIR/$tfile && return 1
260     $CHECKSTAT $DIR/$tfile-2 ||return 2
261     rm $DIR/$tfile-2
262     return 0
263 }
264 run_test 10 "create |X| rename unlink"
265
266 test_11() {
267     mcreate $DIR/$tfile
268     echo "old" > $DIR/$tfile
269     mv $DIR/$tfile $DIR/$tfile-2
270     replay_barrier mds
271     echo "new" > $DIR/$tfile
272     grep new $DIR/$tfile 
273     grep old $DIR/$tfile-2
274     fail mds
275     grep new $DIR/$tfile || return 1
276     grep old $DIR/$tfile-2 || return 2
277 }
278 run_test 11 "create open write rename |X| create-old-name read"
279
280 test_12() {
281     mcreate $DIR/$tfile 
282     multiop $DIR/$tfile o_tSc &
283     pid=$!
284     # give multiop a chance to open
285     sleep 1
286     rm -f $DIR/$tfile
287     replay_barrier mds
288     kill -USR1 $pid
289     wait $pid || return 1
290
291     fail mds
292     [ -e $DIR/$tfile ] && return 2
293     return 0
294 }
295 run_test 12 "open, unlink |X| close"
296
297
298 # 1777 - replay open after committed chmod that would make
299 #        a regular open a failure    
300 test_13() {
301     mcreate $DIR/$tfile 
302     multiop $DIR/$tfile O_wc &
303     pid=$!
304     # give multiop a chance to open
305     sleep 1 
306     chmod 0 $DIR/$tfile
307     $CHECKSTAT -p 0 $DIR/$tfile
308     replay_barrier mds
309     fail mds
310     kill -USR1 $pid
311     wait $pid || return 1
312
313     $CHECKSTAT -s 1 -p 0 $DIR/$tfile || return 2
314     return 0
315 }
316 run_test 13 "open chmod 0 |x| write close"
317
318 test_14() {
319     multiop $DIR/$tfile O_tSc &
320     pid=$!
321     # give multiop a chance to open
322     sleep 1 
323     rm -f $DIR/$tfile
324     replay_barrier mds
325     kill -USR1 $pid || return 1
326     wait $pid || return 2
327
328     fail mds
329     [ -e $DIR/$tfile ] && return 3
330     return 0
331 }
332 run_test 14 "open(O_CREAT), unlink |X| close"
333
334 test_15() {
335     multiop $DIR/$tfile O_tSc &
336     pid=$!
337     # give multiop a chance to open
338     sleep 1 
339     rm -f $DIR/$tfile
340     replay_barrier mds
341     touch $DIR/g11 || return 1
342     kill -USR1 $pid
343     wait $pid || return 2
344
345     fail mds
346     [ -e $DIR/$tfile ] && return 3
347     touch $DIR/h11 || return 4
348     return 0
349 }
350 run_test 15 "open(O_CREAT), unlink |X|  touch new, close"
351
352
353 test_16() {
354     replay_barrier mds
355     mcreate $DIR/$tfile
356     munlink $DIR/$tfile
357     mcreate $DIR/$tfile-2
358     fail mds
359     [ -e $DIR/$tfile ] && return 1
360     [ -e $DIR/$tfile-2 ] || return 2
361     munlink $DIR/$tfile-2 || return 3
362 }
363 run_test 16 "|X| open(O_CREAT), unlink, touch new,  unlink new"
364
365 test_17() {
366     replay_barrier mds
367     multiop $DIR/$tfile O_c &
368     pid=$!
369     # give multiop a chance to open
370     sleep 1 
371     fail mds
372     kill -USR1 $pid || return 1
373     wait $pid || return 2
374     $CHECKSTAT -t file $DIR/$tfile || return 3
375     rm $DIR/$tfile
376 }
377 run_test 17 "|X| open(O_CREAT), |replay| close"
378
379 test_18() {
380     replay_barrier mds
381     multiop $DIR/$tfile O_tSc &
382     pid=$!
383     # give multiop a chance to open
384     sleep 1 
385     rm -f $DIR/$tfile
386     touch $DIR/$tfile-2 || return 1
387     echo "pid: $pid will close"
388     kill -USR1 $pid
389     wait $pid || return 2
390
391     fail mds
392     [ -e $DIR/$tfile ] && return 3
393     [ -e $DIR/$tfile-2 ] || return 4
394     # this touch frequently fails
395     touch $DIR/$tfile-3 || return 5
396     munlink $DIR/$tfile-2 || return 6
397     munlink $DIR/$tfile-3 || return 7
398     return 0
399 }
400 run_test 18 "|X| open(O_CREAT), unlink, touch new, close, touch, unlink"
401
402 # bug 1855 (a simpler form of test_11 above)
403 test_19() {
404     replay_barrier mds
405     mcreate $DIR/$tfile
406     echo "old" > $DIR/$tfile
407     mv $DIR/$tfile $DIR/$tfile-2
408     grep old $DIR/$tfile-2
409     fail mds
410     grep old $DIR/$tfile-2 || return 2
411 }
412 run_test 19 "|X| mcreate, open, write, rename "
413
414 test_20() {
415     replay_barrier mds
416     multiop $DIR/$tfile O_tSc &
417     pid=$!
418     # give multiop a chance to open
419     sleep 1 
420     rm -f $DIR/$tfile
421
422     fail mds
423     kill -USR1 $pid
424     wait $pid || return 1
425     [ -e $DIR/$tfile ] && return 2
426     return 0
427 }
428 run_test 20 "|X| open(O_CREAT), unlink, replay, close (test mds_cleanup_orphans)"
429
430 test_20b() { # bug 10480
431     BEFOREUSED=`df -P $DIR | tail -1 | awk '{ print $3 }'`
432
433     dd if=/dev/zero of=$DIR/$tfile bs=4k count=10000 &
434     pid=$!
435     while [ ! -e $DIR/$tfile ] ; do
436         sleep 0.060s                           # give dd a chance to start
437     done
438
439     lfs getstripe $DIR/$tfile || return 1
440     rm -f $DIR/$tfile || return 2       # make it an orphan
441     mds_evict_client
442     df -P $DIR || df -P $DIR || true    # reconnect
443
444     fail mds                            # start orphan recovery
445     df -P $DIR || df -P $DIR || true    # reconnect
446     wait_mds_recovery_done || error "MDS recovery not done"
447
448     AFTERUSED=`df -P $DIR | tail -1 | awk '{ print $3 }'`
449     log "before $BEFOREUSED, after $AFTERUSED"
450     [ $AFTERUSED -gt $((BEFOREUSED + 20)) ] && \
451         error "after $AFTERUSED > before $BEFOREUSED" && return 5
452     return 0
453 }
454 run_test 20b "write, unlink, eviction, replay, (test mds_cleanup_orphans)"
455
456 test_20c() { # bug 10480
457     dd if=/dev/zero of=$DIR/$tfile bs=4k count=10000
458
459     exec 100< $DIR/$tfile
460
461     ls -la $DIR/$tfile
462
463     mds_evict_client
464
465     df -P $DIR || df -P $DIR || true    # reconnect
466
467     exec 100<&-
468
469     test -s $DIR/$tfile || error "File was truncated"
470
471     return 0
472 }
473 run_test 20c "check that client eviction does not affect file content"
474
475 test_21() {
476     replay_barrier mds
477     multiop $DIR/$tfile O_tSc &
478     pid=$!
479     # give multiop a chance to open
480     sleep 1 
481     rm -f $DIR/$tfile
482     touch $DIR/g11 || return 1
483
484     fail mds
485     kill -USR1 $pid
486     wait $pid || return 2
487     [ -e $DIR/$tfile ] && return 3
488     touch $DIR/h11 || return 4
489     return 0
490 }
491 run_test 21 "|X| open(O_CREAT), unlink touch new, replay, close (test mds_cleanup_orphans)"
492
493 test_22() {
494     multiop $DIR/$tfile O_tSc &
495     pid=$!
496     # give multiop a chance to open
497     sleep 1 
498
499     replay_barrier mds
500     rm -f $DIR/$tfile
501
502     fail mds
503     kill -USR1 $pid
504     wait $pid || return 1
505     [ -e $DIR/$tfile ] && return 2
506     return 0
507 }
508 run_test 22 "open(O_CREAT), |X| unlink, replay, close (test mds_cleanup_orphans)"
509
510 test_23() {
511     multiop $DIR/$tfile O_tSc &
512     pid=$!
513     # give multiop a chance to open
514     sleep 1 
515
516     replay_barrier mds
517     rm -f $DIR/$tfile
518     touch $DIR/g11 || return 1
519
520     fail mds
521     kill -USR1 $pid
522     wait $pid || return 2
523     [ -e $DIR/$tfile ] && return 3
524     touch $DIR/h11 || return 4
525     return 0
526 }
527 run_test 23 "open(O_CREAT), |X| unlink touch new, replay, close (test mds_cleanup_orphans)"
528
529 test_24() {
530     multiop $DIR/$tfile O_tSc &
531     pid=$!
532     # give multiop a chance to open
533     sleep 1 
534
535     replay_barrier mds
536     fail mds
537     rm -f $DIR/$tfile
538     kill -USR1 $pid
539     wait $pid || return 1
540     [ -e $DIR/$tfile ] && return 2
541     return 0
542 }
543 run_test 24 "open(O_CREAT), replay, unlink, close (test mds_cleanup_orphans)"
544
545 test_25() {
546     multiop $DIR/$tfile O_tSc &
547     pid=$!
548     # give multiop a chance to open
549     sleep 1 
550     rm -f $DIR/$tfile
551
552     replay_barrier mds
553     fail mds
554     kill -USR1 $pid
555     wait $pid || return 1
556     [ -e $DIR/$tfile ] && return 2
557     return 0
558 }
559 run_test 25 "open(O_CREAT), unlink, replay, close (test mds_cleanup_orphans)"
560
561 test_26() {
562     replay_barrier mds
563     multiop $DIR/$tfile-1 O_tSc &
564     pid1=$!
565     multiop $DIR/$tfile-2 O_tSc &
566     pid2=$!
567     # give multiop a chance to open
568     sleep 1 
569     rm -f $DIR/$tfile-1
570     rm -f $DIR/$tfile-2
571     kill -USR1 $pid2
572     wait $pid2 || return 1
573
574     fail mds
575     kill -USR1 $pid1
576     wait $pid1 || return 2
577     [ -e $DIR/$tfile-1 ] && return 3
578     [ -e $DIR/$tfile-2 ] && return 4
579     return 0
580 }
581 run_test 26 "|X| open(O_CREAT), unlink two, close one, replay, close one (test mds_cleanup_orphans)"
582
583 test_27() {
584     replay_barrier mds
585     multiop $DIR/$tfile-1 O_tSc &
586     pid1=$!
587     multiop $DIR/$tfile-2 O_tSc &
588     pid2=$!
589     # give multiop a chance to open
590     sleep 1 
591     rm -f $DIR/$tfile-1
592     rm -f $DIR/$tfile-2
593
594     fail mds
595     kill -USR1 $pid1
596     wait $pid1 || return 1
597     kill -USR1 $pid2
598     wait $pid2 || return 2
599     [ -e $DIR/$tfile-1 ] && return 3
600     [ -e $DIR/$tfile-2 ] && return 4
601     return 0
602 }
603 run_test 27 "|X| open(O_CREAT), unlink two, replay, close two (test mds_cleanup_orphans)"
604
605 test_28() {
606     multiop $DIR/$tfile-1 O_tSc &
607     pid1=$!
608     multiop $DIR/$tfile-2 O_tSc &
609     pid2=$!
610     # give multiop a chance to open
611     sleep 1 
612     replay_barrier mds
613     rm -f $DIR/$tfile-1
614     rm -f $DIR/$tfile-2
615     kill -USR1 $pid2
616     wait $pid2 || return 1
617
618     fail mds
619     kill -USR1 $pid1
620     wait $pid1 || return 2
621     [ -e $DIR/$tfile-1 ] && return 3
622     [ -e $DIR/$tfile-2 ] && return 4
623     return 0
624 }
625 run_test 28 "open(O_CREAT), |X| unlink two, close one, replay, close one (test mds_cleanup_orphans)"
626
627 test_29() {
628     multiop $DIR/$tfile-1 O_tSc &
629     pid1=$!
630     multiop $DIR/$tfile-2 O_tSc &
631     pid2=$!
632     # give multiop a chance to open
633     sleep 1 
634     replay_barrier mds
635     rm -f $DIR/$tfile-1
636     rm -f $DIR/$tfile-2
637
638     fail mds
639     kill -USR1 $pid1
640     wait $pid1 || return 1
641     kill -USR1 $pid2
642     wait $pid2 || return 2
643     [ -e $DIR/$tfile-1 ] && return 3
644     [ -e $DIR/$tfile-2 ] && return 4
645     return 0
646 }
647 run_test 29 "open(O_CREAT), |X| unlink two, replay, close two (test mds_cleanup_orphans)"
648
649 test_30() {
650     multiop $DIR/$tfile-1 O_tSc &
651     pid1=$!
652     multiop $DIR/$tfile-2 O_tSc &
653     pid2=$!
654     # give multiop a chance to open
655     sleep 1 
656     rm -f $DIR/$tfile-1
657     rm -f $DIR/$tfile-2
658
659     replay_barrier mds
660     fail mds
661     kill -USR1 $pid1
662     wait $pid1 || return 1
663     kill -USR1 $pid2
664     wait $pid2 || return 2
665     [ -e $DIR/$tfile-1 ] && return 3
666     [ -e $DIR/$tfile-2 ] && return 4
667     return 0
668 }
669 run_test 30 "open(O_CREAT) two, unlink two, replay, close two (test mds_cleanup_orphans)"
670
671 test_31() {
672     multiop $DIR/$tfile-1 O_tSc &
673     pid1=$!
674     multiop $DIR/$tfile-2 O_tSc &
675     pid2=$!
676     # give multiop a chance to open
677     sleep 1 
678     rm -f $DIR/$tfile-1
679
680     replay_barrier mds
681     rm -f $DIR/$tfile-2
682     fail mds
683     kill -USR1 $pid1
684     wait $pid1 || return 1
685     kill -USR1 $pid2
686     wait $pid2 || return 2
687     [ -e $DIR/$tfile-1 ] && return 3
688     [ -e $DIR/$tfile-2 ] && return 4
689     return 0
690 }
691 run_test 31 "open(O_CREAT) two, unlink one, |X| unlink one, close two (test mds_cleanup_orphans)"
692
693 # tests for bug 2104; completion without crashing is success.  The close is
694 # stale, but we always return 0 for close, so the app never sees it.
695 test_32() {
696     multiop $DIR/$tfile O_c &
697     pid1=$!
698     multiop $DIR/$tfile O_c &
699     pid2=$!
700     # give multiop a chance to open
701     sleep 1
702     mds_evict_client
703     df $MOUNT || sleep 1 && df $MOUNT || return 1
704     kill -USR1 $pid1
705     kill -USR1 $pid2
706     sleep 1
707     return 0
708 }
709 run_test 32 "close() notices client eviction; close() after client eviction"
710
711 # Abort recovery before client complete
712 test_33() {
713     replay_barrier mds
714     createmany -o $DIR/$tfile-%d 100 
715     fail_abort mds
716     # this file should be gone, because the replay was aborted
717     $CHECKSTAT -t file $DIR/$tfile-* && return 3 
718     unlinkmany $DIR/$tfile-%d 0 100
719     return 0
720 }
721 run_test 33 "abort recovery before client does replay"
722
723 test_34() {
724     multiop $DIR/$tfile O_c &
725     pid=$!
726     # give multiop a chance to open
727     sleep 1 
728     rm -f $DIR/$tfile
729
730     replay_barrier mds
731     fail_abort mds
732     kill -USR1 $pid
733     [ -e $DIR/$tfile ] && return 1
734     sync
735     return 0
736 }
737 run_test 34 "abort recovery before client does replay (test mds_cleanup_orphans)"
738
739 # bug 2278 - generate one orphan on OST, then destroy it during recovery from llog 
740 test_35() {
741     touch $DIR/$tfile
742
743 #define OBD_FAIL_MDS_REINT_NET_REP       0x119
744     do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
745     rm -f $DIR/$tfile &
746     sleep 1
747     sync
748     sleep 1
749     # give a chance to remove from MDS
750     fail_abort mds
751     $CHECKSTAT -t file $DIR/$tfile && return 1 || true
752 }
753 run_test 35 "test recovery from llog for unlink op"
754
755 # b=2432 resent cancel after replay uses wrong cookie,
756 # so don't resend cancels
757 test_36() {
758     replay_barrier mds
759     touch $DIR/$tfile
760     checkstat $DIR/$tfile
761     facet_failover mds
762     cancel_lru_locks mdc
763     if dmesg | grep "unknown lock cookie"; then 
764         echo "cancel after replay failed"
765         return 1
766     fi
767 }
768 run_test 36 "don't resend cancel"
769
770 # b=2368
771 # directory orphans can't be unlinked from PENDING directory
772 test_37() {
773     rmdir $DIR/$tfile 2>/dev/null
774     multiop $DIR/$tfile dD_c &
775     pid=$!
776     # give multiop a chance to open
777     sleep 1 
778     rmdir $DIR/$tfile
779
780     replay_barrier mds
781     # clear the dmesg buffer so we only see errors from this recovery
782     dmesg -c >/dev/null
783     fail_abort mds
784     kill -USR1 $pid
785     dmesg | grep  "mds_unlink_orphan.*error .* unlinking orphan" && return 1
786     sync
787     return 0
788 }
789 run_test 37 "abort recovery before client does replay (test mds_cleanup_orphans for directories)"
790
791 test_38() {
792     createmany -o $DIR/$tfile-%d 800
793     unlinkmany $DIR/$tfile-%d 0 400
794     replay_barrier mds
795     fail mds
796     unlinkmany $DIR/$tfile-%d 400 400
797     sleep 2
798     $CHECKSTAT -t file $DIR/$tfile-* && return 1 || true
799 }
800 run_test 38 "test recovery from unlink llog (test llog_gen_rec) "
801
802 test_39() { # bug 4176
803     createmany -o $DIR/$tfile-%d 800
804     replay_barrier mds
805     unlinkmany $DIR/$tfile-%d 0 400
806     fail mds
807     unlinkmany $DIR/$tfile-%d 400 400
808     sleep 2
809     ls -1f $DIR/$tfile-*
810     $CHECKSTAT -t file $DIR/$tfile-* && return 1 || true
811 }
812 run_test 39 "test recovery from unlink llog (test llog_gen_rec) "
813
814 count_ost_writes() {
815     awk -vwrites=0 '/ost_write/ { writes += $2 } END { print writes; }' $LPROC/osc/*/stats
816 }
817
818 #b=2477,2532
819 test_40(){
820     $LCTL mark multiop $MOUNT/$tfile OS_c 
821     multiop $MOUNT/$tfile OS_c  &
822     PID=$!
823     writeme -s $MOUNT/${tfile}-2 &
824     WRITE_PID=$!
825     sleep 1
826     facet_failover mds
827 #define OBD_FAIL_MDS_CONNECT_NET         0x117
828     do_facet mds "sysctl -w lustre.fail_loc=0x80000117"
829     kill -USR1 $PID
830     stat1=`count_ost_writes`
831     sleep $TIMEOUT
832     stat2=`count_ost_writes`
833     echo "$stat1, $stat2"
834     if [ $stat1 -lt $stat2 ]; then 
835        echo "writes continuing during recovery"
836        RC=0
837     else
838        echo "writes not continuing during recovery, bug 2477"
839        RC=4
840     fi
841     echo "waiting for writeme $WRITE_PID"
842     kill $WRITE_PID
843     wait $WRITE_PID 
844
845     echo "waiting for multiop $PID"
846     wait $PID || return 2
847     do_facet client munlink $MOUNT/$tfile  || return 3
848     do_facet client munlink $MOUNT/${tfile}-2  || return 3
849     return $RC
850 }
851 run_test 40 "cause recovery in ptlrpc, ensure IO continues"
852
853
854 #b=2814
855 # make sure that a read to one osc doesn't try to double-unlock its page just
856 # because another osc is invalid.  trigger_group_io used to mistakenly return
857 # an error if any oscs were invalid even after having successfully put rpcs
858 # on valid oscs.  This was fatal if the caller was ll_readpage who unlocked
859 # the page, guarnateeing that the unlock from the RPC completion would
860 # assert on trying to unlock the unlocked page.
861 test_41() {
862     [ $OSTCOUNT -lt 2 ] && \
863         skip "skipping test 41: we don't have a second OST to test with" && \
864         return
865
866     local f=$MOUNT/$tfile
867     # make sure the start of the file is ost1
868     lfs setstripe $f $((128 * 1024)) 0 0 
869     do_facet client dd if=/dev/zero of=$f bs=4k count=1 || return 3
870     cancel_lru_locks osc
871     # fail ost2 and read from ost1
872     local osc2dev=`grep ${ost2_svc}-osc- $LPROC/devices | awk '{print $1}'`
873     [ "$osc2dev" ] || return 4
874     $LCTL --device $osc2dev deactivate || return 1
875     do_facet client dd if=$f of=/dev/null bs=4k count=1 || return 3
876     $LCTL --device $osc2dev activate || return 2
877     return 0
878 }
879 run_test 41 "read from a valid osc while other oscs are invalid"
880
881 # test MDS recovery after ost failure
882 test_42() {
883     blocks=`df -P $MOUNT | tail -n 1 | awk '{ print $2 }'`
884     createmany -o $DIR/$tfile-%d 800
885     replay_barrier ost1
886     unlinkmany $DIR/$tfile-%d 0 400
887     debugsave
888     sysctl -w lnet.debug=-1
889     facet_failover ost1
890     
891     # osc is evicted, fs is smaller (but only with failout OSTs (bug 7287)
892     #blocks_after=`df -P $MOUNT | tail -n 1 | awk '{ print $2 }'`
893     #[ $blocks_after -lt $blocks ] || return 1
894     echo wait for MDS to timeout and recover
895     sleep $((TIMEOUT * 2))
896     debugrestore
897     unlinkmany $DIR/$tfile-%d 400 400
898     $CHECKSTAT -t file $DIR/$tfile-* && return 2 || true
899 }
900 run_test 42 "recovery after ost failure"
901
902 # timeout in MDS/OST recovery RPC will LBUG MDS
903 test_43() { # bug 2530
904     replay_barrier mds
905
906     # OBD_FAIL_OST_CREATE_NET 0x204
907     do_facet ost1 "sysctl -w lustre.fail_loc=0x80000204"
908     fail mds
909     sleep 10
910     do_facet ost1 "sysctl -w lustre.fail_loc=0"
911
912     return 0
913 }
914 run_test 43 "mds osc import failure during recovery; don't LBUG"
915
916 test_44() {
917     mdcdev=`awk '/-mdc-/ {print $1}' $LPROC/devices`
918     [ "$mdcdev" ] || exit 2
919     # adaptive timeouts slow this way down
920     MDS_AT_MAX=$(do_facet mds "sysctl -n lustre.adaptive_max")
921     do_facet mds "sysctl -w lustre.adaptive_max=40"
922     for i in `seq 1 10`; do
923         echo "$i of 10 ($(date +%s))"
924         do_facet mds "grep service $LPROC/mdt/MDS/mds/timeouts"
925         #define OBD_FAIL_TGT_CONN_RACE     0x701
926         do_facet mds "sysctl -w lustre.fail_loc=0x80000701"
927         $LCTL --device $mdcdev recover
928         df $MOUNT
929     done
930     do_facet mds "sysctl -w lustre.fail_loc=0"
931     do_facet mds "sysctl -w lustre.adaptive_max=$MDS_AT_MAX"
932     return 0
933 }
934 run_test 44 "race in target handle connect"
935
936 test_44b() {
937     mdcdev=`awk '/-mdc-/ {print $1}' $LPROC/devices`
938     [ "$mdcdev" ] || exit 2
939     for i in `seq 1 10`; do
940         echo "$i of 10 ($(date +%s))"
941         do_facet mds "grep service $LPROC/mdt/MDS/mds/timeouts"
942         #define OBD_FAIL_TGT_DELAY_RECONNECT 0x704
943         do_facet mds "sysctl -w lustre.fail_loc=0x80000704"
944         $LCTL --device $mdcdev recover
945         df $MOUNT
946     done
947     do_facet mds "sysctl -w lustre.fail_loc=0"
948     return 0
949 }
950 run_test 44b "race in target handle connect"
951
952 # Handle failed close
953 test_45() {
954     mdcdev=`awk '/-mdc-/ {print $1}' $LPROC/devices`
955     [ "$mdcdev" ] || exit 2
956     $LCTL --device $mdcdev recover
957
958     multiop $DIR/$tfile O_c &
959     pid=$!
960     sleep 1
961
962     # This will cause the CLOSE to fail before even 
963     # allocating a reply buffer
964     $LCTL --device $mdcdev deactivate || return 4
965
966     # try the close
967     kill -USR1 $pid
968     wait $pid || return 1
969
970     $LCTL --device $mdcdev activate || return 5
971     sleep 1
972
973     $CHECKSTAT -t file $DIR/$tfile || return 2
974     return 0
975 }
976 run_test 45 "Handle failed close"
977
978 test_46() {
979     dmesg -c >/dev/null
980     drop_reply "touch $DIR/$tfile"
981     fail mds
982     # ironically, the previous test, 45, will cause a real forced close,
983     # so just look for one for this test
984     dmesg | grep -i "force closing client file handle for $tfile" && return 1
985     return 0
986 }
987 run_test 46 "Don't leak file handle after open resend (3325)"
988
989 test_47() { # bug 2824
990     # create some files to make sure precreate has been done on all 
991     # OSTs. (just in case this test is run independently)
992     createmany -o $DIR/$tfile 20  || return 1
993
994     # OBD_FAIL_OST_CREATE_NET 0x204
995     fail ost1
996     do_facet ost1 "sysctl -w lustre.fail_loc=0x80000204"
997     df $MOUNT || return 2
998
999     # let the MDS discover the OST failure, attempt to recover, fail
1000     # and recover again.  
1001     sleep $((3 * TIMEOUT))
1002
1003     # Without 2824, this createmany would hang 
1004     createmany -o $DIR/$tfile 20 || return 3
1005     unlinkmany $DIR/$tfile 20 || return 4
1006
1007     do_facet ost1 "sysctl -w lustre.fail_loc=0"
1008     return 0
1009 }
1010 run_test 47 "MDS->OSC failure during precreate cleanup (2824)"
1011
1012 test_48() {
1013     replay_barrier mds
1014     createmany -o $DIR/$tfile 20  || return 1
1015     # OBD_FAIL_OST_EROFS 0x216
1016     fail mds
1017     do_facet ost1 "sysctl -w lustre.fail_loc=0x80000216"
1018     df $MOUNT || return 2
1019
1020     createmany -o $DIR/$tfile 20 20 || return 2
1021     unlinkmany $DIR/$tfile 40 || return 3
1022
1023     do_facet ost1 "sysctl -w lustre.fail_loc=0"
1024     return 0
1025 }
1026 run_test 48 "MDS->OSC failure during precreate cleanup (2824)"
1027
1028 test_50() {
1029     local oscdev=`grep ${ost1_svc}-osc- $LPROC/devices | awk '{print $1}'`
1030     [ "$oscdev" ] || return 1
1031     $LCTL --device $oscdev recover &&  $LCTL --device $oscdev recover
1032     # give the mds_lov_sync threads a chance to run
1033     sleep 5
1034 }
1035 run_test 50 "Double OSC recovery, don't LASSERT (3812)"
1036
1037 # b3764 timed out lock replay
1038 test_52() {
1039     touch $DIR/$tfile
1040     cancel_lru_locks mdc
1041
1042     multiop $DIR/$tfile s || return 1
1043     replay_barrier mds
1044 #define OBD_FAIL_LDLM_REPLY              0x30c
1045     do_facet mds "sysctl -w lustre.fail_loc=0x8000030c"
1046     fail mds || return 2
1047     do_facet mds "sysctl -w lustre.fail_loc=0x0"
1048
1049     $CHECKSTAT -t file $DIR/$tfile-* && return 3 || true
1050 }
1051 run_test 52 "time out lock replay (3764)"
1052
1053 #b_cray 53 "|X| open request and close reply while two MDC requests in flight"
1054 #b_cray 54 "|X| open request and close reply while two MDC requests in flight"
1055
1056 #b3761 ASSERTION(hash != 0) failed
1057 test_55() {
1058 # OBD_FAIL_MDS_OPEN_CREATE | OBD_FAIL_ONCE
1059     do_facet mds "sysctl -w lustre.fail_loc=0x8000012b"
1060     touch $DIR/$tfile &
1061     # give touch a chance to run
1062     sleep 5
1063     do_facet mds "sysctl -w lustre.fail_loc=0x0"
1064     rm $DIR/$tfile
1065     return 0
1066 }
1067 run_test 55 "let MDS_CHECK_RESENT return the original return code instead of 0"
1068
1069 #b3440 ASSERTION(rec->ur_fid2->id) failed
1070 test_56() {
1071     ln -s foo $DIR/$tfile
1072     replay_barrier mds
1073     #drop_reply "cat $DIR/$tfile"
1074     fail mds
1075     sleep 10
1076 }
1077 run_test 56 "don't replay a symlink open request (3440)"
1078
1079 #recovery one mds-ost setattr from llog
1080 test_57() {
1081 #define OBD_FAIL_MDS_OST_SETATTR       0x12c
1082     do_facet mds "sysctl -w lustre.fail_loc=0x8000012c"
1083     touch $DIR/$tfile
1084     replay_barrier mds
1085     fail mds
1086     sleep 1
1087     $CHECKSTAT -t file $DIR/$tfile || return 1
1088     do_facet mds "sysctl -w lustre.fail_loc=0x0"
1089     rm $DIR/$tfile
1090 }
1091 run_test 57 "test recovery from llog for setattr op"
1092
1093 #recovery many mds-ost setattr from llog
1094 test_58() {
1095 #define OBD_FAIL_MDS_OST_SETATTR       0x12c
1096     do_facet mds "sysctl -w lustre.fail_loc=0x8000012c"
1097     mkdir $DIR/$tdir
1098     createmany -o $DIR/$tdir/$tfile-%d 2500
1099     replay_barrier mds
1100     fail mds
1101     sleep 2
1102     $CHECKSTAT -t file $DIR/$tdir/$tfile-* || return 1
1103     do_facet mds "sysctl -w lustre.fail_loc=0x0"
1104     unlinkmany $DIR/$tdir/$tfile-%d 2500
1105     rmdir $DIR/$tdir
1106 }
1107 run_test 58 "test recovery from llog for setattr op (test llog_gen_rec)"
1108
1109 # log_commit_thread vs filter_destroy race used to lead to import use after free
1110 # bug 11658
1111 test_59() {
1112     mkdir $DIR/$tdir
1113     createmany -o $DIR/$tdir/$tfile-%d 200
1114     sync
1115     unlinkmany $DIR/$tdir/$tfile-%d 200
1116 #define OBD_FAIL_PTLRPC_DELAY_RECOV       0x507
1117     do_facet ost1 "sysctl -w lustre.fail_loc=0x507"
1118     fail ost1
1119     fail mds
1120     do_facet ost1 "sysctl -w lustre.fail_loc=0x0"
1121     sleep 20
1122     rmdir $DIR/$tdir
1123 }
1124 run_test 59 "test log_commit_thread vs filter_destroy race"
1125
1126 # race between add unlink llog vs cat log init in post_recovery (only for b1_6)
1127 # bug 12086: should no oops and No ctxt error for this test
1128 test_60() {
1129     mkdir $DIR/$tdir
1130     createmany -o $DIR/$tdir/$tfile-%d 200
1131     replay_barrier mds
1132     unlinkmany $DIR/$tdir/$tfile-%d 0 100
1133     fail mds
1134     unlinkmany $DIR/$tdir/$tfile-%d 100 100
1135     local no_ctxt=`dmesg | grep "No ctxt"`
1136     [ -z "$no_ctxt" ] || error "ctxt is not initialized in recovery" 
1137 }
1138 run_test 60 "test llog post recovery init vs llog unlink"
1139
1140 #test race  llog recovery thread vs llog cleanup
1141 test_61a() {
1142     mkdir $DIR/$tdir
1143     createmany -o $DIR/$tdir/$tfile-%d 800
1144     replay_barrier ost1 
1145 #   OBD_FAIL_OST_LLOG_RECOVERY_TIMEOUT 0x221 
1146     unlinkmany $DIR/$tdir/$tfile-%d 800 
1147     do_facet ost "sysctl -w lustre.fail_loc=0x80000221"
1148     facet_failover ost1
1149     sleep 10 
1150     fail ost1
1151     sleep 30
1152     do_facet ost "sysctl -w lustre.fail_loc=0x0"
1153     $CHECKSTAT -t file $DIR/$tdir/$tfile-* && return 1
1154     rmdir $DIR/$tdir
1155 }
1156 run_test 61a "test race llog recovery vs llog cleanup"
1157
1158 #test race  mds llog sync vs llog cleanup
1159 test_61b() {
1160 #   OBD_FAIL_MDS_LLOG_SYNC_TIMEOUT 0x13a 
1161     do_facet mds "sysctl -w lustre.fail_loc=0x8000013a"
1162     facet_failover mds 
1163     sleep 10
1164     fail mds
1165     do_facet client dd if=/dev/zero of=$DIR/$tfile bs=4k count=1 || return 1
1166 }
1167 run_test 61b "test race mds llog sync vs llog cleanup"
1168
1169 #test race  cancel cookie cb vs llog cleanup
1170 test_61c() {
1171 #   OBD_FAIL_OST_CANCEL_COOKIE_TIMEOUT 0x222 
1172     touch $DIR/$tfile 
1173     do_facet ost "sysctl -w lustre.fail_loc=0x80000222"
1174     rm $DIR/$tfile    
1175     sleep 10
1176     fail ost1
1177 }
1178 run_test 61c "test race mds llog sync vs llog cleanup"
1179
1180 #Adaptive Timeouts
1181 at_start() #bug 3055
1182 {
1183     if [ -z "$ATOLDBASE" ]; then
1184         ATOLDBASE=$(do_facet mds "sysctl -n lustre.adaptive_history")
1185         # speed up the timebase so we can check decreasing AT
1186         do_facet mds "sysctl -w lustre.adaptive_history=8"
1187         do_facet ost1 "sysctl -w lustre.adaptive_history=8"
1188     fi
1189 }
1190
1191 test_65a() #bug 3055
1192 {
1193     at_start
1194     $LCTL dk > /dev/null
1195     # slow down a request
1196     do_facet mds sysctl -w lustre.fail_val=30000
1197 #define OBD_FAIL_PTLRPC_PAUSE_REQ        0x50a
1198     do_facet mds sysctl -w lustre.fail_loc=0x8000050a
1199     createmany -o $DIR/$tfile 10 > /dev/null
1200     unlinkmany $DIR/$tfile 10 > /dev/null
1201     # check for log message
1202     $LCTL dk | grep "Early reply #" || error "No early reply" 
1203     # client should show 30s estimates
1204     grep portal $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts
1205     sleep 9
1206     grep portal $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts
1207 }
1208 run_test 65a "AT: verify early replies"
1209
1210 test_65b() #bug 3055
1211 {
1212     at_start
1213     # turn on D_ADAPTTO
1214     debugsave
1215     sysctl -w lnet.debug="+other"
1216     $LCTL dk > /dev/null
1217     # slow down bulk i/o
1218     do_facet ost1 sysctl -w lustre.fail_val=30
1219 #define OBD_FAIL_OST_BRW_PAUSE_PACK      0x224
1220     do_facet ost1 sysctl -w lustre.fail_loc=0x224
1221
1222     rm -f $DIR/$tfile
1223     lfs setstripe $DIR/$tfile --index=0 --count=1
1224     # force some real bulk transfer
1225     dd if=/dev/urandom of=$TMP/big bs=1M count=4
1226     cp $TMP/big $DIR/$tfile
1227     echo "append" >> $DIR/$tfile
1228     cat $DIR/$tfile >> /dev/null
1229     rm $TMP/big
1230
1231     do_facet ost1 sysctl -w lustre.fail_loc=0
1232     # check for log message
1233     $LCTL dk | grep "Early reply #" || error "No early reply"
1234     debugrestore
1235     # client should show 30s estimates
1236     grep portal $LPROC/osc/${FSNAME}-OST0000-osc-*/timeouts
1237 }
1238 run_test 65b "AT: verify early replies on packed reply / bulk"
1239
1240 test_66a() #bug 3055
1241 {
1242     at_start
1243     grep "portal 12" $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts
1244     # adjust 5s at a time so no early reply is sent (within deadline)
1245     do_facet mds "sysctl -w lustre.fail_val=5000"
1246 #define OBD_FAIL_PTLRPC_PAUSE_REQ        0x50a
1247     do_facet mds "sysctl -w lustre.fail_loc=0x8000050a"
1248     createmany -o $DIR/$tfile 20 > /dev/null
1249     unlinkmany $DIR/$tfile 20 > /dev/null
1250     grep "portal 12" $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts
1251     do_facet mds "sysctl -w lustre.fail_val=10000"
1252     do_facet mds "sysctl -w lustre.fail_loc=0x8000050a"
1253     createmany -o $DIR/$tfile 20 > /dev/null
1254     unlinkmany $DIR/$tfile 20 > /dev/null
1255     grep "portal 12" $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts
1256     do_facet mds "sysctl -w lustre.fail_loc=0"
1257     sleep 9
1258     createmany -o $DIR/$tfile 20 > /dev/null
1259     unlinkmany $DIR/$tfile 20 > /dev/null
1260     grep portal $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts | grep "portal 12"
1261     CUR=$(awk '/portal 12/ {print $5}' $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts)
1262     WORST=$(awk '/portal 12/ {print $7}' $LPROC/mdc/${FSNAME}-MDT0000-mdc-*/timeouts)
1263     echo "Current MDT timeout $CUR, worst $WORST"
1264     [ $CUR -lt $WORST ] || error "Current $CUR should be less than worst $WORST" 
1265 }
1266 run_test 66a "AT: verify MDT service time adjusts with no early replies"
1267
1268 test_66b() #bug 3055
1269 {
1270     at_start
1271     ORIG=$(awk '/network/ {print $4}' $LPROC/mdc/lustre-*/timeouts)
1272     sysctl -w lustre.fail_val=$(($ORIG + 5))
1273 #define OBD_FAIL_PTLRPC_PAUSE_REP      0x50c
1274     sysctl -w lustre.fail_loc=0x50c
1275     ls $DIR/$tfile > /dev/null 2>&1
1276     sysctl -w lustre.fail_loc=0
1277     CUR=$(awk '/network/ {print $4}' $LPROC/mdc/${FSNAME}-*/timeouts)
1278     WORST=$(awk '/network/ {print $6}' $LPROC/mdc/${FSNAME}-*/timeouts)
1279     echo "network timeout orig $ORIG, cur $CUR, worst $WORST"
1280     [ $WORST -gt $ORIG ] || error "Worst $WORST should be worse than orig $ORIG" 
1281 }
1282 run_test 66b "AT: verify net latency adjusts"
1283
1284 test_67a() #bug 3055
1285 {
1286     at_start
1287     CONN1=$(awk '/_connect/ {total+=$2} END {print total}' $LPROC/osc/*/stats)
1288     # sleeping threads may drive values above this
1289     do_facet ost1 "sysctl -w lustre.fail_val=400"
1290 #define OBD_FAIL_PTLRPC_PAUSE_REQ    0x50a
1291     do_facet ost1 "sysctl -w lustre.fail_loc=0x50a"
1292     createmany -o $DIR/$tfile 20 > /dev/null
1293     unlinkmany $DIR/$tfile 20 > /dev/null
1294     do_facet ost1 "sysctl -w lustre.fail_loc=0"
1295     CONN2=$(awk '/_connect/ {total+=$2} END {print total}' $LPROC/osc/*/stats)
1296     ATTEMPTS=$(($CONN2 - $CONN1))
1297     echo "$ATTEMPTS osc reconnect attemps on gradual slow"
1298     [ $ATTEMPTS -gt 0 ] && error "AT should have prevented reconnect"
1299     return 0
1300 }
1301 run_test 67a "AT: verify slow request processing doesn't induce reconnects"
1302
1303 test_67b() #bug 3055
1304 {
1305     at_start
1306     CONN1=$(awk '/_connect/ {total+=$2} END {print total}' $LPROC/osc/*/stats)
1307 #define OBD_FAIL_OST_PAUSE_CREATE        0x223
1308     do_facet ost1 "sysctl -w lustre.fail_val=20000"
1309     do_facet ost1 "sysctl -w lustre.fail_loc=0x80000223"
1310     cp /etc/profile $DIR/$tfile || error "cp failed"
1311     client_reconnect
1312     cat $LPROC/ost/OSS/ost_create/timeouts
1313     log "phase 2"
1314     CONN2=$(awk '/_connect/ {total+=$2} END {print total}' $LPROC/osc/*/stats)
1315     ATTEMPTS=$(($CONN2 - $CONN1))
1316     echo "$ATTEMPTS osc reconnect attemps on instant slow"
1317     # do it again; should not timeout
1318     do_facet ost1 "sysctl -w lustre.fail_loc=0x80000223"
1319     cp /etc/profile $DIR/$tfile || error "cp failed"
1320     do_facet ost1 "sysctl -w lustre.fail_loc=0"
1321     client_reconnect
1322     cat $LPROC/ost/OSS/ost_create/timeouts
1323     CONN3=$(awk '/_connect/ {total+=$2} END {print total}' $LPROC/osc/*/stats)
1324     ATTEMPTS=$(($CONN3 - $CONN2))
1325     echo "$ATTEMPTS osc reconnect attemps on 2nd slow"
1326     [ $ATTEMPTS -gt 0 ] && error "AT should have prevented reconnect"
1327     return 0
1328 }
1329 run_test 67b "AT: verify instant slowdown doesn't induce reconnects"
1330
1331 if [ -n "$ATOLDBASE" ]; then
1332     do_facet mds "sysctl -w lustre.adaptive_history=$ATOLDBASE"
1333     do_facet ost1 "sysctl -w lustre.adaptive_history=$ATOLDBASE"
1334 fi
1335 # end of AT tests includes above lines
1336
1337
1338 equals_msg `basename $0`: test complete, cleaning up
1339 check_and_cleanup_lustre
1340 [ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG || true