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"
10 case "$(lsb_release -sr)" in # only disable tests for el7
11 7*) # bug number: LU-6455
12 ALWAYS_EXCEPT="$ALWAYS_EXCEPT 4i 4j 4k 10b"
17 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
20 MOUNT_2=${MOUNT_2:-"yes"}
21 export MULTIOP=${MULTIOP:-multiop}
22 . $LUSTRE/tests/test-framework.sh
24 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
27 remote_mds_nodsh && log "SKIP: remote MDS with nodsh" && exit 0
30 [ "$SLOW" = "no" ] && EXCEPT_SLOW="7"
34 check_and_setup_lustre
37 rm -rf $DIR/[df][0-9]*
39 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
41 # if there is no CLIENT1 defined, some tests can be ran on localhost
42 CLIENT1=${CLIENT1:-$HOSTNAME}
43 # if CLIENT2 doesn't exist then use CLIENT1 instead
44 # All tests should use CLIENT2 with MOUNT2 only therefore it will work if
46 # Exception is the test which need two separate nodes
47 CLIENT2=${CLIENT2:-$CLIENT1}
49 is_mounted $MOUNT2 || error "MOUNT2 is not mounted"
56 # We need to run do_node in bg, because pdsh does not exit
57 # if child process of run script exists.
58 # I.e. pdsh does not exit when runmultiop_bg_pause exited,
59 # because of multiop_bg_pause -> $MULTIOP_PROG &
60 # By the same reason we need sleep a bit after do_nodes starts
61 # to let runmultiop_bg_pause start muliop and
62 # update /tmp/multiop_bg.pid ;
63 # The rm /tmp/multiop_bg.pid guarantees here that
64 # we have the updated by runmultiop_bg_pause
65 # /tmp/multiop_bg.pid file
67 local pid_file=$TMP/multiop_bg.pid.$$
68 do_node $client "MULTIOP_PID_FILE=$pid_file LUSTRE= runmultiop_bg_pause $file $cmds" &
72 multiop_pid=$(do_node $client cat $pid_file)
73 [ -n "$multiop_pid" ] || error "$client : Can not get multiop_pid from $pid_file "
74 eval export $(node_var_name $client)_multiop_pid=$multiop_pid
75 eval export $(node_var_name $client)_do_node_pid=$pid
76 local var=$(node_var_name $client)_multiop_pid
77 echo client $client multiop_bg started multiop_pid=${!var}
83 local multiop_pid=$(node_var_name $client)_multiop_pid
84 local do_node_pid=$(node_var_name $client)_do_node_pid
86 echo "Stopping multiop_pid=${!multiop_pid} (kill ${!multiop_pid} on $client)"
87 do_node $client kill -USR1 ${!multiop_pid}
93 local var=${SINGLEMDS}_svc
98 fid=$(do_node $client $LFS path2fid $file)
99 do_facet $SINGLEMDS $LCTL --device ${!var} getobjversion \\\"$fid\\\"
103 cos_param_file=$TMP/rvbr-cos-params
104 save_lustre_params $(get_facets MDS) "mdt.*.commit_on_sharing" > $cos_param_file
107 get_version $CLIENT1 $DIR/$tdir/1a || true
109 run_test 0a "getversion for non existent file shouldn't cause kernel panic"
112 local var=${SINGLEMDS}_svc
114 local file=$DIR/$tdir/f
116 do_node $CLIENT1 mkdir -p $DIR/$tdir/
117 do_node $CLIENT1 touch $file
118 fid=$(do_node $CLIENT1 $LFS path2fid $file)
119 do_node $CLIENT1 rm -rf $file
120 do_facet $SINGLEMDS $LCTL --device ${!var} getobjversion \\\"$fid\\\" || true
122 run_test 0b "getversion for non existent fid shouldn't cause kernel panic"
125 test_1a() { # former test_0a
126 local file=$DIR/$tfile
130 do_node $CLIENT1 mcreate $file
131 pre=$(get_version $CLIENT1 $file)
132 do_node $CLIENT1 openfile -f O_RDWR $file
133 post=$(get_version $CLIENT1 $file)
134 if (($pre != $post)); then
135 error "version changed unexpectedly: pre $pre, post $post"
138 run_test 1a "open and close do not change versions"
140 test_1b() { # former test_0b
141 local var=${SINGLEMDS}_svc
142 zconf_mount $CLIENT2 $MOUNT2
144 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
145 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
146 do_node $CLIENT1 mkdir -p -m 755 $MOUNT/$tdir
148 replay_barrier $SINGLEMDS
149 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
150 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT $MOUNT/$tdir/$tfile
151 zconf_umount $CLIENT2 $MOUNT2
152 facet_failover $SINGLEMDS
154 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
155 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
156 error_and_remount "open succeeded unexpectedly"
159 run_test 1b "open (O_CREAT) checks version of parent"
161 test_1c() { # former test_0c
162 local var=${SINGLEMDS}_svc
163 zconf_mount $CLIENT2 $MOUNT2
165 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
166 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
168 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
169 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tdir/$tfile
171 replay_barrier $SINGLEMDS
172 do_node $CLIENT2 chmod 0777 $MOUNT2/$tdir
173 do_node $CLIENT2 chmod 0666 $MOUNT2/$tdir/$tfile
174 rmultiop_start $CLIENT1 $DIR/$tdir/$tfile o_c
175 zconf_umount $CLIENT2 $MOUNT2
176 facet_failover $SINGLEMDS
178 client_up $CLIENT1 || error "$CLIENT1 evicted"
179 rmultiop_stop $CLIENT1 || error "close failed"
181 run_test 1c "open (non O_CREAT) does not checks versions"
183 # test set #2: CREAT (not open)
184 # - version of parent is not changed but checked
185 # - pre-version should be -1
186 # - post-version should be valid
187 test_2a() { # extended former test_0d
192 pre=$(get_version $CLIENT1 $DIR)
193 do_node $CLIENT1 mkfifo $DIR/$tfile-fifo
194 post=$(get_version $CLIENT1 $DIR)
195 if (($pre != $post)); then
196 error "version was changed: pre $pre, post $post"
199 pre=$(get_version $CLIENT1 $DIR)
200 do_node $CLIENT1 mkdir $DIR/$tfile-dir
201 post=$(get_version $CLIENT1 $DIR)
202 if (($pre != $post)); then
203 error "version was changed: pre $pre, post $post"
205 do_node $CLIENT1 rmdir $DIR/$tfile-dir
208 pre=$(get_version $CLIENT1 $DIR)
209 do_node $CLIENT1 mkfifo $DIR/$tfile-nod
210 post=$(get_version $CLIENT1 $DIR)
211 if (($pre != $post)); then
212 error "version was changed: pre $pre, post $post"
215 pre=$(get_version $CLIENT1 $DIR)
216 do_node $CLIENT1 mkfifo $DIR/$tfile-symlink
217 post=$(get_version $CLIENT1 $DIR)
218 if (($pre != $post)); then
219 error "version was changed: pre $pre, post $post"
222 if [ $MDSCOUNT -ge 2 ]; then
225 pre=$(get_version $CLIENT1 $DIR)
226 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
227 post=$(get_version $CLIENT1 $DIR)
228 if (($pre != $post)); then
229 error "version was changed: pre $pre, post $post"
232 do_node $CLIENT1 rm -rf $DIR/$tfile-*
235 run_test 2a "create operations doesn't change version of parent"
237 test_2b() { # former test_0e
238 local var=${SINGLEMDS}_svc
239 zconf_mount $CLIENT2 $MOUNT2
241 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
242 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
244 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
246 replay_barrier $SINGLEMDS
247 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
248 do_node $CLIENT1 mkfifo $DIR/$tdir/$tfile
249 zconf_umount $CLIENT2 $MOUNT2
250 facet_failover $SINGLEMDS
252 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
253 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
254 error_and_remount "create succeeded unexpectedly"
257 run_test 2b "create checks version of parent"
259 test_3a() { # former test_0f
263 do_node $CLIENT1 mcreate $DIR/$tfile
264 pre=$(get_version $CLIENT1 $DIR)
265 do_node $CLIENT1 rm $DIR/$tfile
266 post=$(get_version $CLIENT1 $DIR)
267 if (($pre != $post)); then
268 error "version was changed: pre $pre, post $post"
271 if [ $MDSCOUNT -ge 2 ]; then
274 do_node $CLIENT1 $LFS mkdir -i $MDT_IDX $DIR/$tfile-remote_dir
275 pre=$(get_version $CLIENT1 $DIR)
276 do_node $CLIENT1 rmdir $DIR/$tfile-remote_dir
277 post=$(get_version $CLIENT1 $DIR)
278 if (($pre != $post)); then
279 error "version was changed: pre $pre, post $post"
283 run_test 3a "unlink doesn't change version of parent"
285 test_3b() { # former test_0g
286 local var=${SINGLEMDS}_svc
287 zconf_mount $CLIENT2 $MOUNT2
289 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
290 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
292 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
293 do_node $CLIENT1 mcreate $DIR/$tdir/$tfile
295 replay_barrier $SINGLEMDS
296 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
297 do_node $CLIENT1 rm $DIR/$tdir/$tfile
298 zconf_umount $CLIENT2 $MOUNT2
299 facet_failover $SINGLEMDS
301 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
302 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
303 error_and_remount "unlink succeeded unexpectedly"
306 run_test 3b "unlink checks version of parent"
308 test_4a() { # former test_0h
309 local file=$DIR/$tfile
313 do_node $CLIENT1 mcreate $file
314 pre=$(get_version $CLIENT1 $file)
315 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
316 post=$(get_version $CLIENT1 $file)
317 if (($pre == $post)); then
318 error "version not changed: pre $pre, post $post"
321 run_test 4a "setattr of UID changes versions"
323 test_4b() { # former test_0i
324 local file=$DIR/$tfile
328 do_node $CLIENT1 mcreate $file
329 pre=$(get_version $CLIENT1 $file)
330 do_node $CLIENT1 chgrp $RUNAS_GID $file
331 post=$(get_version $CLIENT1 $file)
332 if (($pre == $post)); then
333 error "version not changed: pre $pre, post $post"
336 run_test 4b "setattr of GID changes versions"
338 test_4c() { # former test_0j
339 local file=$DIR/$tfile
340 local var=${SINGLEMDS}_svc
341 zconf_mount $CLIENT2 $MOUNT2
343 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
344 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
346 do_node $CLIENT1 mcreate $file
348 replay_barrier $SINGLEMDS
349 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
350 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $file
351 zconf_umount $CLIENT2 $MOUNT2
352 facet_failover $SINGLEMDS
354 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
355 if ! do_node $CLIENT1 $CHECKSTAT -u \\\#$UID $file; then
356 error_and_remount "setattr of UID succeeded unexpectedly"
359 run_test 4c "setattr of UID checks versions"
361 test_4d() { # former test_0k
362 local file=$DIR/$tfile
363 local var=${SINGLEMDS}_svc
364 zconf_mount $CLIENT2 $MOUNT2
366 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
367 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
369 do_node $CLIENT1 mcreate $file
371 replay_barrier $SINGLEMDS
372 do_node $CLIENT2 chown $RUNAS_ID:$RUNAS_GID $MOUNT2/$tfile
373 do_node $CLIENT1 chgrp $RUNAS_GID $file
374 zconf_umount $CLIENT2 $MOUNT2
375 facet_failover $SINGLEMDS
377 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
378 if ! do_node $CLIENT1 $CHECKSTAT -g \\\#$UID $file; then
379 error_and_remount "setattr of GID succeeded unexpectedly"
382 run_test 4d "setattr of GID checks versions"
384 test_4e() { # former test_0l
385 local file=$DIR/$tfile
389 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
390 pre=$(get_version $CLIENT1 $file)
391 do_node $CLIENT1 chmod 666 $file
392 post=$(get_version $CLIENT1 $file)
393 if (($pre == $post)); then
394 error "version not changed: pre $pre, post $post"
397 run_test 4e "setattr of permission changes versions"
399 test_4f() { # former test_0m
400 local file=$DIR/$tfile
401 local var=${SINGLEMDS}_svc
402 zconf_mount $CLIENT2 $MOUNT2
404 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
405 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
407 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
409 replay_barrier $SINGLEMDS
410 do_node $CLIENT2 chgrp $RUNAS_GID $MOUNT2/$tfile
411 do_node $CLIENT1 chmod 666 $file
412 zconf_umount $CLIENT2 $MOUNT2
413 facet_failover $SINGLEMDS
415 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
416 if ! do_node $CLIENT1 $CHECKSTAT -p 0644 $file; then
417 error_and_remount "setattr of permission succeeded unexpectedly"
420 run_test 4f "setattr of permission checks versions"
422 test_4g() { # former test_0n
423 local file=$DIR/$tfile
427 do_node $CLIENT1 mcreate $file
428 pre=$(get_version $CLIENT1 $file)
429 do_node $CLIENT1 chattr +i $file
430 post=$(get_version $CLIENT1 $file)
431 do_node $CLIENT1 chattr -i $file
432 if (($pre == $post)); then
433 error "version not changed: pre $pre, post $post"
436 run_test 4g "setattr of flags changes versions"
444 if ((${#attr} != 1)); then
445 error "checking multiple attributes not implemented yet"
447 do_node $client lsattr $file | cut -d ' ' -f 1 | grep -q $attr
450 test_4h() { # former test_0o
451 local file=$DIR/$tfile
453 local var=${SINGLEMDS}_svc
454 zconf_mount $CLIENT2 $MOUNT2
456 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
457 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
459 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
461 replay_barrier $SINGLEMDS
462 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
463 do_node $CLIENT1 chattr +i $file
464 zconf_umount $CLIENT2 $MOUNT2
465 facet_failover $SINGLEMDS
467 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
468 checkattr $CLIENT1 i $file
470 do_node $CLIENT1 chattr -i $file
471 if [ $rc -eq 0 ]; then
472 error "setattr of flags succeeded unexpectedly"
475 run_test 4h "setattr of flags checks versions"
477 test_4i() { # former test_0p
478 local file=$DIR/$tfile
482 local var=${SINGLEMDS}_svc
484 ad_orig=$(do_facet $SINGLEMDS "$LCTL get_param mdd.${!var}.atime_diff")
485 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
486 do_node $CLIENT1 mcreate $file
487 pre=$(get_version $CLIENT1 $file)
488 do_node $CLIENT1 touch $file
489 post=$(get_version $CLIENT1 $file)
491 # We don't fail MDS in this test. atime_diff shall be
492 # restored to its original value.
494 do_facet $SINGLEMDS "$LCTL set_param $ad_orig"
495 if (($pre != $post)); then
496 error "version changed unexpectedly: pre $pre, post $post"
499 run_test 4i "setattr of times does not change versions"
501 test_4j() { # former test_0q
502 local file=$DIR/$tfile
506 do_node $CLIENT1 mcreate $file
507 pre=$(get_version $CLIENT1 $file)
508 do_node $CLIENT1 $TRUNCATE $file 1
509 post=$(get_version $CLIENT1 $file)
510 if (($pre != $post)); then
511 error "version changed unexpectedly: pre $pre, post $post"
514 run_test 4j "setattr of size does not change versions"
516 test_4k() { # former test_0r
517 local file=$DIR/$tfile
521 local var=${SINGLEMDS}_svc
522 zconf_mount $CLIENT2 $MOUNT2
524 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
525 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.atime_diff=0"
526 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
528 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $file
530 replay_barrier $SINGLEMDS
531 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
532 do_node $CLIENT1 $TRUNCATE $file 1
534 mtime_pre=$(do_node $CLIENT1 stat --format=%Y $file)
535 do_node $CLIENT1 touch $file
536 sleep 1 # avoid stat caching
537 mtime_post=$(do_node $CLIENT1 stat --format=%Y $file)
538 zconf_umount $CLIENT2 $MOUNT2
539 facet_failover $SINGLEMDS
541 client_up $CLIENT1 || error "$CLIENT1 evicted"
542 if (($mtime_pre >= $mtime_post)); then
543 error "time not changed: pre $mtime_pre, post $mtime_post"
545 if ! do_node $CLIENT1 $CHECKSTAT -s 1 $file; then
546 error_and_remount "setattr of size failed"
548 mtime=$(do_node $CLIENT1 stat --format=%Y $file)
549 if (($mtime != $mtime_post)); then
550 error "setattr of times failed: expected $mtime_post, got $mtime"
553 run_test 4k "setattr of times and size does not check versions"
555 test_5a() { # former test_0s
561 do_node $CLIENT1 mcreate $DIR/$tfile
562 do_node $CLIENT1 mkdir -p $DIR/$tdir
563 pre=$(get_version $CLIENT1 $DIR/$tfile)
564 tp_pre=$(get_version $CLIENT1 $DIR/$tdir)
565 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
566 post=$(get_version $CLIENT1 $DIR/$tfile)
567 tp_post=$(get_version $CLIENT1 $DIR/$tdir)
568 if (($pre == $post)); then
569 error "version of source not changed: pre $pre, post $post"
571 if (($tp_pre != $tp_post)); then
572 error "version of target parent was changed: pre $tp_pre, post $tp_post"
575 run_test 5a "link changes versions of source but not target parent"
577 test_5b() { # former test_0t
578 local var=${SINGLEMDS}_svc
579 zconf_mount $CLIENT2 $MOUNT2
581 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
582 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
584 do_node $CLIENT1 mcreate $DIR/$tfile
585 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
587 replay_barrier $SINGLEMDS
588 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
589 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
590 zconf_umount $CLIENT2 $MOUNT2
591 facet_failover $SINGLEMDS
593 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
594 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
595 error_and_remount "link should fail"
598 run_test 5b "link checks version of target parent"
600 test_5c() { # former test_0u
601 local var=${SINGLEMDS}_svc
602 zconf_mount $CLIENT2 $MOUNT2
604 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
605 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
607 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile
608 do_node $CLIENT1 mkdir -p $DIR/$tdir
610 replay_barrier $SINGLEMDS
611 do_node $CLIENT2 chmod 666 $MOUNT2/$tfile
612 do_node $CLIENT1 link $DIR/$tfile $DIR/$tdir/$tfile
613 zconf_umount $CLIENT2 $MOUNT2
614 facet_failover $SINGLEMDS
616 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
617 if ! do_node $CLIENT1 $CHECKSTAT -a $DIR/$tdir/$tfile; then
618 error_and_remount "link should fail"
621 run_test 5c "link checks version of source"
623 test_6a() { # former test_0v
629 do_node $CLIENT1 mcreate $DIR/$tfile
630 do_node $CLIENT1 mkdir -p $DIR/$tdir
631 sp_pre=$(get_version $CLIENT1 $DIR)
632 tp_pre=$(get_version $CLIENT1 $DIR/$tdir)
633 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
634 sp_post=$(get_version $CLIENT1 $DIR)
635 tp_post=$(get_version $CLIENT1 $DIR/$tdir)
636 if (($sp_pre != $sp_post)); then
637 error "version of source parent was changed: pre $sp_pre, post $sp_post"
639 if (($tp_pre != $tp_post)); then
640 error "version of target parent was changed: pre $tp_pre, post $tp_post"
643 run_test 6a "rename doesn't change versions of source parent and target parent"
645 test_6b() { # former test_0w
649 do_node $CLIENT1 mcreate $DIR/$tfile
650 pre=$(get_version $CLIENT1 $DIR)
651 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tfile-new
652 post=$(get_version $CLIENT1 $DIR)
653 if (($pre != $post)); then
654 error "version of parent was changed: pre $pre, post $post"
657 run_test 6b "rename within same dir doesn't change version of parent"
659 test_6c() { # former test_0x
660 local var=${SINGLEMDS}_svc
661 zconf_mount $CLIENT2 $MOUNT2
663 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
664 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
666 do_node $CLIENT1 mcreate $DIR/$tfile
667 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
669 replay_barrier $SINGLEMDS
670 do_node $CLIENT2 chmod 777 $MOUNT2
671 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
672 zconf_umount $CLIENT2 $MOUNT2
673 facet_failover $SINGLEMDS
675 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
676 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
677 error_and_remount "rename should fail"
680 run_test 6c "rename checks version of source parent"
682 test_6d() { # former test_0y
683 local var=${SINGLEMDS}_svc
684 zconf_mount $CLIENT2 $MOUNT2
686 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
687 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
689 do_node $CLIENT1 mcreate $DIR/$tfile
690 do_node $CLIENT1 mkdir -p -m 755 $DIR/$tdir
692 replay_barrier $SINGLEMDS
693 do_node $CLIENT2 chmod 777 $MOUNT2/$tdir
694 do_node $CLIENT1 mv $DIR/$tfile $DIR/$tdir/$tfile
695 zconf_umount $CLIENT2 $MOUNT2
696 facet_failover $SINGLEMDS
698 client_evicted $CLIENT1 || error "$CLIENT1 not evicted"
699 if do_node $CLIENT1 $CHECKSTAT -a $DIR/$tfile; then
700 error_and_remount "rename should fail"
703 run_test 6d "rename checks version of target parent"
705 # pdirops tests, bug 18143
712 local var=${SINGLEMDS}_svc
713 zconf_mount $CLIENT2 $MOUNT2
715 local cname=$TESTNAME.$cycle
717 echo "start cycle: $cname"
718 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
719 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
721 do_node $CLIENT1 mkdir -p $DIR/$tdir
722 replay_barrier $SINGLEMDS
724 echo "$cname first: $first"
725 do_node $CLIENT1 $first || error "$cname: Cannot do first operation"
726 # client2 operations that will be lost
727 echo "$cname lost: $lost"
728 do_node $CLIENT2 $lost || error "$cname: Cannot do 'lost' operations"
730 echo "$cname last: $last"
731 do_node $CLIENT1 $last || error "$cname: Cannot do last operation"
732 zconf_umount $CLIENT2 $MOUNT2
733 facet_failover $SINGLEMDS
734 # should fail as conflict expected
735 client_evicted $CLIENT1 || rc=1
737 wait_recovery_complete $SINGLEMDS
738 wait_mds_ost_sync || error "wait_mds_ost_sync failed"
745 first="createmany -o $DIR/$tdir/$tfile- 1"
746 lost="rm $MOUNT2/$tdir/$tfile-0"
747 last="createmany -o $DIR/$tdir/$tfile- 1"
748 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.1 failed"
750 first="createmany -o $DIR/$tdir/$tfile- 1"
751 lost="rm $MOUNT2/$tdir/$tfile-0"
752 last="mkdir $DIR/$tdir/$tfile-0"
753 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.2 failed"
755 first="mkdir $DIR/$tdir/$tfile-0"
756 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
757 last="createmany -o $DIR/$tdir/$tfile- 1"
758 test_7_cycle "$first" "$lost" "$last" || error "Test 7a.3 failed"
761 run_test 7a "create, {lost}, create"
764 first="createmany -o $DIR/$tdir/$tfile- 1"
765 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
766 last="rm $DIR/$tdir/$tfile-0"
767 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.1 failed"
769 first="createmany -o $DIR/$tdir/$tfile- 1"
770 lost="touch $MOUNT2/$tdir/$tfile; mv $MOUNT2/$tdir/$tfile $MOUNT2/$tdir/$tfile-0"
771 last="rm $DIR/$tdir/$tfile-0"
772 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.2 failed"
774 first="createmany -o $DIR/$tdir/$tfile- 1"
775 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
776 last="rmdir $DIR/$tdir/$tfile-0"
777 test_7_cycle "$first" "$lost" "$last" || error "Test 7b.3 failed"
780 run_test 7b "create, {lost}, unlink"
783 first="createmany -o $DIR/$tdir/$tfile- 1"
784 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
785 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
786 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.1 failed"
788 first="createmany -o $DIR/$tdir/$tfile- 2"
789 lost="rm $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
790 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
791 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.2 failed"
793 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile-1-0"
794 lost="rmdir $MOUNT2/$tdir/$tfile-1-0; createmany -o $MOUNT2/$tdir/$tfile-1- 1"
795 last="mv $DIR/$tdir/$tfile-1-0 $DIR/$tdir/$tfile-0"
796 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.3 failed"
798 first="createmany -o $DIR/$tdir/$tfile- 1"
799 lost="mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile"
800 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-0"
801 test_7_cycle "$first" "$lost" "$last" || error "Test 7c.4 failed"
804 run_test 7c "create, {lost}, rename"
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"
809 last="createmany -o $DIR/$tdir/$tfile- 1"
810 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.1 failed"
812 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
813 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0"
814 last="mkdir $DIR/$tdir/$tfile-0"
815 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.2 failed"
817 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
818 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; mv $MOUNT2/$tdir/$tfile-0 $MOUNT2/$tdir/$tfile-1"
819 last="createmany -o $DIR/$tdir/$tfile- 1"
820 test_7_cycle "$first" "$lost" "$last" && error "Test 7d.3 failed"
823 run_test 7d "unlink, {lost}, create"
826 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
827 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0;createmany -o $MOUNT2/$tdir/$tfile- 1"
828 last="rm $DIR/$tdir/$tfile-0"
829 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.1 failed"
831 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
832 lost="mkdir $MOUNT2/$tdir/$tfile-0; rmdir $MOUNT2/$tdir/$tfile-0; mkdir $MOUNT2/$tdir/$tfile-0"
833 last="rmdir $DIR/$tdir/$tfile-0"
834 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.2 failed"
836 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
837 lost="mkdir $MOUNT2/$tdir/$tfile-0"
838 last="rmdir $DIR/$tdir/$tfile-0"
839 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.3 failed"
841 first="mkdir $DIR/$tdir/$tfile-0; rmdir $DIR/$tdir/$tfile-0"
842 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
843 last="rm $DIR/$tdir/$tfile-0"
844 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.4 failed"
846 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
847 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
848 last="rm $DIR/$tdir/$tfile-0"
849 test_7_cycle "$first" "$lost" "$last" || error "Test 7e.5 failed"
852 run_test 7e "unlink, {lost}, unlink"
855 first="createmany -o $DIR/$tdir/$tfile- 1; rm $DIR/$tdir/$tfile-0"
856 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
857 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
858 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.1 failed"
860 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
861 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
862 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
863 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.2 failed"
865 first="mkdir $DIR/$tdir/$tfile; createmany -o $DIR/$tdir/$tfile- 1; rmdir $DIR/$tdir/$tfile"
866 lost="mkdir $MOUNT2/$tdir/$tfile"
867 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
868 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.3 failed"
870 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
871 lost="mv $MOUNT2/$tdir/$tfile-1 $MOUNT2/$tdir/$tfile-0"
872 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
873 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.4 failed"
875 first="createmany -o $DIR/$tdir/$tfile- 2; rm $DIR/$tdir/$tfile-0"
876 lost="mkdir $MOUNT2/$tdir/$tfile-0"
877 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
878 test_7_cycle "$first" "$lost" "$last" || error "Test 7f.5 failed"
881 run_test 7f "unlink, {lost}, rename"
884 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
885 lost="mkdir $MOUNT2/$tdir/$tfile-0;rmdir $MOUNT2/$tdir/$tfile-0"
886 last="createmany -o $DIR/$tdir/$tfile- 1"
887 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.1 failed"
889 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
890 lost="createmany -o $MOUNT2/$tdir/$tfile- 1; rm $MOUNT2/$tdir/$tfile-0"
891 last="mkdir $DIR/$tdir/$tfile-0"
892 test_7_cycle "$first" "$lost" "$last" && error "Test 7g.2 failed"
894 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
895 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
896 last="link $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
897 if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.1) ]
899 test_7_cycle "$first" "$lost" "$last" ||
900 error "Test 7g.3 failed"
901 else #LU-4442 LU-3528
902 test_7_cycle "$first" "$lost" "$last" &&
903 error "Test 7g.3 failed"
907 run_test 7g "rename, {lost}, create"
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="rm $DIR/$tdir/$tfile-0"
913 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.1 failed"
915 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
916 lost="rm $MOUNT2/$tdir/$tfile-0; createmany -o $MOUNT2/$tdir/$tfile- 1"
917 last="rm $DIR/$tdir/$tfile-0"
918 test_7_cycle "$first" "$lost" "$last" || error "Test 7h.2 failed"
920 first="createmany -o $DIR/$tdir/$tfile- 1; mkdir $DIR/$tdir/$tfile; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
921 lost="rm $MOUNT2/$tdir/$tfile/$tfile-0"
922 last="rmdir $DIR/$tdir/$tfile"
923 #test_7_cycle "$first" "$lost" "$last" || error "Test 7h.3 failed"
926 run_test 7h "rename, {lost}, unlink"
929 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
930 lost="createmany -o $MOUNT2/$tdir/$tfile- 1"
931 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
932 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
934 first="createmany -o $DIR/$tdir/$tfile- 1; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-1"
935 lost="mkdir $MOUNT2/$tdir/$tfile-0"
936 last="mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
937 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.1 failed"
939 first="createmany -o $DIR/$tdir/$tfile- 3; mv $DIR/$tdir/$tfile-1 $DIR/$tdir/$tfile-0"
940 lost="mv $MOUNT2/$tdir/$tfile-2 $MOUNT2/$tdir/$tfile-0"
941 last="mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile-2"
942 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.3 failed"
944 first="createmany -o $DIR/$tdir/$tfile- 2; mv $DIR/$tdir/$tfile-0 $DIR/$tdir/$tfile"
945 lost="rm $MOUNT2/$tdir/$tfile-1"
946 last="mv $DIR/$tdir/$tfile $DIR/$tdir/$tfile-1"
947 test_7_cycle "$first" "$lost" "$last" || error "Test 7i.4 failed"
950 run_test 7i "rename, {lost}, rename"
952 # test set #8: orphan handling bug 15392.
953 # Unlink during recovery creates orphan always just in case some late open may
954 # arrive. These orphans will be removed after recovery anyway.
955 # Tests check that valid create,unlink,create sequence will work in this case
956 # too but not fail on second create due to orphan found.
959 local var=${SINGLEMDS}_svc
960 zconf_mount $CLIENT2 $MOUNT2
962 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
964 do_node $CLIENT1 mcreate $DIR/$tfile
965 do_node $CLIENT1 mkdir $DIR/$tfile-2
966 replay_barrier $SINGLEMDS
967 # missed replay from client2 will lead to recovery by versions
968 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
969 do_node $CLIENT1 rm $DIR/$tfile || return 1
970 do_node $CLIENT1 touch $DIR/$tfile || return 2
972 zconf_umount $CLIENT2 $MOUNT2
973 facet_failover $SINGLEMDS
974 client_up $CLIENT1 || return 6
976 do_node $CLIENT1 rm $DIR/$tfile || error "$tfile doesn't exists"
979 run_test 8a "create | unlink, create shouldn't fail"
982 local var=${SINGLEMDS}_svc
983 zconf_mount $CLIENT2 $MOUNT2
985 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
987 do_node $CLIENT1 touch $DIR/$tfile
988 do_node $CLIENT1 mkdir $DIR/$tfile-2
989 replay_barrier $SINGLEMDS
990 # missed replay from client2 will lead to recovery by versions
991 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
992 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
993 do_node $CLIENT1 mcreate $MOUNT1/$tfile || return 2
995 zconf_umount $CLIENT2 $MOUNT2
996 facet_failover $SINGLEMDS
997 client_up $CLIENT1 || return 6
999 do_node $CLIENT1 rm $MOUNT1/$tfile || error "$tfile doesn't exists"
1002 run_test 8b "create | unlink, create shouldn't fail"
1005 local var=${SINGLEMDS}_svc
1006 zconf_mount $CLIENT2 $MOUNT2
1008 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1010 do_node $CLIENT1 touch $DIR/$tfile
1011 do_node $CLIENT1 mkdir $DIR/$tfile-2
1012 replay_barrier $SINGLEMDS
1013 # missed replay from client2 will lead to recovery by versions
1014 do_node $CLIENT2 touch $MOUNT2/$tfile-2/$tfile
1015 do_node $CLIENT1 rm -f $MOUNT1/$tfile || return 1
1016 do_node $CLIENT1 mkdir $MOUNT1/$tfile || return 2
1018 zconf_umount $CLIENT2 $MOUNT2
1019 facet_failover $SINGLEMDS
1020 client_up $CLIENT1 || return 6
1022 do_node $CLIENT1 rmdir $MOUNT1/$tfile || error "$tfile doesn't exists"
1025 run_test 8c "create | unlink, create shouldn't fail"
1028 # This test uses three Lustre clients on two hosts.
1030 # Lustre Client 1: $CLIENT1:$MOUNT ($DIR)
1031 # Lustre Client 2: $CLIENT2:$MOUNT2 ($DIR2)
1032 # Lustre Client 3: $CLIENT2:$MOUNT1 ($DIR1)
1034 test_10b() { # former test_2b
1037 local var=${SINGLEMDS}_svc
1039 [ -n "$CLIENTS" ] || { skip "Need two or more clients" && exit 0; }
1040 [ $CLIENTCOUNT -ge 2 ] || \
1041 { skip "Need two or more clients, have $CLIENTCOUNT" && exit 0; }
1043 do_facet $SINGLEMDS "$LCTL set_param mdd.${!var}.sync_permission=0"
1044 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1046 zconf_mount $CLIENT1 $MOUNT
1047 zconf_mount $CLIENT2 $MOUNT1
1048 zconf_mount $CLIENT2 $MOUNT2
1049 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-a
1050 do_node $CLIENT1 openfile -f O_RDWR:O_CREAT -m 0644 $DIR/$tfile-b
1053 # Save an MDT transaction number before recovery.
1055 do_node $CLIENT1 touch $DIR1/$tfile
1056 pre=$(get_version $CLIENT1 $DIR/$tfile)
1059 # Comments on the replay sequence state the expected result
1063 # "U" Unable to replay.
1066 replay_barrier $SINGLEMDS
1067 do_node $CLIENT1 chmod 666 $DIR/$tfile-a # R
1068 do_node $CLIENT2 chmod 666 $DIR1/$tfile-b # R
1069 do_node $CLIENT2 chgrp $RUNAS_GID $DIR2/$tfile-a # U
1070 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-a # J
1071 do_node $CLIENT2 $TRUNCATE $DIR2/$tfile-b 1 # U
1072 do_node $CLIENT2 chgrp $RUNAS_GID $DIR1/$tfile-b # R
1073 do_node $CLIENT1 chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile-b # R
1074 zconf_umount $CLIENT2 $MOUNT2
1075 facet_failover $SINGLEMDS
1077 client_evicted $CLIENT1 || error "$CLIENT1:$MOUNT not evicted"
1078 client_up $CLIENT2 || error "$CLIENT2:$MOUNT1 evicted"
1081 # Check the MDT epoch. $post must be the first transaction
1082 # number assigned after recovery.
1084 do_node $CLIENT2 chmod 666 $DIR1/$tfile
1085 post=$(get_version $CLIENT2 $DIR1/$tfile)
1086 if (($(($pre >> 32)) == $((post >> 32)))); then
1087 error "epoch not changed: pre $pre, post $post"
1090 if (($(($post & 0x00000000ffffffff)) != 1)); then
1091 error "transno should restart from one: got $post"
1094 do_node $CLIENT2 stat $DIR1/$tfile-a
1095 do_node $CLIENT2 stat $DIR1/$tfile-b
1097 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$UID -g \\\#$UID \
1098 $DIR1/$tfile-a || error "$DIR/$tfile-a: unexpected state"
1099 do_node $CLIENT2 $CHECKSTAT -p 0666 -u \\\#$RUNAS_ID -g \\\#$RUNAS_GID \
1100 $DIR1/$tfile-b || error "$DIR/$tfile-b: unexpected state"
1102 zconf_umount $CLIENT2 $MOUNT1
1104 run_test 10b "3 clients: some, none, and all reqs replayed"
1106 # test set #11: operations in single directory
1108 local var=${SINGLEMDS}_svc
1109 zconf_mount $CLIENT2 $MOUNT2
1111 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1113 replay_barrier $SINGLEMDS
1115 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1117 do_node $CLIENT2 createmany -o $MOUNT2/$tfile-2- 100
1118 zconf_umount $CLIENT2 $MOUNT2
1121 facet_failover $SINGLEMDS
1122 # recovery shouldn't fail due to missing client 2
1123 client_up $CLIENT1 || return 1
1124 # All files from client1 should have been replayed
1125 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1127 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1130 run_test 11a "concurrent creates don't affect each other"
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 createmany -o $MOUNT2/$tfile-2- 100
1140 replay_barrier $SINGLEMDS
1141 do_node $CLIENT1 createmany -o $DIR/$tfile-1- 100 &
1143 do_node $CLIENT2 unlinkmany -o $MOUNT2/$tfile-2- 100
1144 zconf_umount $CLIENT2 $MOUNT2
1147 facet_failover $SINGLEMDS
1148 # recovery shouldn't fail due to missing client 2
1149 client_up $CLIENT1 || return 1
1150 # All files from client1 should have been replayed
1151 do_node $CLIENT1 unlinkmany $DIR/$tfile-1- 100 || return 2
1153 [ -e $DIR/$tdir/$tfile-2-0 ] && error "$tfile-2-0 exists"
1156 run_test 11b "concurrent creates and unlinks don't affect each other"
1158 # test set #12: lock replay with VBR, bug 16356
1159 test_12a() { # former test_2a
1160 local var=${SINGLEMDS}_svc
1161 zconf_mount $CLIENT2 $MOUNT2
1163 do_facet $SINGLEMDS "$LCTL set_param mdt.${!var}.commit_on_sharing=0"
1165 do_node $CLIENT2 mkdir -p $MOUNT2/$tdir
1166 replay_barrier $SINGLEMDS
1167 do_node $CLIENT2 mcreate $MOUNT2/$tdir/$tfile
1168 do_node $CLIENT1 createmany -o $DIR/$tfile- 25
1169 #client1 read data from client2 which will be lost
1170 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile
1171 do_node $CLIENT1 createmany -o $DIR/$tfile-3- 25
1172 zconf_umount $CLIENT2 $MOUNT2
1174 facet_failover $SINGLEMDS
1175 # recovery shouldn't fail due to missing client 2
1176 client_up $CLIENT1 || return 1
1178 # All 50 files should have been replayed
1179 do_node $CLIENT1 unlinkmany $DIR/$tfile- 25 || return 2
1180 do_node $CLIENT1 unlinkmany $DIR/$tfile-3- 25 || return 3
1181 do_node $CLIENT1 $CHECKSTAT $DIR/$tdir/$tfile && return 4
1185 run_test 12a "lost data due to missed REMOTE client during replay"
1187 #restore COS setting
1188 restore_lustre_params < $cos_param_file
1189 rm -f $cos_param_file
1191 [ "$CLIENTS" ] && zconf_mount_clients $CLIENTS $DIR
1194 check_and_cleanup_lustre