5 MOUNT_2=${MOUNT_2:-"yes"}
7 LUSTRE=${LUSTRE:-$(dirname $0)/..}
8 . $LUSTRE/tests/test-framework.sh
12 remote_mds_nodsh && log "SKIP: remote MDS with nodsh" && exit 0
14 ALWAYS_EXCEPT=" $REPLAY_VBR_EXCEPT"
17 [ "$SLOW" = "no" ] && EXCEPT_SLOW="7 "
21 check_and_setup_lustre
24 rm -rf $DIR/[df][0-9]*
26 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
28 # if there is no CLIENT1 defined, some tests can be ran on localhost
29 CLIENT1=${CLIENT1:-$HOSTNAME}
30 # if CLIENT2 doesn't exist then use CLIENT1 instead
31 # All tests should use CLIENT2 with MOUNT2 only therefore it will work if
33 # Exception is the test which need two separate nodes
34 CLIENT2=${CLIENT2:-$CLIENT1}
36 is_mounted $MOUNT2 || error "MOUNT2 is not mounted"
39 # get_version(): Gets the version of an object on servers
40 # Parameter1: Client/Machine Name
41 # Parameter2: File Path
42 # Returns: Objectversion Or -1 if getobjversion fails.
45 local var=${SINGLEMDS}_svc
48 local fid=$(do_node $client $LFS path2fid $file)
49 local objver=$(do_facet $SINGLEMDS $LCTL --device ${!var} \
50 getobjversion \\\"$fid\\\")
52 [[ -z $objver ]] && objver=-1
57 # chk_get_version(): Wrapper to get_version().
58 # Parameter1: Client/Machine Name
59 # Parameter2: File Path
60 # Returns: Objectversion Or Exit with error in case objver is -1.
63 local objver=$(get_version $1 $2)
65 [[ "$objver" == "-1" ]] && error "object version is empty."
71 cos_param_file=$TMP/rvbr-cos-params
72 save_lustre_params $(get_facets MDS) "mdt.*.commit_on_sharing" > $cos_param_file
75 local ver=$(get_version $CLIENT1 $DIR/$tdir/1a)
77 [[ "$ver" == "-1" ]] && return 0
80 run_test 0a "getversion for non existent file shouldn't cause kernel panic"
83 local var=${SINGLEMDS}_svc
85 local file=$DIR/$tdir/f
87 do_node $CLIENT1 mkdir -p $DIR/$tdir/
88 do_node $CLIENT1 touch $file
89 fid=$(do_node $CLIENT1 $LFS path2fid $file)
90 do_node $CLIENT1 rm -rf $file
91 do_facet $SINGLEMDS $LCTL --device ${!var} getobjversion \\\"$fid\\\" || true
93 run_test 0b "getversion for non existent fid shouldn't cause kernel panic"
96 test_1a() { # former test_0a
97 local file=$DIR/$tfile
101 do_node $CLIENT1 mcreate $file
102 pre=$(chk_get_version $CLIENT1 $file)
103 do_node $CLIENT1 openfile -f O_RDWR $file
104 post=$(chk_get_version $CLIENT1 $file)
105 if (($pre != $post)); then
106 error "version changed unexpectedly: pre $pre, post $post"
109 run_test 1a "open and close do not change versions"
111 test_1b() { # former test_0b
112 local var=${SINGLEMDS}_svc
113 zconf_mount $CLIENT2 $MOUNT2
115 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
116 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
117 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
119 replay_barrier $SINGLEMDS
120 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
121 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT $MOUNT/$tdir/$tfile
122 zconf_umount $CLIENT2 $MOUNT2
123 facet_failover $SINGLEMDS
125 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
126 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
127 error_and_remount "open succeeded unexpectedly"
130 run_test 1b "open (O_CREAT) checks version of parent"
132 test_1c() { # former test_0c
133 local var=${SINGLEMDS}_svc
134 zconf_mount $CLIENT2 $MOUNT2
136 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
137 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
139 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
140 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tdir/$tfile
142 replay_barrier $SINGLEMDS
143 do_node $CLIENT2 chmod 0777 $MOUNT2/$tdir
144 do_node $CLIENT2 chmod 0666 $MOUNT2/$tdir/$tfile
145 rmultiop_start $CLIENT1 $DIR/$tdir/$tfile o_c
146 zconf_umount $CLIENT2 $MOUNT2
147 facet_failover $SINGLEMDS
149 client_up $CLIENT1 || error "$CLIENT1 evicted"
150 rmultiop_stop $CLIENT1 || error "close failed"
152 run_test 1c "open (non O_CREAT) does not checks versions"
154 # test set #2: CREAT (not open)
155 # - version of parent is not changed but checked
156 # - pre-version should be -1
157 # - post-version should be valid
158 test_2a() { # extended former test_0d
163 pre=$(chk_get_version $CLIENT1 $DIR)
164 do_node $CLIENT1 mkfifo $DIR/$tfile-fifo
165 post=$(chk_get_version $CLIENT1 $DIR)
166 if (($pre != $post)); then
167 error "version was changed: pre $pre, post $post"
170 pre=$(chk_get_version $CLIENT1 $DIR)
171 do_node $CLIENT1 mkdir $DIR/$tfile-dir
172 post=$(chk_get_version $CLIENT1 $DIR)
173 if (($pre != $post)); then
174 error "version was changed: pre $pre, post $post"
176 do_node $CLIENT1 rmdir $DIR/$tfile-dir
179 pre=$(chk_get_version $CLIENT1 $DIR)
180 do_node $CLIENT1 mkfifo $DIR/$tfile-nod
181 post=$(chk_get_version $CLIENT1 $DIR)
182 if (($pre != $post)); then
183 error "version was changed: pre $pre, post $post"
186 pre=$(chk_get_version $CLIENT1 $DIR)
187 do_node $CLIENT1 mkfifo $DIR/$tfile-symlink
188 post=$(chk_get_version $CLIENT1 $DIR)
189 if (($pre != $post)); then
190 error "version was changed: pre $pre, post $post"
193 if [ $MDSCOUNT -ge 2 ]; then
196 pre=$(chk_get_version $CLIENT1 $DIR)
197 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
198 post=$(chk_get_version $CLIENT1 $DIR)
199 if (($pre != $post)); then
200 error "version was changed: pre $pre, post $post"
203 do_node $CLIENT1 rm -rf $DIR/$tfile-*
206 run_test 2a "create operations doesn't change version of parent"
208 test_2b() { # former test_0e
209 local var=${SINGLEMDS}_svc
210 zconf_mount $CLIENT2 $MOUNT2
212 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
213 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
215 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
217 replay_barrier $SINGLEMDS
218 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
219 do_node $CLIENT1 mkfifo $DIR/$tdir/$tfile
220 zconf_umount $CLIENT2 $MOUNT2
221 facet_failover $SINGLEMDS
223 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
224 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
225 error_and_remount "create succeeded unexpectedly"
228 run_test 2b "create checks version of parent"
230 test_3a() { # former test_0f
234 do_node $CLIENT1 mcreate $DIR/$tfile
235 pre=$(chk_get_version $CLIENT1 $DIR)
236 do_node $CLIENT1 rm $DIR/$tfile
237 post=$(chk_get_version $CLIENT1 $DIR)
238 if (($pre != $post)); then
239 error "version was changed: pre $pre, post $post"
242 if [ $MDSCOUNT -ge 2 ]; then
245 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
246 pre=$(chk_get_version $CLIENT1 $DIR)
247 do_node $CLIENT1 rmdir $DIR/$tfile-remote_dir
248 post=$(chk_get_version $CLIENT1 $DIR)
249 if (($pre != $post)); then
250 error "version was changed: pre $pre, post $post"
254 run_test 3a "unlink doesn't change version of parent"
256 test_3b() { # former test_0g
257 local var=${SINGLEMDS}_svc
258 zconf_mount $CLIENT2 $MOUNT2
260 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
261 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
263 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
264 do_node $CLIENT1 mcreate $DIR/$tdir/$tfile
266 replay_barrier $SINGLEMDS
267 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
268 do_node $CLIENT1 rm $DIR/$tdir/$tfile
269 zconf_umount $CLIENT2 $MOUNT2
270 facet_failover $SINGLEMDS
272 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
273 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
274 error_and_remount "unlink succeeded unexpectedly"
277 run_test 3b "unlink checks version of parent"
279 test_4a() { # former test_0h
280 local file=$DIR/$tfile
284 do_node $CLIENT1 mcreate $file
285 pre=$(chk_get_version $CLIENT1 $file)
286 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
287 post=$(chk_get_version $CLIENT1 $file)
288 if (($pre == $post)); then
289 error "version not changed: pre $pre, post $post"
292 run_test 4a "setattr of UID changes versions"
294 test_4b() { # former test_0i
295 local file=$DIR/$tfile
299 do_node $CLIENT1 mcreate $file
300 pre=$(chk_get_version $CLIENT1 $file)
301 do_node $CLIENT1 chgrp $RUNAS_GID $file
302 post=$(chk_get_version $CLIENT1 $file)
303 if (($pre == $post)); then
304 error "version not changed: pre $pre, post $post"
307 run_test 4b "setattr of GID changes versions"
309 test_4c() { # former test_0j
310 local file=$DIR/$tfile
311 local var=${SINGLEMDS}_svc
312 zconf_mount $CLIENT2 $MOUNT2
314 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
315 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
317 do_node $CLIENT1 mcreate $file
319 replay_barrier $SINGLEMDS
320 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
321 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
322 zconf_umount $CLIENT2 $MOUNT2
323 facet_failover $SINGLEMDS
325 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
326 if ! do_node $CLIENT1 $CHECKSTAT -u \\\#$UID $file; then
327 error_and_remount "setattr of UID succeeded unexpectedly"
330 run_test 4c "setattr of UID checks versions"
332 test_4d() { # former test_0k
333 local file=$DIR/$tfile
334 local var=${SINGLEMDS}_svc
335 zconf_mount $CLIENT2 $MOUNT2
337 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
338 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
340 do_node $CLIENT1 mcreate $file
342 replay_barrier $SINGLEMDS
343 do_node $CLIENT2 chown $RUNAS_ID:$RUNAS_GID $MOUNT2/$tfile
344 do_node $CLIENT1 chgrp $RUNAS_GID $file
345 zconf_umount $CLIENT2 $MOUNT2
346 facet_failover $SINGLEMDS
348 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
349 if ! do_node $CLIENT1 $CHECKSTAT -g \\\#$UID $file; then
350 error_and_remount "setattr of GID succeeded unexpectedly"
353 run_test 4d "setattr of GID checks versions"
355 test_4e() { # former test_0l
356 local file=$DIR/$tfile
360 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
361 pre=$(chk_get_version $CLIENT1 $file)
362 do_node $CLIENT1 chmod 666 $file
363 post=$(chk_get_version $CLIENT1 $file)
364 if (($pre == $post)); then
365 error "version not changed: pre $pre, post $post"
368 run_test 4e "setattr of permission changes versions"
370 test_4f() { # former test_0m
371 local file=$DIR/$tfile
372 local var=${SINGLEMDS}_svc
373 zconf_mount $CLIENT2 $MOUNT2
375 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
376 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
378 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
380 replay_barrier $SINGLEMDS
381 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
382 do_node $CLIENT1 chmod 666 $file
383 zconf_umount $CLIENT2 $MOUNT2
384 facet_failover $SINGLEMDS
386 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
387 if ! do_node $CLIENT1 $CHECKSTAT -p 0644 $file; then
388 error_and_remount "setattr of permission succeeded unexpectedly"
391 run_test 4f "setattr of permission checks versions"
393 test_4g() { # former test_0n
394 local file=$DIR/$tfile
398 do_node $CLIENT1 mcreate $file
399 pre=$(chk_get_version $CLIENT1 $file)
400 do_node $CLIENT1 chattr +i $file
401 post=$(chk_get_version $CLIENT1 $file)
402 do_node $CLIENT1 chattr -i $file
403 if (($pre == $post)); then
404 error "version not changed: pre $pre, post $post"
407 run_test 4g "setattr of flags changes versions"
415 if ((${#attr} != 1)); then
416 error "checking multiple attributes not implemented yet"
418 do_node $client lsattr $file | cut -d ' ' -f 1 | grep -q $attr
421 test_4h() { # former test_0o
422 local file=$DIR/$tfile
424 local var=${SINGLEMDS}_svc
425 zconf_mount $CLIENT2 $MOUNT2
427 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
428 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
430 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
432 replay_barrier $SINGLEMDS
433 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
434 do_node $CLIENT1 chattr +i $file
435 zconf_umount $CLIENT2 $MOUNT2
436 facet_failover $SINGLEMDS
438 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
439 checkattr $CLIENT1 i $file
441 do_node $CLIENT1 chattr -i $file
442 if [ $rc -eq 0 ]; then
443 error "setattr of flags succeeded unexpectedly"
446 run_test 4h "setattr of flags checks versions"
448 test_4i() { # former test_0p
449 local file=$DIR/$tfile
453 local var=${SINGLEMDS}_svc
455 ad_orig=$(do_facet $SINGLEMDS "$LCTL get_param mdd.${!var}.atime_diff")
456 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
457 do_node $CLIENT1 mcreate $file
458 pre=$(chk_get_version $CLIENT1 $file)
459 do_node $CLIENT1 touch $file
460 post=$(chk_get_version $CLIENT1 $file)
462 # We don't fail MDS in this test. atime_diff shall be
463 # restored to its original value.
465 do_facet $SINGLEMDS "$LCTL set_param $ad_orig"
466 if (($pre != $post)); then
467 error "version changed unexpectedly: pre $pre, post $post"
470 run_test 4i "setattr of times does not change versions"
472 test_4j() { # former test_0q
473 local file=$DIR/$tfile
477 do_node $CLIENT1 mcreate $file
478 pre=$(chk_get_version $CLIENT1 $file)
479 do_node $CLIENT1 $TRUNCATE $file 1
480 post=$(chk_get_version $CLIENT1 $file)
481 if (($pre != $post)); then
482 error "version changed unexpectedly: pre $pre, post $post"
485 run_test 4j "setattr of size does not change versions"
487 test_4k() { # former test_0r
488 local file=$DIR/$tfile
492 local var=${SINGLEMDS}_svc
493 zconf_mount $CLIENT2 $MOUNT2
495 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
496 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
497 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
499 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
501 replay_barrier $SINGLEMDS
502 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
503 do_node $CLIENT1 $TRUNCATE $file 1
505 mtime_pre=$(do_node $CLIENT1 stat --format=%Y $file)
506 do_node $CLIENT1 touch $file
507 sleep 1 # avoid stat caching
508 mtime_post=$(do_node $CLIENT1 stat --format=%Y $file)
509 zconf_umount $CLIENT2 $MOUNT2
510 facet_failover $SINGLEMDS
512 client_up $CLIENT1 || error "$CLIENT1 evicted"
513 if (($mtime_pre >= $mtime_post)); then
514 error "time not changed: pre $mtime_pre, post $mtime_post"
516 if ! do_node $CLIENT1 $CHECKSTAT -s 1 $file; then
517 error_and_remount "setattr of size failed"
519 mtime=$(do_node $CLIENT1 stat --format=%Y $file)
520 if (($mtime != $mtime_post)); then
521 error "setattr of times failed: expected $mtime_post, got $mtime"
524 run_test 4k "setattr of times and size does not check versions"
526 test_5a() { # former test_0s
532 do_node $CLIENT1 mcreate $DIR/$tfile
533 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $DIR/$tdir
534 pre=$(chk_get_version $CLIENT1 $DIR/$tfile)
535 tp_pre=$(chk_get_version $CLIENT1 $DIR/$tdir)
536 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
537 post=$(chk_get_version $CLIENT1 $DIR/$tfile)
538 tp_post=$(chk_get_version $CLIENT1 $DIR/$tdir)
539 if (($pre == $post)); then
540 error "version of source not changed: pre $pre, post $post"
542 if (($tp_pre != $tp_post)); then
543 error "version of target parent was changed:"\
544 "pre $tp_pre, post $tp_post"
547 run_test 5a "link changes versions of source but not target parent"
549 test_5b() { # former test_0t
550 local var=${SINGLEMDS}_svc
551 zconf_mount $CLIENT2 $MOUNT2
553 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
554 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
556 do_node $CLIENT1 mcreate $DIR/$tfile
557 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
559 replay_barrier $SINGLEMDS
560 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
561 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
562 zconf_umount $CLIENT2 $MOUNT2
563 facet_failover $SINGLEMDS
565 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
566 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
567 error_and_remount "link should fail"
570 run_test 5b "link checks version of target parent"
572 test_5c() { # former test_0u
573 local var=${SINGLEMDS}_svc
574 zconf_mount $CLIENT2 $MOUNT2
576 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
577 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
579 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile
580 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
582 replay_barrier $SINGLEMDS
583 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
584 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
585 zconf_umount $CLIENT2 $MOUNT2
586 facet_failover $SINGLEMDS
588 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
589 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
590 error_and_remount "link should fail"
593 run_test 5c "link checks version of source"
595 test_6a() { # former test_0v
601 do_node $CLIENT1 mcreate $DIR/$tfile
602 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
603 sp_pre=$(chk_get_version $CLIENT1 $DIR)
604 tp_pre=$(chk_get_version $CLIENT1 $DIR/$tdir)
605 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
606 sp_post=$(chk_get_version $CLIENT1 $DIR)
607 tp_post=$(chk_get_version $CLIENT1 $DIR/$tdir)
608 if (($sp_pre != $sp_post)); then
609 error "version of source parent was changed:" \
610 "pre $sp_pre, post $sp_post"
612 if (($tp_pre != $tp_post)); then
613 error "version of target parent was changed:" \
614 "pre $tp_pre, post $tp_post"
617 run_test 6a "rename doesn't change versions of source parent and target parent"
619 test_6b() { # former test_0w
623 do_node $CLIENT1 mcreate $DIR/$tfile
624 pre=$(chk_get_version $CLIENT1 $DIR)
625 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tfile-new
626 post=$(chk_get_version $CLIENT1 $DIR)
627 if (($pre != $post)); then
628 error "version of parent was changed: pre $pre, post $post"
631 run_test 6b "rename within same dir doesn't change version of parent"
633 test_6c() { # former test_0x
634 local var=${SINGLEMDS}_svc
635 zconf_mount $CLIENT2 $MOUNT2
637 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
638 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
640 do_node $CLIENT1 mcreate $DIR/$tfile
641 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
643 replay_barrier $SINGLEMDS
644 do_node $CLIENT2 chmod 777 $MOUNT2
645 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
646 zconf_umount $CLIENT2 $MOUNT2
647 facet_failover $SINGLEMDS
649 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
650 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
651 error_and_remount "rename should fail"
654 run_test 6c "rename checks version of source parent"
656 test_6d() { # former test_0y
657 local var=${SINGLEMDS}_svc
658 zconf_mount $CLIENT2 $MOUNT2
660 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
661 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
663 do_node $CLIENT1 mcreate $DIR/$tfile
664 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
666 replay_barrier $SINGLEMDS
667 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
668 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
669 zconf_umount $CLIENT2 $MOUNT2
670 facet_failover $SINGLEMDS
672 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
673 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
674 error_and_remount "rename should fail"
677 run_test 6d "rename checks version of target parent"
679 # pdirops tests, bug 18143
686 local var=${SINGLEMDS}_svc
687 zconf_mount $CLIENT2 $MOUNT2
689 local cname=$TESTNAME.$cycle
691 echo "start cycle: $cname"
692 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
693 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
695 do_node $CLIENT1 $LFS mkdir -i 0 -c 1 $MOUNT/$tdir
696 replay_barrier $SINGLEMDS
698 echo "$cname first: $first"
699 do_node $CLIENT1 $first || error "$cname: Cannot do first operation"
700 # client2 operations that will be lost
701 echo "$cname lost: $lost"
702 do_node $CLIENT2 $lost || error "$cname: Cannot do 'lost' operations"
704 echo "$cname last: $last"
705 do_node $CLIENT1 $last || error "$cname: Cannot do last operation"
706 zconf_umount $CLIENT2 $MOUNT2
707 facet_failover $SINGLEMDS
708 # should fail as conflict expected
709 client_evicted $CLIENT1 || rc=1
711 wait_recovery_complete $SINGLEMDS
712 wait_mds_ost_sync || error "wait_mds_ost_sync failed"
719 first="createmany -o $DIR/$tdir/$tfile- 1"
720 lost="rm $MOUNT2/$tdir/$tfile-0"
721 last="createmany -o $DIR/$tdir/$tfile- 1"
722 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.1 failed"
724 first="createmany -o $DIR/$tdir/$tfile- 1"
725 lost="rm $MOUNT2/$tdir/$tfile-0"
726 last="mkdir $DIR/$tdir/$tfile-0"
727 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.2 failed"
729 first="mkdir $DIR/$tdir/$tfile-0"
730 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
731 last="createmany -o $DIR/$tdir/$tfile- 1"
732 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.3 failed"
735 run_test 7a "create, {lost}, create"
738 first="createmany -o $DIR/$tdir/$tfile- 1"
739 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
740 last="rm $DIR/$tdir/$tfile-0"
741 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.1 failed"
743 first="createmany -o $DIR/$tdir/$tfile- 1"
744 lost="touch $MOUNT2/$tdir/$tfile; mv $MOUNT2/$tdir/$tfile $MOUNT2/$tdir/$tfile-0"
745 last="rm $DIR/$tdir/$tfile-0"
746 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.2 failed"
748 first="createmany -o $DIR/$tdir/$tfile- 1"
749 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
750 last="rmdir $DIR/$tdir/$tfile-0"
751 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.3 failed"
754 run_test 7b "create, {lost}, unlink"
757 first="createmany -o $DIR/$tdir/$tfile- 1"
758 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
759 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
760 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.1 failed"
762 first="createmany -o $DIR/$tdir/$tfile- 2"
763 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
764 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
765 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.2 failed"
767 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile-1-0"
768 lost="rmdir $MOUNT2/$tdir/$tfile-1-0; createmany -o $MOUNT2/$tdir/$tfile-1- 1"
769 last="mv $DIR/$tdir/$tfile-1-0 $DIR/$tdir/$tfile-0"
770 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.3 failed"
772 first="createmany -o $DIR/$tdir/$tfile- 1"
773 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile"
774 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-0"
775 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.4 failed"
778 run_test 7c "create, {lost}, rename"
781 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
782 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0"
783 last="createmany -o $DIR/$tdir/$tfile- 1"
784 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.1 failed"
786 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
787 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0"
788 last="mkdir $DIR/$tdir/$tfile-0"
789 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.2 failed"
791 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
792 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
793 last="createmany -o $DIR/$tdir/$tfile- 1"
794 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.3 failed"
797 run_test 7d "unlink, {lost}, create"
800 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
801 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0;createmany -o $MOUNT2/$tdir/$tfile- 1"
802 last="rm $DIR/$tdir/$tfile-0"
803 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.1 failed"
805 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
806 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
807 last="rmdir $DIR/$tdir/$tfile-0"
808 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.2 failed"
810 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
811 lost="mkdir $MOUNT2/$tdir/$tfile-0"
812 last="rmdir $DIR/$tdir/$tfile-0"
813 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.3 failed"
815 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
816 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
817 last="rm $DIR/$tdir/$tfile-0"
818 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.4 failed"
820 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
821 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
822 last="rm $DIR/$tdir/$tfile-0"
823 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.5 failed"
826 run_test 7e "unlink, {lost}, unlink"
829 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
830 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
831 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
832 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.1 failed"
834 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
835 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
836 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
837 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.2 failed"
839 first="mkdir $DIR/$tdir/$tfile; createmany -o $DIR/$tdir/$tfile- 1; rmdir $DIR/$tdir/$tfile"
840 lost="mkdir $MOUNT2/$tdir/$tfile"
841 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
842 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.3 failed"
844 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
845 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
846 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
847 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.4 failed"
849 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
850 lost="mkdir $MOUNT2/$tdir/$tfile-0"
851 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
852 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.5 failed"
855 run_test 7f "unlink, {lost}, rename"
858 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
859 lost="mkdir $MOUNT2/$tdir/$tfile-0;rmdir $MOUNT2/$tdir/$tfile-0"
860 last="createmany -o $DIR/$tdir/$tfile- 1"
861 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.1 failed"
863 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
864 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0"
865 last="mkdir $DIR/$tdir/$tfile-0"
866 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.2 failed"
868 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
869 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
870 last="link $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
871 if [ "$MDS1_VERSION" -lt $(version_code 2.5.1) ]; then
872 test_7_cycle "$first" "$lost" "$last" ||
873 error "Test 7g.3 failed"
874 else #LU-4442 LU-3528
875 test_7_cycle "$first" "$lost" "$last" &&
876 error "Test 7g.3 failed"
880 run_test 7g "rename, {lost}, create"
883 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
884 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
885 last="rm $DIR/$tdir/$tfile-0"
886 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.1 failed"
888 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
889 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
890 last="rm $DIR/$tdir/$tfile-0"
891 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.2 failed"
893 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
894 lost="rm $MOUNT2/$tdir/$tfile/$tfile-0"
895 last="rmdir $DIR/$tdir/$tfile"
896 #test_7_cycle "$first" "$lost" "$last" || error "Test 7h.3 failed"
899 run_test 7h "rename, {lost}, unlink"
902 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
903 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
904 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
905 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
907 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
908 lost="mkdir $MOUNT2/$tdir/$tfile-0"
909 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
910 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
912 first="createmany -o $DIR/$tdir/$tfile- 3; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
913 lost="mv $MOUNT2/$tdir/$tfile-2 $MOUNT2/$tdir/$tfile-0"
914 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-2"
915 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.3 failed"
917 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
918 lost="rm $MOUNT2/$tdir/$tfile-1"
919 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-1"
920 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.4 failed"
923 run_test 7i "rename, {lost}, rename"
925 # test set #8: orphan handling bug 15392.
926 # Unlink during recovery creates orphan always just in case some late open may
927 # arrive. These orphans will be removed after recovery anyway.
928 # Tests check that valid create,unlink,create sequence will work in this case
929 # too but not fail on second create due to orphan found.
932 local var=${SINGLEMDS}_svc
933 zconf_mount $CLIENT2 $MOUNT2
935 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
937 do_node $CLIENT1 mcreate $DIR/$tfile
938 do_node $CLIENT1 mkdir $DIR/$tfile-2
939 replay_barrier $SINGLEMDS
940 # missed replay from client2 will lead to recovery by versions
941 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
942 do_node $CLIENT1 rm $DIR/$tfile || return 1
943 do_node $CLIENT1 touch $DIR/$tfile || return 2
945 zconf_umount $CLIENT2 $MOUNT2
946 facet_failover $SINGLEMDS
947 client_up $CLIENT1 || return 6
949 do_node $CLIENT1 rm $DIR/$tfile || error "$tfile doesn't exists"
952 run_test 8a "create | unlink, create shouldn't fail"
955 local var=${SINGLEMDS}_svc
956 zconf_mount $CLIENT2 $MOUNT2
958 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
960 do_node $CLIENT1 touch $DIR/$tfile
961 do_node $CLIENT1 mkdir $DIR/$tfile-2
962 replay_barrier $SINGLEMDS
963 # missed replay from client2 will lead to recovery by versions
964 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
965 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
966 do_node $CLIENT1 mcreate $MOUNT1/$tfile || return 2
968 zconf_umount $CLIENT2 $MOUNT2
969 facet_failover $SINGLEMDS
970 client_up $CLIENT1 || return 6
972 do_node $CLIENT1 rm $MOUNT1/$tfile || error "$tfile doesn't exists"
975 run_test 8b "create | unlink, create shouldn't fail"
978 local var=${SINGLEMDS}_svc
979 zconf_mount $CLIENT2 $MOUNT2
981 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
983 do_node $CLIENT1 touch $DIR/$tfile
984 do_node $CLIENT1 mkdir $DIR/$tfile-2
985 replay_barrier $SINGLEMDS
986 # missed replay from client2 will lead to recovery by versions
987 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
988 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
989 do_node $CLIENT1 mkdir $MOUNT1/$tfile || return 2
991 zconf_umount $CLIENT2 $MOUNT2
992 facet_failover $SINGLEMDS
993 client_up $CLIENT1 || return 6
995 do_node $CLIENT1 rmdir $MOUNT1/$tfile || error "$tfile doesn't exists"
998 run_test 8c "create | unlink, create shouldn't fail"
1001 # This test uses three Lustre clients on two hosts.
1003 # Lustre Client 1: $CLIENT1:$MOUNT ($DIR)
1004 # Lustre Client 2: $CLIENT2:$MOUNT2 ($DIR2)
1005 # Lustre Client 3: $CLIENT2:$MOUNT1 ($DIR1)
1007 test_10b() { # former test_2b
1010 local var=${SINGLEMDS}_svc
1012 [ $CLIENTCOUNT -ge 2 ] || \
1013 { skip "Need two or more clients, have $CLIENTCOUNT" && \
1016 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
1017 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1019 zconf_mount $CLIENT1 $MOUNT
1020 zconf_mount $CLIENT2 $MOUNT1
1021 zconf_mount $CLIENT2 $MOUNT2
1022 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-a
1023 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-b
1026 # Save an MDT transaction number before recovery.
1028 do_node $CLIENT1 touch $DIR1/$tfile
1029 pre=$(chk_get_version $CLIENT1 $DIR/$tfile)
1032 # Comments on the replay sequence state the expected result
1036 # "U" Unable to replay.
1039 replay_barrier $SINGLEMDS
1040 do_node $CLIENT1 chmod 666 $DIR/$tfile-a # R
1041 do_node $CLIENT2 chmod 666 $DIR1/$tfile-b # R
1042 do_node $CLIENT2 chgrp $RUNAS_GID $DIR2/$tfile-a # U
1043 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-a # J
1044 do_node $CLIENT2 $TRUNCATE $DIR2/$tfile-b 1 # U
1045 do_node $CLIENT2 chgrp $RUNAS_GID $DIR1/$tfile-b # R
1046 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-b # R
1047 zconf_umount $CLIENT2 $MOUNT2
1048 facet_failover $SINGLEMDS
1050 client_evicted $CLIENT1 || error "$CLIENT1:$MOUNT not evicted"
1051 client_up $CLIENT2 || error "$CLIENT2:$MOUNT1 evicted"
1054 # Check the MDT epoch. $post must be the first transaction
1055 # number assigned after recovery.
1057 do_node $CLIENT2 chmod 666 $DIR1/$tfile
1058 post=$(chk_get_version $CLIENT2 $DIR1/$tfile)
1059 if (($(($pre >> 32)) == $((post >> 32)))); then
1060 error "epoch not changed: pre $pre, post $post"
1063 if (($(($post & 0x00000000ffffffff)) != 1)); then
1064 error "transno should restart from one: got $post"
1067 do_node $CLIENT2 stat $DIR1/$tfile-a
1068 do_node $CLIENT2 stat $DIR1/$tfile-b
1070 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$UID -g \\\#$UID \
1071 $DIR1/$tfile-a || error "$DIR/$tfile-a: unexpected state"
1072 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$RUNAS_ID -g \\\#$RUNAS_GID \
1073 $DIR1/$tfile-b || error "$DIR/$tfile-b: unexpected state"
1075 zconf_umount $CLIENT2 $MOUNT1
1077 run_test 10b "3 clients: some, none, and all reqs replayed"
1079 # test set #11: operations in single directory
1081 local var=${SINGLEMDS}_svc
1082 zconf_mount $CLIENT2 $MOUNT2
1084 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1086 replay_barrier $SINGLEMDS
1088 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1090 do_node $CLIENT2 createmany -o $MOUNT2/$tfile-2- 100
1091 zconf_umount $CLIENT2 $MOUNT2
1094 facet_failover $SINGLEMDS
1095 # recovery shouldn't fail due to missing client 2
1096 client_up $CLIENT1 || return 1
1097 # All files from client1 should have been replayed
1098 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1100 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1103 run_test 11a "concurrent creates don't affect each other"
1106 local var=${SINGLEMDS}_svc
1107 zconf_mount $CLIENT2 $MOUNT2
1109 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1111 do_node $CLIENT2 createmany -o $MOUNT2/$tfile-2- 100
1113 replay_barrier $SINGLEMDS
1114 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1116 do_node $CLIENT2 unlinkmany -o $MOUNT2/$tfile-2- 100
1117 zconf_umount $CLIENT2 $MOUNT2
1120 facet_failover $SINGLEMDS
1121 # recovery shouldn't fail due to missing client 2
1122 client_up $CLIENT1 || return 1
1123 # All files from client1 should have been replayed
1124 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1126 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1129 run_test 11b "concurrent creates and unlinks don't affect each other"
1131 # test set #12: lock replay with VBR, bug 16356
1132 test_12a() { # former test_2a
1133 local var=${SINGLEMDS}_svc
1134 zconf_mount $CLIENT2 $MOUNT2
1136 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1138 do_node $CLIENT2 mkdir -p $MOUNT2/$tdir
1139 replay_barrier $SINGLEMDS
1140 do_node $CLIENT2 mcreate $MOUNT2/$tdir/$tfile
1141 do_node $CLIENT1 createmany -o $DIR/$tfile- 25
1142 #client1 read data from client2 which will be lost
1143 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile
1144 do_node $CLIENT1 createmany -o $DIR/$tfile-3- 25
1145 zconf_umount $CLIENT2 $MOUNT2
1147 facet_failover $SINGLEMDS
1148 # recovery shouldn't fail due to missing client 2
1149 client_up $CLIENT1 || return 1
1151 # All 50 files should have been replayed
1152 do_node $CLIENT1 unlinkmany $DIR/$tfile- 25 || return 2
1153 do_node $CLIENT1 unlinkmany $DIR/$tfile-3- 25 || return 3
1154 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile && return 4
1158 run_test 12a "lost data due to missed REMOTE client during replay"
1160 test_13() { # LU-8826
1161 local var=${SINGLEMDS}_svc
1163 if combined_mgs_mds ; then
1164 skip "Needs separate MGS to enable IR"
1168 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
1169 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1171 zconf_mount $CLIENT2 $MOUNT2
1172 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile
1174 # set ir_timeout to a reasonable small value
1175 local ir_timeout=$(do_facet mgs $LCTL get_param -n mgs.*.ir_timeout)
1176 do_facet mgs $LCTL set_param mgs.*.ir_timeout=5
1177 # make sure IR functional
1180 replay_barrier $SINGLEMDS
1181 do_node $CLIENT1 chmod 666 $DIR/$tfile
1182 do_node $CLIENT2 chmod 777 $DIR2/$tfile
1184 # make sure client data of $CLIENT2:$MOUNT2 is remained
1185 # define OBD_FAIL_TGT_CLIENT_DEL 0x718
1186 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x718
1187 zconf_umount $CLIENT2 $MOUNT2
1188 # define OBD_FAIL_TGT_SLUGGISH_NET 0x719
1189 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x719
1190 facet_failover $SINGLEMDS
1192 client_up $CLIENT1 || error "$CLIENT1 evicted"
1194 do_facet $SINGLEMDS $LCTL set_param fail_loc=0
1195 do_facet mgs $LCTL set_param mgs.*.ir_timeout=$ir_timeout
1197 do_node $CLIENT1 $CHECKSTAT -p 0666 $DIR/$tfile ||
1198 error "$DIR/$tfile-a: unexpected state"
1200 run_test 13 "Shouldn't give up VBR easily on sluggish network"
1202 #restore COS setting
1203 restore_lustre_params < $cos_param_file
1204 rm -f $cos_param_file
1206 [ "$CLIENTS" ] && zconf_mount_clients $CLIENTS $DIR
1209 check_and_cleanup_lustre