Whamcloud - gitweb
LU-5266 ldlm: granting the same lock twice on recovery
[fs/lustre-release.git] / lustre / tests / replay-dual.sh
index 04638e0..7b73099 100755 (executable)
@@ -623,23 +623,23 @@ test_22a () {
        do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
 
        # OBD_FAIL_MDS_REINT_NET_REP       0x119
-       do_facet mds${MDTIDX} lctl set_param fail_loc=0x119
+       do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x119
        do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
        CLIENT_PID=$!
 
-       fail mds${MDTIDX}
+       fail mds$((MDTIDX + 1))
        wait $CLIENT_PID || error "lfs mkdir failed"
 
-       replay_barrier mds${MDTIDX}
+       replay_barrier mds$MDTIDX
        create_remote_dir_files_22 || error "Remote creation failed $?"
-       fail mds${MDTIDX}
+       fail mds$MDTIDX
 
        checkstat_22 || error "check stat failed $?"
 
        rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
        return 0
 }
-run_test 22a "c1 lfs mkdir -i 1 dir1, M0 drop reply & fail, c2 mkdir dir1/dir"
+run_test 22a "c1 lfs mkdir -i 1 dir1, M1 drop reply & fail, c2 mkdir dir1/dir"
 
 test_22b () {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
@@ -649,7 +649,7 @@ test_22b () {
        # OBD_FAIL_MDS_REINT_NET_REP       0x119
        do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
 
-       do_facet mds${MDTIDX} lctl set_param fail_loc=0x119
+       do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x119
        do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
        CLIENT_PID=$!
 
@@ -665,7 +665,7 @@ test_22b () {
        rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
        return 0
 }
-run_test 22b "c1 lfs mkdir -i 1 d1, M0 drop reply & fail M0/M1, c2 mkdir d1/dir"
+run_test 22b "c1 lfs mkdir -i 1 d1, M1 drop reply & fail M0/M1, c2 mkdir d1/dir"
 
 test_22c () {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
@@ -679,12 +679,12 @@ test_22c () {
        do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
 
        # OBD_FAIL_UPDATE_OBJ_NET_REP    0x1701
-       do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x1701
+       do_facet mds$MDTIDX lctl set_param fail_loc=0x1701
        do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
        CLIENT_PID=$!
-       do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0
+       do_facet mds$MDTIDX lctl set_param fail_loc=0
 
-       fail mds$((MDTIDX+1))
+       fail mds$MDTIDX
        wait $CLIENT_PID || error "lfs mkdir failed"
 
        replay_barrier mds$MDTIDX
@@ -706,10 +706,10 @@ test_22d () {
        do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
 
        # OBD_FAIL_UPDATE_OBJ_NET_REP    0x1701
-       do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x1701
+       do_facet mds$MDTIDX lctl set_param fail_loc=0x1701
        do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
        CLIENT_PID=$!
-       do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0
+       do_facet mds$MDTIDX lctl set_param fail_loc=0
 
        fail mds${MDTIDX},mds$((MDTIDX + 1))
        wait $CLIENT_PID || error "lfs mkdir failed"
@@ -863,6 +863,32 @@ run_test 23d "c1 rmdir d1, M0 drop update reply and fail M0/M1, c2 mkdir d1"
 
 # end commit on sharing tests 
 
+test_24() {
+       cancel_lru_locks osc
+
+       $SETSTRIPE -i 0 -c 1 $DIR/$tfile
+
+       # get lock for the 1st client
+       dd if=/dev/zero of=$DIR/$tfile count=1 >/dev/null ||
+               error "failed to write data"
+
+       # get waiting locks for the 2nd client
+       drop_ldlm_cancel "multiop $DIR2/$tfile Ow512" &
+       sleep 1
+
+#define OBD_FAIL_OST_LDLM_REPLY_NET      0x213
+       # failover, replay and resend replayed waiting locks
+       do_facet ost1 lctl set_param fail_loc=0x80000213
+       fail ost1
+
+       # multiop does not finish because CP AST is skipped;
+       # it is ok to kill it in the test, because CP AST is already re-sent
+       # and it does not hung forever in real life
+       killall multiop
+       wait
+}
+run_test 24 "replay|resend"
+
 complete $SECONDS
 SLEEP=$((`date +%s` - $NOW))
 [ $SLEEP -lt $TIMEOUT ] && sleep $SLEEP