Whamcloud - gitweb
LU-5319 tests: testcases for multiple modify RPCs feature
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 232c45c..fdb74d4 100644 (file)
@@ -6699,7 +6699,7 @@ grow_xattr() {
        local xsize=${1:-1024}  # in bytes
        local file=$DIR/$tfile
 
-       [ -z $(lctl get_param -n mdc.*.connect_flags | grep xattr) ] &&
+       [ -z "$(lctl get_param -n mdc.*.connect_flags | grep xattr)" ] &&
                skip "must have user_xattr" && return 0
        [ -z "$(which setfattr 2>/dev/null)" ] &&
                skip_env "could not find setfattr" && return 0
@@ -10160,142 +10160,141 @@ test_156() {
        local AFTER
        local file="$DIR/$tfile"
 
-       [ "$(facet_fstype ost1)" = "zfs" ] &&
-               skip "LU-1956/LU-2261: stats unimplemented on OSD ZFS" &&
+       [ "$(facet_fstype ost1)" = "zfs" -a \
+          $(lustre_version_code ost1 -lt $(version_code 2.6.93)) ] &&
+               skip "LU-1956/LU-2261: stats not implemented on OSD ZFS" &&
                return
 
        roc_hit_init
 
-    log "Turn on read and write cache"
-    set_cache read on
-    set_cache writethrough on
-
-    log "Write data and read it back."
-    log "Read should be satisfied from the cache."
-    dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
-    BEFORE=`roc_hit`
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
-    if ! let "AFTER - BEFORE == CPAGES"; then
-        error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
-    else
-        log "cache hits:: before: $BEFORE, after: $AFTER"
-    fi
-
-    log "Read again; it should be satisfied from the cache."
-    BEFORE=$AFTER
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
-    if ! let "AFTER - BEFORE == CPAGES"; then
-        error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
-    else
-        log "cache hits:: before: $BEFORE, after: $AFTER"
-    fi
+       log "Turn on read and write cache"
+       set_cache read on
+       set_cache writethrough on
 
+       log "Write data and read it back."
+       log "Read should be satisfied from the cache."
+       dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
+       BEFORE=$(roc_hit)
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
+       if ! let "AFTER - BEFORE == CPAGES"; then
+               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+       else
+               log "cache hits:: before: $BEFORE, after: $AFTER"
+       fi
 
-    log "Turn off the read cache and turn on the write cache"
-    set_cache read off
-    set_cache writethrough on
+       log "Read again; it should be satisfied from the cache."
+       BEFORE=$AFTER
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
+       if ! let "AFTER - BEFORE == CPAGES"; then
+               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+       else
+               log "cache hits:: before: $BEFORE, after: $AFTER"
+       fi
 
-    log "Read again; it should be satisfied from the cache."
-    BEFORE=`roc_hit`
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
-    if ! let "AFTER - BEFORE == CPAGES"; then
-        error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
-    else
-        log "cache hits:: before: $BEFORE, after: $AFTER"
-    fi
+       log "Turn off the read cache and turn on the write cache"
+       set_cache read off
+       set_cache writethrough on
 
-    log "Read again; it should not be satisfied from the cache."
-    BEFORE=$AFTER
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
-    if ! let "AFTER - BEFORE == 0"; then
-        error "IN CACHE: before: $BEFORE, after: $AFTER"
-    else
-        log "cache hits:: before: $BEFORE, after: $AFTER"
-    fi
+       log "Read again; it should be satisfied from the cache."
+       BEFORE=$(roc_hit)
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
+       if ! let "AFTER - BEFORE == CPAGES"; then
+               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+       else
+               log "cache hits:: before: $BEFORE, after: $AFTER"
+       fi
 
-    log "Write data and read it back."
-    log "Read should be satisfied from the cache."
-    dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
-    BEFORE=`roc_hit`
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
-    if ! let "AFTER - BEFORE == CPAGES"; then
-        error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
-    else
-        log "cache hits:: before: $BEFORE, after: $AFTER"
-    fi
+       log "Read again; it should not be satisfied from the cache."
+       BEFORE=$AFTER
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
+       if ! let "AFTER - BEFORE == 0"; then
+               error "IN CACHE: before: $BEFORE, after: $AFTER"
+       else
+               log "cache hits:: before: $BEFORE, after: $AFTER"
+       fi
 
-    log "Read again; it should not be satisfied from the cache."
-    BEFORE=$AFTER
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
-    if ! let "AFTER - BEFORE == 0"; then
-        error "IN CACHE: before: $BEFORE, after: $AFTER"
-    else
-        log "cache hits:: before: $BEFORE, after: $AFTER"
-    fi
+       log "Write data and read it back."
+       log "Read should be satisfied from the cache."
+       dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
+       BEFORE=$(roc_hit)
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
+       if ! let "AFTER - BEFORE == CPAGES"; then
+               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+       else
+               log "cache hits:: before: $BEFORE, after: $AFTER"
+       fi
 
+       log "Read again; it should not be satisfied from the cache."
+       BEFORE=$AFTER
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
+       if ! let "AFTER - BEFORE == 0"; then
+               error "IN CACHE: before: $BEFORE, after: $AFTER"
+       else
+               log "cache hits:: before: $BEFORE, after: $AFTER"
+       fi
 
-    log "Turn off read and write cache"
-    set_cache read off
-    set_cache writethrough off
+       log "Turn off read and write cache"
+       set_cache read off
+       set_cache writethrough off
 
-    log "Write data and read it back"
-    log "It should not be satisfied from the cache."
-    rm -f $file
-    dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
-    cancel_lru_locks osc
-    BEFORE=`roc_hit`
-    cat $file >/dev/null
-    AFTER=`roc_hit`
+       log "Write data and read it back"
+       log "It should not be satisfied from the cache."
+       rm -f $file
+       dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
+       cancel_lru_locks osc
+       BEFORE=$(roc_hit)
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == 0"; then
                error_ignore bz20762 "IN CACHE: before: $BEFORE, after: $AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
 
-    log "Turn on the read cache and turn off the write cache"
-    set_cache read on
-    set_cache writethrough off
+       log "Turn on the read cache and turn off the write cache"
+       set_cache read on
+       set_cache writethrough off
 
-    log "Write data and read it back"
-    log "It should not be satisfied from the cache."
-    rm -f $file
-    dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
-    BEFORE=`roc_hit`
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
+       log "Write data and read it back"
+       log "It should not be satisfied from the cache."
+       rm -f $file
+       dd if=/dev/urandom of=$file bs=4k count=$CPAGES || error "dd failed"
+       BEFORE=$(roc_hit)
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == 0"; then
                error_ignore bz20762 "IN CACHE: before: $BEFORE, after: $AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
 
-    log "Read again; it should be satisfied from the cache."
-    BEFORE=`roc_hit`
-    cancel_lru_locks osc
-    cat $file >/dev/null
-    AFTER=`roc_hit`
-    if ! let "AFTER - BEFORE == CPAGES"; then
-        error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
-    else
-        log "cache hits:: before: $BEFORE, after: $AFTER"
-    fi
+       log "Read again; it should be satisfied from the cache."
+       BEFORE=$(roc_hit)
+       cancel_lru_locks osc
+       cat $file >/dev/null
+       AFTER=$(roc_hit)
+       if ! let "AFTER - BEFORE == CPAGES"; then
+               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+       else
+               log "cache hits:: before: $BEFORE, after: $AFTER"
+       fi
 
-    rm -f $file
+       rm -f $file
 }
-run_test 156 "Verification of tunables ============================"
+run_test 156 "Verification of tunables"
 
 #Changelogs
 err17935 () {
@@ -12061,9 +12060,10 @@ test_220() { #LU-325
        remote_mgs_nodsh && skip "remote MGS with nodsh" && return
        local OSTIDX=0
 
-       test_mkdir -p $DIR/$tdir
-       local OST=$($LFS osts | grep ${OSTIDX}": " | \
-               awk '{print $2}' | sed -e 's/_UUID$//')
+       # create on MDT0000 so the last_id and next_id are correct
+       mkdir $DIR/$tdir
+       local OST=$($LFS df $DIR | awk '/OST:'$OSTIDX'/ { print $1 }')
+       OST=${OST%_UUID}
 
        # on the mdt's osc
        local mdtosc_proc1=$(get_mdtosc_proc_path $SINGLEMDS $OST)
@@ -12609,7 +12609,7 @@ test_230b() {
        ln -s $other_dir/$tfile $migrate_dir/${tfile}_ln_other
 
        $LFS migrate -m $MDTIDX $migrate_dir ||
-               error "migrate remote dir error"
+               error "fails on migrating remote dir to MDT1"
 
        echo "migratate to MDT1, then checking.."
        for ((i = 0; i < 10; i++)); do
@@ -12672,8 +12672,9 @@ test_230b() {
 
        #migrate back to MDT0
        MDTIDX=0
+
        $LFS migrate -m $MDTIDX $migrate_dir ||
-               error "migrate remote dir error"
+               error "fails on migrating remote dir to MDT0"
 
        echo "migrate back to MDT0, checking.."
        for file in $(find $migrate_dir); do
@@ -12752,6 +12753,12 @@ test_230c() {
        local t=$(ls $migrate_dir | wc -l)
        $LFS migrate --mdt-index $MDTIDX $migrate_dir &&
                error "migrate should fail after 5 entries"
+
+       mkdir $migrate_dir/dir &&
+               error "mkdir succeeds under migrating directory"
+       touch $migrate_dir/file &&
+               error "touch file succeeds under migrating directory"
+
        local u=$(ls $migrate_dir | wc -l)
        [ "$u" == "$t" ] || error "$u != $t during migration"
 
@@ -13106,6 +13113,31 @@ test_244()
 }
 run_test 244 "sendfile with group lock tests"
 
+test_245() {
+       local flagname="multi_mod_rpcs"
+       local connect_data_name="max_mod_rpcs"
+       local out
+
+       # check if multiple modify RPCs flag is set
+       out=$($LCTL get_param mdc.$FSNAME-MDT0000-*.import |
+               grep "connect_flags:")
+       echo "$out"
+
+       echo "$out" | grep -qw $flagname
+       if [ $? -ne 0 ]; then
+               echo "connect flag $flagname is not set"
+               return
+       fi
+
+       # check if multiple modify RPCs data is set
+       out=$($LCTL get_param mdc.$FSNAME-MDT0000-*.import)
+       echo "$out"
+
+       echo "$out" | grep -qw $connect_data_name ||
+               error "import should have connect data $connect_data_name"
+}
+run_test 245 "check mdc connection flag/data: multiple modify RPCs"
+
 test_250() {
        [ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR/$tfile) + 1)))" = "zfs" ] \
         && skip "no 16TB file size limit on ZFS" && return
@@ -13137,6 +13169,58 @@ test_251() {
 }
 run_test 251 "Handling short read and write correctly"
 
+test_252() {
+       local tgt
+       local dev
+       local out
+       local uuid
+       local num
+       local gen
+
+       if [ "$(facet_fstype ost1)" != "ldiskfs" -o \
+            "$(facet_fstype mds1)" != "ldiskfs" ]; then
+               skip "can only run lr_reader on ldiskfs target"
+               return
+       fi
+
+       # check lr_reader on OST0000
+       tgt=ost1
+       dev=$(facet_device $tgt)
+       out=$(do_facet $tgt $LR_READER $dev)
+       [ $? -eq 0 ] || error "$LR_READER failed on target $tgt device $dev"
+       echo "$out"
+       uuid=$(echo "$out" | grep -i uuid | awk '{ print $2 }')
+       [ "$uuid" == "$(ostuuid_from_index 0)" ] ||
+               error "Invalid uuid returned by $LR_READER on target $tgt"
+       echo -e "uuid returned by $LR_READER is '$uuid'\n"
+
+       # check lr_reader -c on MDT0000
+       tgt=mds1
+       dev=$(facet_device $tgt)
+       if ! do_facet $tgt $LR_READER -h | grep -q OPTIONS; then
+               echo "$LR_READER does not support additional options"
+               return 0
+       fi
+       out=$(do_facet $tgt $LR_READER -c $dev)
+       [ $? -eq 0 ] || error "$LR_READER failed on target $tgt device $dev"
+       echo "$out"
+       num=$(echo "$out" | grep -c "mdtlov")
+       [ "$num" -eq $((MDSCOUNT - 1)) ] ||
+               error "Invalid number of mdtlov clients returned by $LR_READER"
+       echo -e "Number of mdtlov clients returned by $LR_READER is '$num'\n"
+
+       # check lr_reader -cr on MDT0000
+       out=$(do_facet $tgt $LR_READER -cr $dev)
+       [ $? -eq 0 ] || error "$LR_READER failed on target $tgt device $dev"
+       echo "$out"
+       echo "$out" | grep -q "^reply_data:$" ||
+               error "$LR_READER should have returned 'reply_data' section"
+       num=$(echo "$out" | grep -c "client_generation")
+       echo -e "Number of reply data returned by $LR_READER is '$num'\n"
+}
+run_test 252 "check lr_reader tool"
+
+
 cleanup_test_300() {
        trap 0
        umask $SAVE_UMASK