2 # -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*-
3 # vim:shiftwidth=4:softtabstop=4:tabstop=4:
8 ALWAYS_EXCEPT=" $REPLAY_VBR_EXCEPT"
11 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
14 MOUNT_2=${MOUNT_2:-"yes"}
15 export MULTIOP=${MULTIOP:-multiop}
16 . $LUSTRE/tests/test-framework.sh
18 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
21 remote_mds_nodsh && log "SKIP: remote MDS with nodsh" && exit 0
24 [ "$SLOW" = "no" ] && EXCEPT_SLOW="7"
28 check_and_setup_lustre
31 rm -rf $DIR/[df][0-9]*
33 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
35 # if there is no CLIENT1 defined, some tests can be ran on localhost
36 CLIENT1=${CLIENT1:-$HOSTNAME}
37 # if CLIENT2 doesn't exist then use CLIENT1 instead
38 # All tests should use CLIENT2 with MOUNT2 only therefore it will work if
40 # Exception is the test which need two separate nodes
41 CLIENT2=${CLIENT2:-$CLIENT1}
43 is_mounted $MOUNT2 || error "MOUNT2 is not mounted"
46 # get_version(): Gets the version of an object on servers
47 # Parameter1: Client/Machine Name
48 # Parameter2: File Path
49 # Returns: Objectversion Or -1 if getobjversion fails.
52 local var=${SINGLEMDS}_svc
55 local fid=$(do_node $client $LFS path2fid $file)
56 local objver=$(do_facet $SINGLEMDS $LCTL --device ${!var} \
57 getobjversion \\\"$fid\\\")
59 [[ -z $objver ]] && objver=-1
64 # chk_get_version(): Wrapper to get_version().
65 # Parameter1: Client/Machine Name
66 # Parameter2: File Path
67 # Returns: Objectversion Or Exit with error in case objver is -1.
70 local objver=$(get_version $1 $2)
72 [[ "$objver" == "-1" ]] && error "object version is empty."
78 cos_param_file=$TMP/rvbr-cos-params
79 save_lustre_params $(get_facets MDS) "mdt.*.commit_on_sharing" > $cos_param_file
82 local ver=$(get_version $CLIENT1 $DIR/$tdir/1a)
84 [[ "$ver" == "-1" ]] && return 0
87 run_test 0a "getversion for non existent file shouldn't cause kernel panic"
90 local var=${SINGLEMDS}_svc
92 local file=$DIR/$tdir/f
94 do_node $CLIENT1 mkdir -p $DIR/$tdir/
95 do_node $CLIENT1 touch $file
96 fid=$(do_node $CLIENT1 $LFS path2fid $file)
97 do_node $CLIENT1 rm -rf $file
98 do_facet $SINGLEMDS $LCTL --device ${!var} getobjversion \\\"$fid\\\" || true
100 run_test 0b "getversion for non existent fid shouldn't cause kernel panic"
103 test_1a() { # former test_0a
104 local file=$DIR/$tfile
108 do_node $CLIENT1 mcreate $file
109 pre=$(chk_get_version $CLIENT1 $file)
110 do_node $CLIENT1 openfile -f O_RDWR $file
111 post=$(chk_get_version $CLIENT1 $file)
112 if (($pre != $post)); then
113 error "version changed unexpectedly: pre $pre, post $post"
116 run_test 1a "open and close do not change versions"
118 test_1b() { # former test_0b
119 local var=${SINGLEMDS}_svc
120 zconf_mount $CLIENT2 $MOUNT2
122 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
123 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
124 do_node $CLIENT1 mkdir -p -m 755 $MOUNT/$tdir
126 replay_barrier $SINGLEMDS
127 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
128 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT $MOUNT/$tdir/$tfile
129 zconf_umount $CLIENT2 $MOUNT2
130 facet_failover $SINGLEMDS
132 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
133 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
134 error_and_remount "open succeeded unexpectedly"
137 run_test 1b "open (O_CREAT) checks version of parent"
139 test_1c() { # former test_0c
140 local var=${SINGLEMDS}_svc
141 zconf_mount $CLIENT2 $MOUNT2
143 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
144 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
146 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
147 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tdir/$tfile
149 replay_barrier $SINGLEMDS
150 do_node $CLIENT2 chmod 0777 $MOUNT2/$tdir
151 do_node $CLIENT2 chmod 0666 $MOUNT2/$tdir/$tfile
152 rmultiop_start $CLIENT1 $DIR/$tdir/$tfile o_c
153 zconf_umount $CLIENT2 $MOUNT2
154 facet_failover $SINGLEMDS
156 client_up $CLIENT1 || error "$CLIENT1 evicted"
157 rmultiop_stop $CLIENT1 || error "close failed"
159 run_test 1c "open (non O_CREAT) does not checks versions"
161 # test set #2: CREAT (not open)
162 # - version of parent is not changed but checked
163 # - pre-version should be -1
164 # - post-version should be valid
165 test_2a() { # extended former test_0d
170 pre=$(chk_get_version $CLIENT1 $DIR)
171 do_node $CLIENT1 mkfifo $DIR/$tfile-fifo
172 post=$(chk_get_version $CLIENT1 $DIR)
173 if (($pre != $post)); then
174 error "version was changed: pre $pre, post $post"
177 pre=$(chk_get_version $CLIENT1 $DIR)
178 do_node $CLIENT1 mkdir $DIR/$tfile-dir
179 post=$(chk_get_version $CLIENT1 $DIR)
180 if (($pre != $post)); then
181 error "version was changed: pre $pre, post $post"
183 do_node $CLIENT1 rmdir $DIR/$tfile-dir
186 pre=$(chk_get_version $CLIENT1 $DIR)
187 do_node $CLIENT1 mkfifo $DIR/$tfile-nod
188 post=$(chk_get_version $CLIENT1 $DIR)
189 if (($pre != $post)); then
190 error "version was changed: pre $pre, post $post"
193 pre=$(chk_get_version $CLIENT1 $DIR)
194 do_node $CLIENT1 mkfifo $DIR/$tfile-symlink
195 post=$(chk_get_version $CLIENT1 $DIR)
196 if (($pre != $post)); then
197 error "version was changed: pre $pre, post $post"
200 if [ $MDSCOUNT -ge 2 ]; then
203 pre=$(chk_get_version $CLIENT1 $DIR)
204 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
205 post=$(chk_get_version $CLIENT1 $DIR)
206 if (($pre != $post)); then
207 error "version was changed: pre $pre, post $post"
210 do_node $CLIENT1 rm -rf $DIR/$tfile-*
213 run_test 2a "create operations doesn't change version of parent"
215 test_2b() { # former test_0e
216 local var=${SINGLEMDS}_svc
217 zconf_mount $CLIENT2 $MOUNT2
219 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
220 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
222 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
224 replay_barrier $SINGLEMDS
225 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
226 do_node $CLIENT1 mkfifo $DIR/$tdir/$tfile
227 zconf_umount $CLIENT2 $MOUNT2
228 facet_failover $SINGLEMDS
230 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
231 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
232 error_and_remount "create succeeded unexpectedly"
235 run_test 2b "create checks version of parent"
237 test_3a() { # former test_0f
241 do_node $CLIENT1 mcreate $DIR/$tfile
242 pre=$(chk_get_version $CLIENT1 $DIR)
243 do_node $CLIENT1 rm $DIR/$tfile
244 post=$(chk_get_version $CLIENT1 $DIR)
245 if (($pre != $post)); then
246 error "version was changed: pre $pre, post $post"
249 if [ $MDSCOUNT -ge 2 ]; then
252 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
253 pre=$(chk_get_version $CLIENT1 $DIR)
254 do_node $CLIENT1 rmdir $DIR/$tfile-remote_dir
255 post=$(chk_get_version $CLIENT1 $DIR)
256 if (($pre != $post)); then
257 error "version was changed: pre $pre, post $post"
261 run_test 3a "unlink doesn't change version of parent"
263 test_3b() { # former test_0g
264 local var=${SINGLEMDS}_svc
265 zconf_mount $CLIENT2 $MOUNT2
267 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
268 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
270 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
271 do_node $CLIENT1 mcreate $DIR/$tdir/$tfile
273 replay_barrier $SINGLEMDS
274 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
275 do_node $CLIENT1 rm $DIR/$tdir/$tfile
276 zconf_umount $CLIENT2 $MOUNT2
277 facet_failover $SINGLEMDS
279 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
280 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
281 error_and_remount "unlink succeeded unexpectedly"
284 run_test 3b "unlink checks version of parent"
286 test_4a() { # former test_0h
287 local file=$DIR/$tfile
291 do_node $CLIENT1 mcreate $file
292 pre=$(chk_get_version $CLIENT1 $file)
293 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
294 post=$(chk_get_version $CLIENT1 $file)
295 if (($pre == $post)); then
296 error "version not changed: pre $pre, post $post"
299 run_test 4a "setattr of UID changes versions"
301 test_4b() { # former test_0i
302 local file=$DIR/$tfile
306 do_node $CLIENT1 mcreate $file
307 pre=$(chk_get_version $CLIENT1 $file)
308 do_node $CLIENT1 chgrp $RUNAS_GID $file
309 post=$(chk_get_version $CLIENT1 $file)
310 if (($pre == $post)); then
311 error "version not changed: pre $pre, post $post"
314 run_test 4b "setattr of GID changes versions"
316 test_4c() { # former test_0j
317 local file=$DIR/$tfile
318 local var=${SINGLEMDS}_svc
319 zconf_mount $CLIENT2 $MOUNT2
321 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
322 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
324 do_node $CLIENT1 mcreate $file
326 replay_barrier $SINGLEMDS
327 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
328 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
329 zconf_umount $CLIENT2 $MOUNT2
330 facet_failover $SINGLEMDS
332 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
333 if ! do_node $CLIENT1 $CHECKSTAT -u \\\#$UID $file; then
334 error_and_remount "setattr of UID succeeded unexpectedly"
337 run_test 4c "setattr of UID checks versions"
339 test_4d() { # former test_0k
340 local file=$DIR/$tfile
341 local var=${SINGLEMDS}_svc
342 zconf_mount $CLIENT2 $MOUNT2
344 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
345 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
347 do_node $CLIENT1 mcreate $file
349 replay_barrier $SINGLEMDS
350 do_node $CLIENT2 chown $RUNAS_ID:$RUNAS_GID $MOUNT2/$tfile
351 do_node $CLIENT1 chgrp $RUNAS_GID $file
352 zconf_umount $CLIENT2 $MOUNT2
353 facet_failover $SINGLEMDS
355 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
356 if ! do_node $CLIENT1 $CHECKSTAT -g \\\#$UID $file; then
357 error_and_remount "setattr of GID succeeded unexpectedly"
360 run_test 4d "setattr of GID checks versions"
362 test_4e() { # former test_0l
363 local file=$DIR/$tfile
367 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
368 pre=$(chk_get_version $CLIENT1 $file)
369 do_node $CLIENT1 chmod 666 $file
370 post=$(chk_get_version $CLIENT1 $file)
371 if (($pre == $post)); then
372 error "version not changed: pre $pre, post $post"
375 run_test 4e "setattr of permission changes versions"
377 test_4f() { # former test_0m
378 local file=$DIR/$tfile
379 local var=${SINGLEMDS}_svc
380 zconf_mount $CLIENT2 $MOUNT2
382 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
383 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
385 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
387 replay_barrier $SINGLEMDS
388 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
389 do_node $CLIENT1 chmod 666 $file
390 zconf_umount $CLIENT2 $MOUNT2
391 facet_failover $SINGLEMDS
393 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
394 if ! do_node $CLIENT1 $CHECKSTAT -p 0644 $file; then
395 error_and_remount "setattr of permission succeeded unexpectedly"
398 run_test 4f "setattr of permission checks versions"
400 test_4g() { # former test_0n
401 local file=$DIR/$tfile
405 do_node $CLIENT1 mcreate $file
406 pre=$(chk_get_version $CLIENT1 $file)
407 do_node $CLIENT1 chattr +i $file
408 post=$(chk_get_version $CLIENT1 $file)
409 do_node $CLIENT1 chattr -i $file
410 if (($pre == $post)); then
411 error "version not changed: pre $pre, post $post"
414 run_test 4g "setattr of flags changes versions"
422 if ((${#attr} != 1)); then
423 error "checking multiple attributes not implemented yet"
425 do_node $client lsattr $file | cut -d ' ' -f 1 | grep -q $attr
428 test_4h() { # former test_0o
429 local file=$DIR/$tfile
431 local var=${SINGLEMDS}_svc
432 zconf_mount $CLIENT2 $MOUNT2
434 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
435 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
437 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
439 replay_barrier $SINGLEMDS
440 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
441 do_node $CLIENT1 chattr +i $file
442 zconf_umount $CLIENT2 $MOUNT2
443 facet_failover $SINGLEMDS
445 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
446 checkattr $CLIENT1 i $file
448 do_node $CLIENT1 chattr -i $file
449 if [ $rc -eq 0 ]; then
450 error "setattr of flags succeeded unexpectedly"
453 run_test 4h "setattr of flags checks versions"
455 test_4i() { # former test_0p
456 local file=$DIR/$tfile
460 local var=${SINGLEMDS}_svc
462 ad_orig=$(do_facet $SINGLEMDS "$LCTL get_param mdd.${!var}.atime_diff")
463 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
464 do_node $CLIENT1 mcreate $file
465 pre=$(chk_get_version $CLIENT1 $file)
466 do_node $CLIENT1 touch $file
467 post=$(chk_get_version $CLIENT1 $file)
469 # We don't fail MDS in this test. atime_diff shall be
470 # restored to its original value.
472 do_facet $SINGLEMDS "$LCTL set_param $ad_orig"
473 if (($pre != $post)); then
474 error "version changed unexpectedly: pre $pre, post $post"
477 run_test 4i "setattr of times does not change versions"
479 test_4j() { # former test_0q
480 local file=$DIR/$tfile
484 do_node $CLIENT1 mcreate $file
485 pre=$(chk_get_version $CLIENT1 $file)
486 do_node $CLIENT1 $TRUNCATE $file 1
487 post=$(chk_get_version $CLIENT1 $file)
488 if (($pre != $post)); then
489 error "version changed unexpectedly: pre $pre, post $post"
492 run_test 4j "setattr of size does not change versions"
494 test_4k() { # former test_0r
495 local file=$DIR/$tfile
499 local var=${SINGLEMDS}_svc
500 zconf_mount $CLIENT2 $MOUNT2
502 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
503 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
504 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
506 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
508 replay_barrier $SINGLEMDS
509 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
510 do_node $CLIENT1 $TRUNCATE $file 1
512 mtime_pre=$(do_node $CLIENT1 stat --format=%Y $file)
513 do_node $CLIENT1 touch $file
514 sleep 1 # avoid stat caching
515 mtime_post=$(do_node $CLIENT1 stat --format=%Y $file)
516 zconf_umount $CLIENT2 $MOUNT2
517 facet_failover $SINGLEMDS
519 client_up $CLIENT1 || error "$CLIENT1 evicted"
520 if (($mtime_pre >= $mtime_post)); then
521 error "time not changed: pre $mtime_pre, post $mtime_post"
523 if ! do_node $CLIENT1 $CHECKSTAT -s 1 $file; then
524 error_and_remount "setattr of size failed"
526 mtime=$(do_node $CLIENT1 stat --format=%Y $file)
527 if (($mtime != $mtime_post)); then
528 error "setattr of times failed: expected $mtime_post, got $mtime"
531 run_test 4k "setattr of times and size does not check versions"
533 test_5a() { # former test_0s
539 do_node $CLIENT1 mcreate $DIR/$tfile
540 do_node $CLIENT1 mkdir -p $DIR/$tdir
541 pre=$(chk_get_version $CLIENT1 $DIR/$tfile)
542 tp_pre=$(chk_get_version $CLIENT1 $DIR/$tdir)
543 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
544 post=$(chk_get_version $CLIENT1 $DIR/$tfile)
545 tp_post=$(chk_get_version $CLIENT1 $DIR/$tdir)
546 if (($pre == $post)); then
547 error "version of source not changed: pre $pre, post $post"
549 if (($tp_pre != $tp_post)); then
550 error "version of target parent was changed:"\
551 "pre $tp_pre, post $tp_post"
554 run_test 5a "link changes versions of source but not target parent"
556 test_5b() { # former test_0t
557 local var=${SINGLEMDS}_svc
558 zconf_mount $CLIENT2 $MOUNT2
560 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
561 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
563 do_node $CLIENT1 mcreate $DIR/$tfile
564 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
566 replay_barrier $SINGLEMDS
567 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
568 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
569 zconf_umount $CLIENT2 $MOUNT2
570 facet_failover $SINGLEMDS
572 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
573 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
574 error_and_remount "link should fail"
577 run_test 5b "link checks version of target parent"
579 test_5c() { # former test_0u
580 local var=${SINGLEMDS}_svc
581 zconf_mount $CLIENT2 $MOUNT2
583 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
584 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
586 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile
587 do_node $CLIENT1 mkdir -p $DIR/$tdir
589 replay_barrier $SINGLEMDS
590 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
591 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
592 zconf_umount $CLIENT2 $MOUNT2
593 facet_failover $SINGLEMDS
595 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
596 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
597 error_and_remount "link should fail"
600 run_test 5c "link checks version of source"
602 test_6a() { # former test_0v
608 do_node $CLIENT1 mcreate $DIR/$tfile
609 do_node $CLIENT1 mkdir -p $DIR/$tdir
610 sp_pre=$(chk_get_version $CLIENT1 $DIR)
611 tp_pre=$(chk_get_version $CLIENT1 $DIR/$tdir)
612 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
613 sp_post=$(chk_get_version $CLIENT1 $DIR)
614 tp_post=$(chk_get_version $CLIENT1 $DIR/$tdir)
615 if (($sp_pre != $sp_post)); then
616 error "version of source parent was changed:" \
617 "pre $sp_pre, post $sp_post"
619 if (($tp_pre != $tp_post)); then
620 error "version of target parent was changed:" \
621 "pre $tp_pre, post $tp_post"
624 run_test 6a "rename doesn't change versions of source parent and target parent"
626 test_6b() { # former test_0w
630 do_node $CLIENT1 mcreate $DIR/$tfile
631 pre=$(chk_get_version $CLIENT1 $DIR)
632 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tfile-new
633 post=$(chk_get_version $CLIENT1 $DIR)
634 if (($pre != $post)); then
635 error "version of parent was changed: pre $pre, post $post"
638 run_test 6b "rename within same dir doesn't change version of parent"
640 test_6c() { # former test_0x
641 local var=${SINGLEMDS}_svc
642 zconf_mount $CLIENT2 $MOUNT2
644 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
645 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
647 do_node $CLIENT1 mcreate $DIR/$tfile
648 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
650 replay_barrier $SINGLEMDS
651 do_node $CLIENT2 chmod 777 $MOUNT2
652 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
653 zconf_umount $CLIENT2 $MOUNT2
654 facet_failover $SINGLEMDS
656 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
657 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
658 error_and_remount "rename should fail"
661 run_test 6c "rename checks version of source parent"
663 test_6d() { # former test_0y
664 local var=${SINGLEMDS}_svc
665 zconf_mount $CLIENT2 $MOUNT2
667 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
668 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
670 do_node $CLIENT1 mcreate $DIR/$tfile
671 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
673 replay_barrier $SINGLEMDS
674 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
675 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
676 zconf_umount $CLIENT2 $MOUNT2
677 facet_failover $SINGLEMDS
679 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
680 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
681 error_and_remount "rename should fail"
684 run_test 6d "rename checks version of target parent"
686 # pdirops tests, bug 18143
693 local var=${SINGLEMDS}_svc
694 zconf_mount $CLIENT2 $MOUNT2
696 local cname=$TESTNAME.$cycle
698 echo "start cycle: $cname"
699 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
700 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
702 do_node $CLIENT1 mkdir -p $DIR/$tdir
703 replay_barrier $SINGLEMDS
705 echo "$cname first: $first"
706 do_node $CLIENT1 $first || error "$cname: Cannot do first operation"
707 # client2 operations that will be lost
708 echo "$cname lost: $lost"
709 do_node $CLIENT2 $lost || error "$cname: Cannot do 'lost' operations"
711 echo "$cname last: $last"
712 do_node $CLIENT1 $last || error "$cname: Cannot do last operation"
713 zconf_umount $CLIENT2 $MOUNT2
714 facet_failover $SINGLEMDS
715 # should fail as conflict expected
716 client_evicted $CLIENT1 || rc=1
718 wait_recovery_complete $SINGLEMDS
719 wait_mds_ost_sync || error "wait_mds_ost_sync failed"
726 first="createmany -o $DIR/$tdir/$tfile- 1"
727 lost="rm $MOUNT2/$tdir/$tfile-0"
728 last="createmany -o $DIR/$tdir/$tfile- 1"
729 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.1 failed"
731 first="createmany -o $DIR/$tdir/$tfile- 1"
732 lost="rm $MOUNT2/$tdir/$tfile-0"
733 last="mkdir $DIR/$tdir/$tfile-0"
734 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.2 failed"
736 first="mkdir $DIR/$tdir/$tfile-0"
737 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
738 last="createmany -o $DIR/$tdir/$tfile- 1"
739 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.3 failed"
742 run_test 7a "create, {lost}, create"
745 first="createmany -o $DIR/$tdir/$tfile- 1"
746 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
747 last="rm $DIR/$tdir/$tfile-0"
748 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.1 failed"
750 first="createmany -o $DIR/$tdir/$tfile- 1"
751 lost="touch $MOUNT2/$tdir/$tfile; mv $MOUNT2/$tdir/$tfile $MOUNT2/$tdir/$tfile-0"
752 last="rm $DIR/$tdir/$tfile-0"
753 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.2 failed"
755 first="createmany -o $DIR/$tdir/$tfile- 1"
756 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
757 last="rmdir $DIR/$tdir/$tfile-0"
758 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.3 failed"
761 run_test 7b "create, {lost}, unlink"
764 first="createmany -o $DIR/$tdir/$tfile- 1"
765 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
766 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
767 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.1 failed"
769 first="createmany -o $DIR/$tdir/$tfile- 2"
770 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
771 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
772 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.2 failed"
774 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile-1-0"
775 lost="rmdir $MOUNT2/$tdir/$tfile-1-0; createmany -o $MOUNT2/$tdir/$tfile-1- 1"
776 last="mv $DIR/$tdir/$tfile-1-0 $DIR/$tdir/$tfile-0"
777 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.3 failed"
779 first="createmany -o $DIR/$tdir/$tfile- 1"
780 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile"
781 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-0"
782 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.4 failed"
785 run_test 7c "create, {lost}, rename"
788 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
789 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0"
790 last="createmany -o $DIR/$tdir/$tfile- 1"
791 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.1 failed"
793 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
794 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0"
795 last="mkdir $DIR/$tdir/$tfile-0"
796 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.2 failed"
798 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
799 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
800 last="createmany -o $DIR/$tdir/$tfile- 1"
801 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.3 failed"
804 run_test 7d "unlink, {lost}, create"
807 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
808 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0;createmany -o $MOUNT2/$tdir/$tfile- 1"
809 last="rm $DIR/$tdir/$tfile-0"
810 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.1 failed"
812 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
813 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
814 last="rmdir $DIR/$tdir/$tfile-0"
815 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.2 failed"
817 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
818 lost="mkdir $MOUNT2/$tdir/$tfile-0"
819 last="rmdir $DIR/$tdir/$tfile-0"
820 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.3 failed"
822 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
823 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
824 last="rm $DIR/$tdir/$tfile-0"
825 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.4 failed"
827 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
828 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
829 last="rm $DIR/$tdir/$tfile-0"
830 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.5 failed"
833 run_test 7e "unlink, {lost}, unlink"
836 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
837 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
838 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
839 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.1 failed"
841 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
842 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
843 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
844 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.2 failed"
846 first="mkdir $DIR/$tdir/$tfile; createmany -o $DIR/$tdir/$tfile- 1; rmdir $DIR/$tdir/$tfile"
847 lost="mkdir $MOUNT2/$tdir/$tfile"
848 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
849 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.3 failed"
851 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
852 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
853 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
854 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.4 failed"
856 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
857 lost="mkdir $MOUNT2/$tdir/$tfile-0"
858 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
859 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.5 failed"
862 run_test 7f "unlink, {lost}, rename"
865 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
866 lost="mkdir $MOUNT2/$tdir/$tfile-0;rmdir $MOUNT2/$tdir/$tfile-0"
867 last="createmany -o $DIR/$tdir/$tfile- 1"
868 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.1 failed"
870 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
871 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0"
872 last="mkdir $DIR/$tdir/$tfile-0"
873 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.2 failed"
875 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
876 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
877 last="link $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
878 if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.1) ]
880 test_7_cycle "$first" "$lost" "$last" ||
881 error "Test 7g.3 failed"
882 else #LU-4442 LU-3528
883 test_7_cycle "$first" "$lost" "$last" &&
884 error "Test 7g.3 failed"
888 run_test 7g "rename, {lost}, create"
891 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
892 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
893 last="rm $DIR/$tdir/$tfile-0"
894 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.1 failed"
896 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
897 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
898 last="rm $DIR/$tdir/$tfile-0"
899 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.2 failed"
901 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
902 lost="rm $MOUNT2/$tdir/$tfile/$tfile-0"
903 last="rmdir $DIR/$tdir/$tfile"
904 #test_7_cycle "$first" "$lost" "$last" || error "Test 7h.3 failed"
907 run_test 7h "rename, {lost}, unlink"
910 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
911 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
912 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
913 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
915 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
916 lost="mkdir $MOUNT2/$tdir/$tfile-0"
917 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
918 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
920 first="createmany -o $DIR/$tdir/$tfile- 3; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
921 lost="mv $MOUNT2/$tdir/$tfile-2 $MOUNT2/$tdir/$tfile-0"
922 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-2"
923 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.3 failed"
925 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
926 lost="rm $MOUNT2/$tdir/$tfile-1"
927 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-1"
928 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.4 failed"
931 run_test 7i "rename, {lost}, rename"
933 # test set #8: orphan handling bug 15392.
934 # Unlink during recovery creates orphan always just in case some late open may
935 # arrive. These orphans will be removed after recovery anyway.
936 # Tests check that valid create,unlink,create sequence will work in this case
937 # too but not fail on second create due to orphan found.
940 local var=${SINGLEMDS}_svc
941 zconf_mount $CLIENT2 $MOUNT2
943 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
945 do_node $CLIENT1 mcreate $DIR/$tfile
946 do_node $CLIENT1 mkdir $DIR/$tfile-2
947 replay_barrier $SINGLEMDS
948 # missed replay from client2 will lead to recovery by versions
949 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
950 do_node $CLIENT1 rm $DIR/$tfile || return 1
951 do_node $CLIENT1 touch $DIR/$tfile || return 2
953 zconf_umount $CLIENT2 $MOUNT2
954 facet_failover $SINGLEMDS
955 client_up $CLIENT1 || return 6
957 do_node $CLIENT1 rm $DIR/$tfile || error "$tfile doesn't exists"
960 run_test 8a "create | unlink, create shouldn't fail"
963 local var=${SINGLEMDS}_svc
964 zconf_mount $CLIENT2 $MOUNT2
966 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
968 do_node $CLIENT1 touch $DIR/$tfile
969 do_node $CLIENT1 mkdir $DIR/$tfile-2
970 replay_barrier $SINGLEMDS
971 # missed replay from client2 will lead to recovery by versions
972 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
973 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
974 do_node $CLIENT1 mcreate $MOUNT1/$tfile || return 2
976 zconf_umount $CLIENT2 $MOUNT2
977 facet_failover $SINGLEMDS
978 client_up $CLIENT1 || return 6
980 do_node $CLIENT1 rm $MOUNT1/$tfile || error "$tfile doesn't exists"
983 run_test 8b "create | unlink, create shouldn't fail"
986 local var=${SINGLEMDS}_svc
987 zconf_mount $CLIENT2 $MOUNT2
989 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
991 do_node $CLIENT1 touch $DIR/$tfile
992 do_node $CLIENT1 mkdir $DIR/$tfile-2
993 replay_barrier $SINGLEMDS
994 # missed replay from client2 will lead to recovery by versions
995 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
996 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
997 do_node $CLIENT1 mkdir $MOUNT1/$tfile || return 2
999 zconf_umount $CLIENT2 $MOUNT2
1000 facet_failover $SINGLEMDS
1001 client_up $CLIENT1 || return 6
1003 do_node $CLIENT1 rmdir $MOUNT1/$tfile || error "$tfile doesn't exists"
1006 run_test 8c "create | unlink, create shouldn't fail"
1009 # This test uses three Lustre clients on two hosts.
1011 # Lustre Client 1: $CLIENT1:$MOUNT ($DIR)
1012 # Lustre Client 2: $CLIENT2:$MOUNT2 ($DIR2)
1013 # Lustre Client 3: $CLIENT2:$MOUNT1 ($DIR1)
1015 test_10b() { # former test_2b
1018 local var=${SINGLEMDS}_svc
1020 [ -n "$CLIENTS" ] || { skip "Need two or more clients" && exit 0; }
1021 [ $CLIENTCOUNT -ge 2 ] || \
1022 { skip "Need two or more clients, have $CLIENTCOUNT" && \
1025 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
1026 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1028 zconf_mount $CLIENT1 $MOUNT
1029 zconf_mount $CLIENT2 $MOUNT1
1030 zconf_mount $CLIENT2 $MOUNT2
1031 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-a
1032 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-b
1035 # Save an MDT transaction number before recovery.
1037 do_node $CLIENT1 touch $DIR1/$tfile
1038 pre=$(chk_get_version $CLIENT1 $DIR/$tfile)
1041 # Comments on the replay sequence state the expected result
1045 # "U" Unable to replay.
1048 replay_barrier $SINGLEMDS
1049 do_node $CLIENT1 chmod 666 $DIR/$tfile-a # R
1050 do_node $CLIENT2 chmod 666 $DIR1/$tfile-b # R
1051 do_node $CLIENT2 chgrp $RUNAS_GID $DIR2/$tfile-a # U
1052 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-a # J
1053 do_node $CLIENT2 $TRUNCATE $DIR2/$tfile-b 1 # U
1054 do_node $CLIENT2 chgrp $RUNAS_GID $DIR1/$tfile-b # R
1055 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-b # R
1056 zconf_umount $CLIENT2 $MOUNT2
1057 facet_failover $SINGLEMDS
1059 client_evicted $CLIENT1 || error "$CLIENT1:$MOUNT not evicted"
1060 client_up $CLIENT2 || error "$CLIENT2:$MOUNT1 evicted"
1063 # Check the MDT epoch. $post must be the first transaction
1064 # number assigned after recovery.
1066 do_node $CLIENT2 chmod 666 $DIR1/$tfile
1067 post=$(chk_get_version $CLIENT2 $DIR1/$tfile)
1068 if (($(($pre >> 32)) == $((post >> 32)))); then
1069 error "epoch not changed: pre $pre, post $post"
1072 if (($(($post & 0x00000000ffffffff)) != 1)); then
1073 error "transno should restart from one: got $post"
1076 do_node $CLIENT2 stat $DIR1/$tfile-a
1077 do_node $CLIENT2 stat $DIR1/$tfile-b
1079 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$UID -g \\\#$UID \
1080 $DIR1/$tfile-a || error "$DIR/$tfile-a: unexpected state"
1081 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$RUNAS_ID -g \\\#$RUNAS_GID \
1082 $DIR1/$tfile-b || error "$DIR/$tfile-b: unexpected state"
1084 zconf_umount $CLIENT2 $MOUNT1
1086 run_test 10b "3 clients: some, none, and all reqs replayed"
1088 # test set #11: operations in single directory
1090 local var=${SINGLEMDS}_svc
1091 zconf_mount $CLIENT2 $MOUNT2
1093 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1095 replay_barrier $SINGLEMDS
1097 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1099 do_node $CLIENT2 createmany -o $MOUNT2/$tfile-2- 100
1100 zconf_umount $CLIENT2 $MOUNT2
1103 facet_failover $SINGLEMDS
1104 # recovery shouldn't fail due to missing client 2
1105 client_up $CLIENT1 || return 1
1106 # All files from client1 should have been replayed
1107 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1109 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1112 run_test 11a "concurrent creates don't affect each other"
1115 local var=${SINGLEMDS}_svc
1116 zconf_mount $CLIENT2 $MOUNT2
1118 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1120 do_node $CLIENT2 createmany -o $MOUNT2/$tfile-2- 100
1122 replay_barrier $SINGLEMDS
1123 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1125 do_node $CLIENT2 unlinkmany -o $MOUNT2/$tfile-2- 100
1126 zconf_umount $CLIENT2 $MOUNT2
1129 facet_failover $SINGLEMDS
1130 # recovery shouldn't fail due to missing client 2
1131 client_up $CLIENT1 || return 1
1132 # All files from client1 should have been replayed
1133 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1135 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1138 run_test 11b "concurrent creates and unlinks don't affect each other"
1140 # test set #12: lock replay with VBR, bug 16356
1141 test_12a() { # former test_2a
1142 local var=${SINGLEMDS}_svc
1143 zconf_mount $CLIENT2 $MOUNT2
1145 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1147 do_node $CLIENT2 mkdir -p $MOUNT2/$tdir
1148 replay_barrier $SINGLEMDS
1149 do_node $CLIENT2 mcreate $MOUNT2/$tdir/$tfile
1150 do_node $CLIENT1 createmany -o $DIR/$tfile- 25
1151 #client1 read data from client2 which will be lost
1152 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile
1153 do_node $CLIENT1 createmany -o $DIR/$tfile-3- 25
1154 zconf_umount $CLIENT2 $MOUNT2
1156 facet_failover $SINGLEMDS
1157 # recovery shouldn't fail due to missing client 2
1158 client_up $CLIENT1 || return 1
1160 # All 50 files should have been replayed
1161 do_node $CLIENT1 unlinkmany $DIR/$tfile- 25 || return 2
1162 do_node $CLIENT1 unlinkmany $DIR/$tfile-3- 25 || return 3
1163 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile && return 4
1167 run_test 12a "lost data due to missed REMOTE client during replay"
1169 test_13() { # LU-8826
1170 local var=${SINGLEMDS}_svc
1172 if combined_mgs_mds ; then
1173 skip "Needs separate MGS to enable IR"
1177 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
1178 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1180 zconf_mount $CLIENT2 $MOUNT2
1181 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile
1183 # set ir_timeout to a reasonable small value
1184 local ir_timeout=$(do_facet mgs $LCTL get_param -n mgs.*.ir_timeout)
1185 do_facet mgs $LCTL set_param mgs.*.ir_timeout=5
1186 # make sure IR functional
1189 replay_barrier $SINGLEMDS
1190 do_node $CLIENT1 chmod 666 $DIR/$tfile
1191 do_node $CLIENT2 chmod 777 $DIR2/$tfile
1193 # make sure client data of $CLIENT2:$MOUNT2 is remained
1194 # define OBD_FAIL_TGT_CLIENT_DEL 0x718
1195 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x718
1196 zconf_umount $CLIENT2 $MOUNT2
1197 # define OBD_FAIL_TGT_SLUGGISH_NET 0x719
1198 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x719
1199 facet_failover $SINGLEMDS
1201 client_up $CLIENT1 || error "$CLIENT1 evicted"
1203 do_facet $SINGLEMDS $LCTL set_param fail_loc=0
1204 do_facet mgs $LCTL set_param mgs.*.ir_timeout=$ir_timeout
1206 do_node $CLIENT1 $CHECKSTAT -p 0666 $DIR/$tfile ||
1207 error "$DIR/$tfile-a: unexpected state"
1209 run_test 13 "Shouldn't give up VBR easily on sluggish network"
1211 #restore COS setting
1212 restore_lustre_params < $cos_param_file
1213 rm -f $cos_param_file
1215 [ "$CLIENTS" ] && zconf_mount_clients $CLIENTS $DIR
1218 check_and_cleanup_lustre