Whamcloud - gitweb
b=17873
[fs/lustre-release.git] / lustre / tests / recovery-small.sh
index 41087cf..710a4a6 100755 (executable)
@@ -218,7 +218,7 @@ test_17() {
     remote_ost_nodsh && skip "remote OST with nodsh" && return 0
 
     # With adaptive timeouts, bulk_get won't expire until adaptive_timeout_max
-    if at_is_valid && at_is_enabled; then
+    if at_is_enabled; then
         at_max_saved=$(at_max_get ost1)
         at_max_set $TIMEOUT ost1
     fi
@@ -239,13 +239,13 @@ test_17() {
     # expect cmp to succeed, client resent bulk
     do_facet client "cmp /etc/termcap $DIR/$tfile" || return 3
     do_facet client "rm $DIR/$tfile" || return 4
-    [ $at_max_saved -ne 0 ] && $(at_max_set $at_max_saved ost1)
+    [ $at_max_saved -ne 0 ] && at_max_set $at_max_saved ost1
     return 0
 }
 run_test 17 "timeout bulk get, don't evict client (2732)"
 
 test_18a() {
-    [ -z ${ost2_svc} ] && skip "needs 2 osts" && return 0
+    [ -z ${ost2_svc} ] && skip_env "needs 2 osts" && return 0
 
     do_facet client mkdir -p $DIR/$tdir
     f=$DIR/$tdir/$tfile
@@ -692,16 +692,19 @@ test_26b() {      # bug 10140 - evict dead exports by pinger
 
        zconf_umount `hostname` $MOUNT2 -f
 
+       # PING_INTERVAL max(obd_timeout / 4, 1U)
+       # PING_EVICT_TIMEOUT (PING_INTERVAL * 6)
+
        # evictor takes PING_EVICT_TIMEOUT + 3 * PING_INTERVAL to evict.  
        # But if there's a race to start the evictor from various obds, 
        # the loser might have to wait for the next ping.
-       # PING_INTERVAL max(obd_timeout / 4, 1U)
-       # sleep (2*PING_INTERVAL) 
-
-        local rc=0
-        wait_client_evicted ost1 $OST_NEXP $((TIMEOUT * 2 + TIMEOUT * 3 / 4)) || \
+       # = 9 * PING_INTERVAL + PING_INTERVAL
+       # = 10 PING_INTERVAL = 10 obd_timeout / 4 = 2.5 obd_timeout
+       # let's wait $((TIMEOUT * 3)) # bug 19887
+       local rc=0
+       wait_client_evicted ost1 $OST_NEXP $((TIMEOUT * 3)) || \
                error "Client was not evicted by ost" rc=1
-       wait_client_evicted $SINGLEMDS $MDS_NEXP $((TIMEOUT * 2 + TIMEOUT * 3 / 4)) || \
+       wait_client_evicted $SINGLEMDS $MDS_NEXP $((TIMEOUT * 3)) || \
                error "Client was not evicted by mds"
 }
 run_test 26b "evict dead exports"
@@ -983,6 +986,7 @@ test_59() { # bug 10589
 run_test 59 "Read cancel race on client eviction"
 
 err17935 () {
+    # we assume that all md changes are in the MDT0 changelog
     if [ $MDSCOUNT -gt 1 ]; then
        error_ignore 17935 $*
     else
@@ -991,17 +995,17 @@ err17935 () {
 }
 
 test_60() {
-       remote_mds && { skip "remote MDS" && return 0; }
+        MDT0=$($LCTL get_param -n mdc.*.mds_server_uuid | \
+           awk '{gsub(/_UUID/,""); print $1}' | head -1)
 
        NUM_FILES=15000
        mkdir -p $DIR/$tdir
 
-       # Enable and clear changelog
-       $LCTL conf_param ${mds1_svc}.mdd.changelog=on
-       $LCTL set_param -n mdd.*.changelog on
-       $LFS changelog_clear $FSNAME 0
+       # Register (and start) changelog
+       USER=$(do_facet $SINGLEMDS lctl --device $MDT0 changelog_register -n)
+       echo "Registered as $MDT0 changelog user $USER"
 
-       # Create NUM_FILES in the background
+       # Generate a large number of changelog entries
        createmany -o $DIR/$tdir/$tfile $NUM_FILES
        sync
        sleep 5
@@ -1011,29 +1015,61 @@ test_60() {
        CLIENT_PID=$!
        sleep 1
 
-       # Failover the MDS while creates are happening
+       # Failover the MDS while unlinks are happening
        facet_failover $SINGLEMDS
 
        # Wait for unlinkmany to finish
        wait $CLIENT_PID
 
-       # Check if NUM_FILES create/unlink events were recorded
+       # Check if all the create/unlink events were recorded
        # in the changelog
-       $LFS changelog $FSNAME >> $DIR/$tdir/changelog
+       $LFS changelog $MDT0 >> $DIR/$tdir/changelog
        local cl_count=$(grep UNLNK $DIR/$tdir/changelog | wc -l)
-       echo "$cl_count unlinks in changelog"
+       echo "$cl_count unlinks in $MDT0 changelog"
+
+       do_facet $SINGLEMDS lctl --device $MDT0 changelog_deregister $USER
+       USERS=$(( $(do_facet $SINGLEMDS lctl get_param -n \
+           mdd.$MDT0.changelog_users | wc -l) - 2 ))
+       if [ $USERS -eq 0 ]; then
+           [ $cl_count -eq $NUM_FILES ] || \
+               err17935 "Recorded ${cl_count} unlinks out of $NUM_FILES"
+           # Also make sure we can clear large changelogs
+           cl_count=$($LFS changelog $FSNAME | wc -l)
+           [ $cl_count -le 2 ] || \
+               error "Changelog not empty: $cl_count entries"
+       else
+           # If there are other users, there may be other unlinks in the log
+           [ $cl_count -ge $NUM_FILES ] || \
+               err17935 "Recorded ${cl_count} unlinks out of $NUM_FILES"
+           echo "$USERS other changelog users; can't verify clear"
+       fi
+}
+run_test 60 "Add Changelog entries during MDS failover"
+
+test_61()
+{
+       local cflags='osc.*-OST0000-osc-MDT*.connect_flags'
+       do_facet $SINGLEMDS "lctl get_param -n $cflags" |grep -q skip_orphan
+       [ $? -ne 0 ] && skip "don't have skip orphan feature" && return
 
-       [ $cl_count -eq $NUM_FILES ] || err17935 "Recorded ${cl_count} unlinks out
-of $NUM_FILES"
+       mkdir -p $DIR/$tdir || error "mkdir dir $DIR/$tdir failed"
+       # Set the default stripe of $DIR/$tdir to put the files to ost1
+       $LFS setstripe -c 1 --index 0 $DIR/$tdir
 
-       # Also make sure we can clear large changelogs
-       lctl set_param -n mdd.*.changelog off
-       $LFS changelog_clear $FSNAME 0
+       replay_barrier $SINGLEMDS
+       createmany -o $DIR/$tdir/$tfile-%d 10 
+       local oid=`do_facet ost1 "lctl get_param -n obdfilter.*OST0000.last_id"`
 
-       cl_count=$($LFS changelog $FSNAME | wc -l)
-       [ $cl_count -eq 1 ] || error "Changelog not empty: $cl_count entries"
+       fail_abort $SINGLEMDS
+       
+       touch $DIR/$tdir/$tfile
+       local id=`$LFS getstripe $DIR/$tdir/$tfile |awk '$2 ~ /^[1-9]+/ {print $2}'`
+       [ $id -le $oid ] && error "the orphan objid was reused, failed"
+
+       # Cleanup
+       rm -rf $DIR/$tdir
 }
-run_test 60 "Add Changelog entries during MDS failover"
+run_test 61 "Verify to not reuse orphan objects - bug 17025"
 
 equals_msg `basename $0`: test complete, cleaning up
 check_and_cleanup_lustre