2 # -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*-
3 # vim:shiftwidth=4:softtabstop=4:tabstop=4:
8 ALWAYS_EXCEPT="12a $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"
49 local WAIT_MAX=${4:-60}
52 # We need to run do_node in bg, because pdsh does not exit
53 # if child process of run script exists.
54 # I.e. pdsh does not exit when runmultiop_bg_pause exited,
55 # because of multiop_bg_pause -> $MULTIOP_PROG &
56 # By the same reason we need sleep a bit after do_nodes starts
57 # to let runmultiop_bg_pause start muliop and
58 # update /tmp/multiop_bg.pid ;
59 # The rm /tmp/multiop_bg.pid guarantees here that
60 # we have the updated by runmultiop_bg_pause
61 # /tmp/multiop_bg.pid file
63 local pid_file=$TMP/multiop_bg.pid.$$
64 do_node $client "MULTIOP_PID_FILE=$pid_file LUSTRE= \
65 runmultiop_bg_pause $file $cmds" &
69 while [[ $wait_time -lt $WAIT_MAX ]]; do
71 wait_time=$((wait_time + 3))
72 multiop_pid=$(do_node $client cat $pid_file)
73 if [ -n "$multiop_pid" ]; then
78 [ -n "$multiop_pid" ] ||
79 error "$client : Can not get multiop_pid from $pid_file "
81 eval export $(node_var_name $client)_multiop_pid=$multiop_pid
82 eval export $(node_var_name $client)_do_node_pid=$pid
83 local var=$(node_var_name $client)_multiop_pid
84 echo client $client multiop_bg started multiop_pid=${!var}
90 local multiop_pid=$(node_var_name $client)_multiop_pid
91 local do_node_pid=$(node_var_name $client)_do_node_pid
93 echo "Stopping multiop_pid=${!multiop_pid} (kill ${!multiop_pid} on $client)"
94 do_node $client kill -USR1 ${!multiop_pid}
100 local var=${SINGLEMDS}_svc
105 fid=$(do_node $client $LFS path2fid $file)
106 do_facet $SINGLEMDS $LCTL --device ${!var} getobjversion \\\"$fid\\\"
110 cos_param_file=$TMP/rvbr-cos-params
111 save_lustre_params $(get_facets MDS) "mdt.*.commit_on_sharing" > $cos_param_file
114 get_version $CLIENT1 $DIR/$tdir/1a || true
116 run_test 0a "getversion for non existent file shouldn't cause kernel panic"
119 local var=${SINGLEMDS}_svc
121 local file=$DIR/$tdir/f
123 do_node $CLIENT1 mkdir -p $DIR/$tdir/
124 do_node $CLIENT1 touch $file
125 fid=$(do_node $CLIENT1 $LFS path2fid $file)
126 do_node $CLIENT1 rm -rf $file
127 do_facet $SINGLEMDS $LCTL --device ${!var} getobjversion \\\"$fid\\\" || true
129 run_test 0b "getversion for non existent fid shouldn't cause kernel panic"
132 test_1a() { # former test_0a
133 local file=$DIR/$tfile
137 do_node $CLIENT1 mcreate $file
138 pre=$(get_version $CLIENT1 $file)
139 do_node $CLIENT1 openfile -f O_RDWR $file
140 post=$(get_version $CLIENT1 $file)
141 if (($pre != $post)); then
142 error "version changed unexpectedly: pre $pre, post $post"
145 run_test 1a "open and close do not change versions"
147 test_1b() { # former test_0b
148 local var=${SINGLEMDS}_svc
149 zconf_mount $CLIENT2 $MOUNT2
151 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
152 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
153 do_node $CLIENT1 mkdir -p -m 755 $MOUNT/$tdir
155 replay_barrier $SINGLEMDS
156 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
157 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT $MOUNT/$tdir/$tfile
158 zconf_umount $CLIENT2 $MOUNT2
159 facet_failover $SINGLEMDS
161 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
162 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
163 error_and_remount "open succeeded unexpectedly"
166 run_test 1b "open (O_CREAT) checks version of parent"
168 test_1c() { # former test_0c
169 local var=${SINGLEMDS}_svc
170 zconf_mount $CLIENT2 $MOUNT2
172 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
173 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
175 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
176 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tdir/$tfile
178 replay_barrier $SINGLEMDS
179 do_node $CLIENT2 chmod 0777 $MOUNT2/$tdir
180 do_node $CLIENT2 chmod 0666 $MOUNT2/$tdir/$tfile
181 rmultiop_start $CLIENT1 $DIR/$tdir/$tfile o_c
182 zconf_umount $CLIENT2 $MOUNT2
183 facet_failover $SINGLEMDS
185 client_up $CLIENT1 || error "$CLIENT1 evicted"
186 rmultiop_stop $CLIENT1 || error "close failed"
188 run_test 1c "open (non O_CREAT) does not checks versions"
190 # test set #2: CREAT (not open)
191 # - version of parent is not changed but checked
192 # - pre-version should be -1
193 # - post-version should be valid
194 test_2a() { # extended former test_0d
199 pre=$(get_version $CLIENT1 $DIR)
200 do_node $CLIENT1 mkfifo $DIR/$tfile-fifo
201 post=$(get_version $CLIENT1 $DIR)
202 if (($pre != $post)); then
203 error "version was changed: pre $pre, post $post"
206 pre=$(get_version $CLIENT1 $DIR)
207 do_node $CLIENT1 mkdir $DIR/$tfile-dir
208 post=$(get_version $CLIENT1 $DIR)
209 if (($pre != $post)); then
210 error "version was changed: pre $pre, post $post"
212 do_node $CLIENT1 rmdir $DIR/$tfile-dir
215 pre=$(get_version $CLIENT1 $DIR)
216 do_node $CLIENT1 mkfifo $DIR/$tfile-nod
217 post=$(get_version $CLIENT1 $DIR)
218 if (($pre != $post)); then
219 error "version was changed: pre $pre, post $post"
222 pre=$(get_version $CLIENT1 $DIR)
223 do_node $CLIENT1 mkfifo $DIR/$tfile-symlink
224 post=$(get_version $CLIENT1 $DIR)
225 if (($pre != $post)); then
226 error "version was changed: pre $pre, post $post"
229 if [ $MDSCOUNT -ge 2 ]; then
232 pre=$(get_version $CLIENT1 $DIR)
233 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
234 post=$(get_version $CLIENT1 $DIR)
235 if (($pre != $post)); then
236 error "version was changed: pre $pre, post $post"
239 do_node $CLIENT1 rm -rf $DIR/$tfile-*
242 run_test 2a "create operations doesn't change version of parent"
244 test_2b() { # former test_0e
245 local var=${SINGLEMDS}_svc
246 zconf_mount $CLIENT2 $MOUNT2
248 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
249 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
251 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
253 replay_barrier $SINGLEMDS
254 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
255 do_node $CLIENT1 mkfifo $DIR/$tdir/$tfile
256 zconf_umount $CLIENT2 $MOUNT2
257 facet_failover $SINGLEMDS
259 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
260 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
261 error_and_remount "create succeeded unexpectedly"
264 run_test 2b "create checks version of parent"
266 test_3a() { # former test_0f
270 do_node $CLIENT1 mcreate $DIR/$tfile
271 pre=$(get_version $CLIENT1 $DIR)
272 do_node $CLIENT1 rm $DIR/$tfile
273 post=$(get_version $CLIENT1 $DIR)
274 if (($pre != $post)); then
275 error "version was changed: pre $pre, post $post"
278 if [ $MDSCOUNT -ge 2 ]; then
281 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
282 pre=$(get_version $CLIENT1 $DIR)
283 do_node $CLIENT1 rmdir $DIR/$tfile-remote_dir
284 post=$(get_version $CLIENT1 $DIR)
285 if (($pre != $post)); then
286 error "version was changed: pre $pre, post $post"
290 run_test 3a "unlink doesn't change version of parent"
292 test_3b() { # former test_0g
293 local var=${SINGLEMDS}_svc
294 zconf_mount $CLIENT2 $MOUNT2
296 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
297 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
299 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
300 do_node $CLIENT1 mcreate $DIR/$tdir/$tfile
302 replay_barrier $SINGLEMDS
303 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
304 do_node $CLIENT1 rm $DIR/$tdir/$tfile
305 zconf_umount $CLIENT2 $MOUNT2
306 facet_failover $SINGLEMDS
308 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
309 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
310 error_and_remount "unlink succeeded unexpectedly"
313 run_test 3b "unlink checks version of parent"
315 test_4a() { # former test_0h
316 local file=$DIR/$tfile
320 do_node $CLIENT1 mcreate $file
321 pre=$(get_version $CLIENT1 $file)
322 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
323 post=$(get_version $CLIENT1 $file)
324 if (($pre == $post)); then
325 error "version not changed: pre $pre, post $post"
328 run_test 4a "setattr of UID changes versions"
330 test_4b() { # former test_0i
331 local file=$DIR/$tfile
335 do_node $CLIENT1 mcreate $file
336 pre=$(get_version $CLIENT1 $file)
337 do_node $CLIENT1 chgrp $RUNAS_GID $file
338 post=$(get_version $CLIENT1 $file)
339 if (($pre == $post)); then
340 error "version not changed: pre $pre, post $post"
343 run_test 4b "setattr of GID changes versions"
345 test_4c() { # former test_0j
346 local file=$DIR/$tfile
347 local var=${SINGLEMDS}_svc
348 zconf_mount $CLIENT2 $MOUNT2
350 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
351 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
353 do_node $CLIENT1 mcreate $file
355 replay_barrier $SINGLEMDS
356 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
357 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
358 zconf_umount $CLIENT2 $MOUNT2
359 facet_failover $SINGLEMDS
361 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
362 if ! do_node $CLIENT1 $CHECKSTAT -u \\\#$UID $file; then
363 error_and_remount "setattr of UID succeeded unexpectedly"
366 run_test 4c "setattr of UID checks versions"
368 test_4d() { # former test_0k
369 local file=$DIR/$tfile
370 local var=${SINGLEMDS}_svc
371 zconf_mount $CLIENT2 $MOUNT2
373 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
374 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
376 do_node $CLIENT1 mcreate $file
378 replay_barrier $SINGLEMDS
379 do_node $CLIENT2 chown $RUNAS_ID:$RUNAS_GID $MOUNT2/$tfile
380 do_node $CLIENT1 chgrp $RUNAS_GID $file
381 zconf_umount $CLIENT2 $MOUNT2
382 facet_failover $SINGLEMDS
384 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
385 if ! do_node $CLIENT1 $CHECKSTAT -g \\\#$UID $file; then
386 error_and_remount "setattr of GID succeeded unexpectedly"
389 run_test 4d "setattr of GID checks versions"
391 test_4e() { # former test_0l
392 local file=$DIR/$tfile
396 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
397 pre=$(get_version $CLIENT1 $file)
398 do_node $CLIENT1 chmod 666 $file
399 post=$(get_version $CLIENT1 $file)
400 if (($pre == $post)); then
401 error "version not changed: pre $pre, post $post"
404 run_test 4e "setattr of permission changes versions"
406 test_4f() { # former test_0m
407 local file=$DIR/$tfile
408 local var=${SINGLEMDS}_svc
409 zconf_mount $CLIENT2 $MOUNT2
411 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
412 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
414 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
416 replay_barrier $SINGLEMDS
417 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
418 do_node $CLIENT1 chmod 666 $file
419 zconf_umount $CLIENT2 $MOUNT2
420 facet_failover $SINGLEMDS
422 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
423 if ! do_node $CLIENT1 $CHECKSTAT -p 0644 $file; then
424 error_and_remount "setattr of permission succeeded unexpectedly"
427 run_test 4f "setattr of permission checks versions"
429 test_4g() { # former test_0n
430 local file=$DIR/$tfile
434 do_node $CLIENT1 mcreate $file
435 pre=$(get_version $CLIENT1 $file)
436 do_node $CLIENT1 chattr +i $file
437 post=$(get_version $CLIENT1 $file)
438 do_node $CLIENT1 chattr -i $file
439 if (($pre == $post)); then
440 error "version not changed: pre $pre, post $post"
443 run_test 4g "setattr of flags changes versions"
451 if ((${#attr} != 1)); then
452 error "checking multiple attributes not implemented yet"
454 do_node $client lsattr $file | cut -d ' ' -f 1 | grep -q $attr
457 test_4h() { # former test_0o
458 local file=$DIR/$tfile
460 local var=${SINGLEMDS}_svc
461 zconf_mount $CLIENT2 $MOUNT2
463 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
464 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
466 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
468 replay_barrier $SINGLEMDS
469 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
470 do_node $CLIENT1 chattr +i $file
471 zconf_umount $CLIENT2 $MOUNT2
472 facet_failover $SINGLEMDS
474 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
475 checkattr $CLIENT1 i $file
477 do_node $CLIENT1 chattr -i $file
478 if [ $rc -eq 0 ]; then
479 error "setattr of flags succeeded unexpectedly"
482 run_test 4h "setattr of flags checks versions"
484 test_4i() { # former test_0p
485 local file=$DIR/$tfile
489 local var=${SINGLEMDS}_svc
491 ad_orig=$(do_facet $SINGLEMDS "$LCTL get_param mdd.${!var}.atime_diff")
492 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
493 do_node $CLIENT1 mcreate $file
494 pre=$(get_version $CLIENT1 $file)
495 do_node $CLIENT1 touch $file
496 post=$(get_version $CLIENT1 $file)
498 # We don't fail MDS in this test. atime_diff shall be
499 # restored to its original value.
501 do_facet $SINGLEMDS "$LCTL set_param $ad_orig"
502 if (($pre != $post)); then
503 error "version changed unexpectedly: pre $pre, post $post"
506 run_test 4i "setattr of times does not change versions"
508 test_4j() { # former test_0q
509 local file=$DIR/$tfile
513 do_node $CLIENT1 mcreate $file
514 pre=$(get_version $CLIENT1 $file)
515 do_node $CLIENT1 $TRUNCATE $file 1
516 post=$(get_version $CLIENT1 $file)
517 if (($pre != $post)); then
518 error "version changed unexpectedly: pre $pre, post $post"
521 run_test 4j "setattr of size does not change versions"
523 test_4k() { # former test_0r
524 local file=$DIR/$tfile
528 local var=${SINGLEMDS}_svc
529 zconf_mount $CLIENT2 $MOUNT2
531 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
532 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
533 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
535 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
537 replay_barrier $SINGLEMDS
538 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
539 do_node $CLIENT1 $TRUNCATE $file 1
541 mtime_pre=$(do_node $CLIENT1 stat --format=%Y $file)
542 do_node $CLIENT1 touch $file
543 sleep 1 # avoid stat caching
544 mtime_post=$(do_node $CLIENT1 stat --format=%Y $file)
545 zconf_umount $CLIENT2 $MOUNT2
546 facet_failover $SINGLEMDS
548 client_up $CLIENT1 || error "$CLIENT1 evicted"
549 if (($mtime_pre >= $mtime_post)); then
550 error "time not changed: pre $mtime_pre, post $mtime_post"
552 if ! do_node $CLIENT1 $CHECKSTAT -s 1 $file; then
553 error_and_remount "setattr of size failed"
555 mtime=$(do_node $CLIENT1 stat --format=%Y $file)
556 if (($mtime != $mtime_post)); then
557 error "setattr of times failed: expected $mtime_post, got $mtime"
560 run_test 4k "setattr of times and size does not check versions"
562 test_5a() { # former test_0s
568 do_node $CLIENT1 mcreate $DIR/$tfile
569 do_node $CLIENT1 mkdir -p $DIR/$tdir
570 pre=$(get_version $CLIENT1 $DIR/$tfile)
571 tp_pre=$(get_version $CLIENT1 $DIR/$tdir)
572 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
573 post=$(get_version $CLIENT1 $DIR/$tfile)
574 tp_post=$(get_version $CLIENT1 $DIR/$tdir)
575 if (($pre == $post)); then
576 error "version of source not changed: pre $pre, post $post"
578 if (($tp_pre != $tp_post)); then
579 error "version of target parent was changed: pre $tp_pre, post $tp_post"
582 run_test 5a "link changes versions of source but not target parent"
584 test_5b() { # former test_0t
585 local var=${SINGLEMDS}_svc
586 zconf_mount $CLIENT2 $MOUNT2
588 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
589 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
591 do_node $CLIENT1 mcreate $DIR/$tfile
592 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
594 replay_barrier $SINGLEMDS
595 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
596 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
597 zconf_umount $CLIENT2 $MOUNT2
598 facet_failover $SINGLEMDS
600 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
601 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
602 error_and_remount "link should fail"
605 run_test 5b "link checks version of target parent"
607 test_5c() { # former test_0u
608 local var=${SINGLEMDS}_svc
609 zconf_mount $CLIENT2 $MOUNT2
611 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
612 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
614 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile
615 do_node $CLIENT1 mkdir -p $DIR/$tdir
617 replay_barrier $SINGLEMDS
618 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
619 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
620 zconf_umount $CLIENT2 $MOUNT2
621 facet_failover $SINGLEMDS
623 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
624 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
625 error_and_remount "link should fail"
628 run_test 5c "link checks version of source"
630 test_6a() { # former test_0v
636 do_node $CLIENT1 mcreate $DIR/$tfile
637 do_node $CLIENT1 mkdir -p $DIR/$tdir
638 sp_pre=$(get_version $CLIENT1 $DIR)
639 tp_pre=$(get_version $CLIENT1 $DIR/$tdir)
640 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
641 sp_post=$(get_version $CLIENT1 $DIR)
642 tp_post=$(get_version $CLIENT1 $DIR/$tdir)
643 if (($sp_pre != $sp_post)); then
644 error "version of source parent was changed: pre $sp_pre, post $sp_post"
646 if (($tp_pre != $tp_post)); then
647 error "version of target parent was changed: pre $tp_pre, post $tp_post"
650 run_test 6a "rename doesn't change versions of source parent and target parent"
652 test_6b() { # former test_0w
656 do_node $CLIENT1 mcreate $DIR/$tfile
657 pre=$(get_version $CLIENT1 $DIR)
658 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tfile-new
659 post=$(get_version $CLIENT1 $DIR)
660 if (($pre != $post)); then
661 error "version of parent was changed: pre $pre, post $post"
664 run_test 6b "rename within same dir doesn't change version of parent"
666 test_6c() { # former test_0x
667 local var=${SINGLEMDS}_svc
668 zconf_mount $CLIENT2 $MOUNT2
670 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
671 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
673 do_node $CLIENT1 mcreate $DIR/$tfile
674 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
676 replay_barrier $SINGLEMDS
677 do_node $CLIENT2 chmod 777 $MOUNT2
678 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
679 zconf_umount $CLIENT2 $MOUNT2
680 facet_failover $SINGLEMDS
682 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
683 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
684 error_and_remount "rename should fail"
687 run_test 6c "rename checks version of source parent"
689 test_6d() { # former test_0y
690 local var=${SINGLEMDS}_svc
691 zconf_mount $CLIENT2 $MOUNT2
693 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
694 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
696 do_node $CLIENT1 mcreate $DIR/$tfile
697 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
699 replay_barrier $SINGLEMDS
700 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
701 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
702 zconf_umount $CLIENT2 $MOUNT2
703 facet_failover $SINGLEMDS
705 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
706 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
707 error_and_remount "rename should fail"
710 run_test 6d "rename checks version of target parent"
712 # pdirops tests, bug 18143
719 local var=${SINGLEMDS}_svc
720 zconf_mount $CLIENT2 $MOUNT2
722 local cname=$TESTNAME.$cycle
724 echo "start cycle: $cname"
725 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
726 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
728 do_node $CLIENT1 mkdir -p $DIR/$tdir
729 replay_barrier $SINGLEMDS
731 echo "$cname first: $first"
732 do_node $CLIENT1 $first || error "$cname: Cannot do first operation"
733 # client2 operations that will be lost
734 echo "$cname lost: $lost"
735 do_node $CLIENT2 $lost || error "$cname: Cannot do 'lost' operations"
737 echo "$cname last: $last"
738 do_node $CLIENT1 $last || error "$cname: Cannot do last operation"
739 zconf_umount $CLIENT2 $MOUNT2
740 facet_failover $SINGLEMDS
741 # should fail as conflict expected
742 client_evicted $CLIENT1 || rc=1
744 wait_recovery_complete $SINGLEMDS
745 wait_mds_ost_sync || error "wait_mds_ost_sync failed"
752 first="createmany -o $DIR/$tdir/$tfile- 1"
753 lost="rm $MOUNT2/$tdir/$tfile-0"
754 last="createmany -o $DIR/$tdir/$tfile- 1"
755 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.1 failed"
757 first="createmany -o $DIR/$tdir/$tfile- 1"
758 lost="rm $MOUNT2/$tdir/$tfile-0"
759 last="mkdir $DIR/$tdir/$tfile-0"
760 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.2 failed"
762 first="mkdir $DIR/$tdir/$tfile-0"
763 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
764 last="createmany -o $DIR/$tdir/$tfile- 1"
765 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.3 failed"
768 run_test 7a "create, {lost}, create"
771 first="createmany -o $DIR/$tdir/$tfile- 1"
772 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
773 last="rm $DIR/$tdir/$tfile-0"
774 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.1 failed"
776 first="createmany -o $DIR/$tdir/$tfile- 1"
777 lost="touch $MOUNT2/$tdir/$tfile; mv $MOUNT2/$tdir/$tfile $MOUNT2/$tdir/$tfile-0"
778 last="rm $DIR/$tdir/$tfile-0"
779 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.2 failed"
781 first="createmany -o $DIR/$tdir/$tfile- 1"
782 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
783 last="rmdir $DIR/$tdir/$tfile-0"
784 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.3 failed"
787 run_test 7b "create, {lost}, unlink"
790 first="createmany -o $DIR/$tdir/$tfile- 1"
791 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
792 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
793 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.1 failed"
795 first="createmany -o $DIR/$tdir/$tfile- 2"
796 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
797 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
798 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.2 failed"
800 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile-1-0"
801 lost="rmdir $MOUNT2/$tdir/$tfile-1-0; createmany -o $MOUNT2/$tdir/$tfile-1- 1"
802 last="mv $DIR/$tdir/$tfile-1-0 $DIR/$tdir/$tfile-0"
803 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.3 failed"
805 first="createmany -o $DIR/$tdir/$tfile- 1"
806 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile"
807 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-0"
808 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.4 failed"
811 run_test 7c "create, {lost}, rename"
814 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
815 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0"
816 last="createmany -o $DIR/$tdir/$tfile- 1"
817 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.1 failed"
819 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
820 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0"
821 last="mkdir $DIR/$tdir/$tfile-0"
822 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.2 failed"
824 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
825 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
826 last="createmany -o $DIR/$tdir/$tfile- 1"
827 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.3 failed"
830 run_test 7d "unlink, {lost}, create"
833 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
834 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0;createmany -o $MOUNT2/$tdir/$tfile- 1"
835 last="rm $DIR/$tdir/$tfile-0"
836 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.1 failed"
838 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
839 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
840 last="rmdir $DIR/$tdir/$tfile-0"
841 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.2 failed"
843 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
844 lost="mkdir $MOUNT2/$tdir/$tfile-0"
845 last="rmdir $DIR/$tdir/$tfile-0"
846 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.3 failed"
848 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
849 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
850 last="rm $DIR/$tdir/$tfile-0"
851 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.4 failed"
853 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
854 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
855 last="rm $DIR/$tdir/$tfile-0"
856 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.5 failed"
859 run_test 7e "unlink, {lost}, unlink"
862 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
863 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
864 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
865 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.1 failed"
867 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
868 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
869 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
870 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.2 failed"
872 first="mkdir $DIR/$tdir/$tfile; createmany -o $DIR/$tdir/$tfile- 1; rmdir $DIR/$tdir/$tfile"
873 lost="mkdir $MOUNT2/$tdir/$tfile"
874 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
875 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.3 failed"
877 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
878 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
879 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
880 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.4 failed"
882 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
883 lost="mkdir $MOUNT2/$tdir/$tfile-0"
884 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
885 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.5 failed"
888 run_test 7f "unlink, {lost}, rename"
891 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
892 lost="mkdir $MOUNT2/$tdir/$tfile-0;rmdir $MOUNT2/$tdir/$tfile-0"
893 last="createmany -o $DIR/$tdir/$tfile- 1"
894 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.1 failed"
896 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
897 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0"
898 last="mkdir $DIR/$tdir/$tfile-0"
899 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.2 failed"
901 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
902 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
903 last="link $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
904 if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.1) ]
906 test_7_cycle "$first" "$lost" "$last" ||
907 error "Test 7g.3 failed"
908 else #LU-4442 LU-3528
909 test_7_cycle "$first" "$lost" "$last" &&
910 error "Test 7g.3 failed"
914 run_test 7g "rename, {lost}, create"
917 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
918 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
919 last="rm $DIR/$tdir/$tfile-0"
920 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.1 failed"
922 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
923 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
924 last="rm $DIR/$tdir/$tfile-0"
925 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.2 failed"
927 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
928 lost="rm $MOUNT2/$tdir/$tfile/$tfile-0"
929 last="rmdir $DIR/$tdir/$tfile"
930 #test_7_cycle "$first" "$lost" "$last" || error "Test 7h.3 failed"
933 run_test 7h "rename, {lost}, unlink"
936 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
937 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
938 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
939 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
941 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
942 lost="mkdir $MOUNT2/$tdir/$tfile-0"
943 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
944 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
946 first="createmany -o $DIR/$tdir/$tfile- 3; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
947 lost="mv $MOUNT2/$tdir/$tfile-2 $MOUNT2/$tdir/$tfile-0"
948 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-2"
949 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.3 failed"
951 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
952 lost="rm $MOUNT2/$tdir/$tfile-1"
953 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-1"
954 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.4 failed"
957 run_test 7i "rename, {lost}, rename"
959 # test set #8: orphan handling bug 15392.
960 # Unlink during recovery creates orphan always just in case some late open may
961 # arrive. These orphans will be removed after recovery anyway.
962 # Tests check that valid create,unlink,create sequence will work in this case
963 # too but not fail on second create due to orphan found.
966 local var=${SINGLEMDS}_svc
967 zconf_mount $CLIENT2 $MOUNT2
969 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
971 do_node $CLIENT1 mcreate $DIR/$tfile
972 do_node $CLIENT1 mkdir $DIR/$tfile-2
973 replay_barrier $SINGLEMDS
974 # missed replay from client2 will lead to recovery by versions
975 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
976 do_node $CLIENT1 rm $DIR/$tfile || return 1
977 do_node $CLIENT1 touch $DIR/$tfile || return 2
979 zconf_umount $CLIENT2 $MOUNT2
980 facet_failover $SINGLEMDS
981 client_up $CLIENT1 || return 6
983 do_node $CLIENT1 rm $DIR/$tfile || error "$tfile doesn't exists"
986 run_test 8a "create | unlink, create shouldn't fail"
989 local var=${SINGLEMDS}_svc
990 zconf_mount $CLIENT2 $MOUNT2
992 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
994 do_node $CLIENT1 touch $DIR/$tfile
995 do_node $CLIENT1 mkdir $DIR/$tfile-2
996 replay_barrier $SINGLEMDS
997 # missed replay from client2 will lead to recovery by versions
998 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
999 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
1000 do_node $CLIENT1 mcreate $MOUNT1/$tfile || return 2
1002 zconf_umount $CLIENT2 $MOUNT2
1003 facet_failover $SINGLEMDS
1004 client_up $CLIENT1 || return 6
1006 do_node $CLIENT1 rm $MOUNT1/$tfile || error "$tfile doesn't exists"
1009 run_test 8b "create | unlink, create shouldn't fail"
1012 local var=${SINGLEMDS}_svc
1013 zconf_mount $CLIENT2 $MOUNT2
1015 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1017 do_node $CLIENT1 touch $DIR/$tfile
1018 do_node $CLIENT1 mkdir $DIR/$tfile-2
1019 replay_barrier $SINGLEMDS
1020 # missed replay from client2 will lead to recovery by versions
1021 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
1022 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
1023 do_node $CLIENT1 mkdir $MOUNT1/$tfile || return 2
1025 zconf_umount $CLIENT2 $MOUNT2
1026 facet_failover $SINGLEMDS
1027 client_up $CLIENT1 || return 6
1029 do_node $CLIENT1 rmdir $MOUNT1/$tfile || error "$tfile doesn't exists"
1032 run_test 8c "create | unlink, create shouldn't fail"
1035 # This test uses three Lustre clients on two hosts.
1037 # Lustre Client 1: $CLIENT1:$MOUNT ($DIR)
1038 # Lustre Client 2: $CLIENT2:$MOUNT2 ($DIR2)
1039 # Lustre Client 3: $CLIENT2:$MOUNT1 ($DIR1)
1041 test_10b() { # former test_2b
1044 local var=${SINGLEMDS}_svc
1046 [ -n "$CLIENTS" ] || { skip "Need two or more clients" && exit 0; }
1047 [ $CLIENTCOUNT -ge 2 ] || \
1048 { skip "Need two or more clients, have $CLIENTCOUNT" && exit 0; }
1050 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
1051 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1053 zconf_mount $CLIENT1 $MOUNT
1054 zconf_mount $CLIENT2 $MOUNT1
1055 zconf_mount $CLIENT2 $MOUNT2
1056 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-a
1057 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-b
1060 # Save an MDT transaction number before recovery.
1062 do_node $CLIENT1 touch $DIR1/$tfile
1063 pre=$(get_version $CLIENT1 $DIR/$tfile)
1066 # Comments on the replay sequence state the expected result
1070 # "U" Unable to replay.
1073 replay_barrier $SINGLEMDS
1074 do_node $CLIENT1 chmod 666 $DIR/$tfile-a # R
1075 do_node $CLIENT2 chmod 666 $DIR1/$tfile-b # R
1076 do_node $CLIENT2 chgrp $RUNAS_GID $DIR2/$tfile-a # U
1077 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-a # J
1078 do_node $CLIENT2 $TRUNCATE $DIR2/$tfile-b 1 # U
1079 do_node $CLIENT2 chgrp $RUNAS_GID $DIR1/$tfile-b # R
1080 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-b # R
1081 zconf_umount $CLIENT2 $MOUNT2
1082 facet_failover $SINGLEMDS
1084 client_evicted $CLIENT1 || error "$CLIENT1:$MOUNT not evicted"
1085 client_up $CLIENT2 || error "$CLIENT2:$MOUNT1 evicted"
1088 # Check the MDT epoch. $post must be the first transaction
1089 # number assigned after recovery.
1091 do_node $CLIENT2 chmod 666 $DIR1/$tfile
1092 post=$(get_version $CLIENT2 $DIR1/$tfile)
1093 if (($(($pre >> 32)) == $((post >> 32)))); then
1094 error "epoch not changed: pre $pre, post $post"
1097 if (($(($post & 0x00000000ffffffff)) != 1)); then
1098 error "transno should restart from one: got $post"
1101 do_node $CLIENT2 stat $DIR1/$tfile-a
1102 do_node $CLIENT2 stat $DIR1/$tfile-b
1104 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$UID -g \\\#$UID \
1105 $DIR1/$tfile-a || error "$DIR/$tfile-a: unexpected state"
1106 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$RUNAS_ID -g \\\#$RUNAS_GID \
1107 $DIR1/$tfile-b || error "$DIR/$tfile-b: unexpected state"
1109 zconf_umount $CLIENT2 $MOUNT1
1111 run_test 10b "3 clients: some, none, and all reqs replayed"
1113 # test set #11: operations in single directory
1115 local var=${SINGLEMDS}_svc
1116 zconf_mount $CLIENT2 $MOUNT2
1118 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1120 replay_barrier $SINGLEMDS
1122 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1124 do_node $CLIENT2 createmany -o $MOUNT2/$tfile-2- 100
1125 zconf_umount $CLIENT2 $MOUNT2
1128 facet_failover $SINGLEMDS
1129 # recovery shouldn't fail due to missing client 2
1130 client_up $CLIENT1 || return 1
1131 # All files from client1 should have been replayed
1132 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1134 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1137 run_test 11a "concurrent creates don't affect each other"
1140 local var=${SINGLEMDS}_svc
1141 zconf_mount $CLIENT2 $MOUNT2
1143 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1145 do_node $CLIENT2 createmany -o $MOUNT2/$tfile-2- 100
1147 replay_barrier $SINGLEMDS
1148 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1150 do_node $CLIENT2 unlinkmany -o $MOUNT2/$tfile-2- 100
1151 zconf_umount $CLIENT2 $MOUNT2
1154 facet_failover $SINGLEMDS
1155 # recovery shouldn't fail due to missing client 2
1156 client_up $CLIENT1 || return 1
1157 # All files from client1 should have been replayed
1158 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1160 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1163 run_test 11b "concurrent creates and unlinks don't affect each other"
1165 # test set #12: lock replay with VBR, bug 16356
1166 test_12a() { # former test_2a
1167 local var=${SINGLEMDS}_svc
1168 zconf_mount $CLIENT2 $MOUNT2
1170 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1172 do_node $CLIENT2 mkdir -p $MOUNT2/$tdir
1173 replay_barrier $SINGLEMDS
1174 do_node $CLIENT2 mcreate $MOUNT2/$tdir/$tfile
1175 do_node $CLIENT1 createmany -o $DIR/$tfile- 25
1176 #client1 read data from client2 which will be lost
1177 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile
1178 do_node $CLIENT1 createmany -o $DIR/$tfile-3- 25
1179 zconf_umount $CLIENT2 $MOUNT2
1181 facet_failover $SINGLEMDS
1182 # recovery shouldn't fail due to missing client 2
1183 client_up $CLIENT1 || return 1
1185 # All 50 files should have been replayed
1186 do_node $CLIENT1 unlinkmany $DIR/$tfile- 25 || return 2
1187 do_node $CLIENT1 unlinkmany $DIR/$tfile-3- 25 || return 3
1188 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile && return 4
1192 run_test 12a "lost data due to missed REMOTE client during replay"
1194 test_13() { # LU-8826
1195 local var=${SINGLEMDS}_svc
1197 if combined_mgs_mds ; then
1198 skip "Needs separate MGS to enable IR"
1202 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
1203 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1205 zconf_mount $CLIENT2 $MOUNT2
1206 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile
1208 # set ir_timeout to a reasonable small value
1209 local ir_timeout=$(do_facet mgs $LCTL get_param -n mgs.*.ir_timeout)
1210 do_facet mgs $LCTL set_param mgs.*.ir_timeout=5
1211 # make sure IR functional
1214 replay_barrier $SINGLEMDS
1215 do_node $CLIENT1 chmod 666 $DIR/$tfile
1216 do_node $CLIENT2 chmod 777 $DIR2/$tfile
1218 # make sure client data of $CLIENT2:$MOUNT2 is remained
1219 # define OBD_FAIL_TGT_CLIENT_DEL 0x718
1220 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x718
1221 zconf_umount $CLIENT2 $MOUNT2
1222 # define OBD_FAIL_TGT_SLUGGISH_NET 0x719
1223 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x719
1224 facet_failover $SINGLEMDS
1226 client_up $CLIENT1 || error "$CLIENT1 evicted"
1228 do_facet $SINGLEMDS $LCTL set_param fail_loc=0
1229 do_facet mgs $LCTL set_param mgs.*.ir_timeout=$ir_timeout
1231 do_node $CLIENT1 $CHECKSTAT -p 0666 $DIR/$tfile ||
1232 error "$DIR/$tfile-a: unexpected state"
1234 run_test 13 "Shouldn't give up VBR easily on sluggish network"
1236 #restore COS setting
1237 restore_lustre_params < $cos_param_file
1238 rm -f $cos_param_file
1240 [ "$CLIENTS" ] && zconf_mount_clients $CLIENTS $DIR
1243 check_and_cleanup_lustre