Whamcloud - gitweb
LU-17426 tests: add crossdir parallel rename test 38/53738/12
authorAndreas Dilger <adilger@whamcloud.com>
Fri, 19 Jan 2024 03:44:33 +0000 (20:44 -0700)
committerOleg Drokin <green@whamcloud.com>
Thu, 15 Feb 2024 07:04:44 +0000 (07:04 +0000)
Add sanityn test_81d to test cross-dir (same-MDT) parallel rename
if the MDT supports this functionality.

Test-Parameters: trivial testlist=sanityn
Test-Parameters: testlist=sanityn serverversion=2.15 env=SANITYN_EXCEPT="77q 77r"
Test-Parameters: testlist=sanityn env=ONLY=81d,ONLY_REPEAT=10
Test-Parameters: testlist=sanityn env=ONLY=81d,ONLY_REPEAT=10 mdtcount=2
Test-Parameters: testlist=sanityn env=ONLY=81d,ONLY_REPEAT=10 mdtcount=4
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: Ic8717e6865a9c6c9698186f4fdf34c1f4f74083f
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/53738
Tested-by: Maloo <maloo@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/tests/mrename.c
lustre/tests/sanityn.sh

index 987007e..0ee16c5 100644 (file)
@@ -42,7 +42,9 @@ int main(int argc, char *argv[])
        }
 
        rc = rename(argv[1], argv[2]);
-       printf("rename returned %d: %s\n", rc, strerror(errno));
+       if (rc)
+               fprintf(stderr, "rename '%s' returned %d: %s\n",
+                       argv[1], rc, strerror(errno));
 
        return rc;
 }
index 3ca4333..9669bb4 100755 (executable)
@@ -1797,7 +1797,7 @@ test_39a() {
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
-run_test 39a "test from 11063 =================================="
+run_test 39a "file mtime does not change after rename"
 
 test_39b() {
        local client1=${CLIENT1:-`hostname`}
@@ -1824,7 +1824,7 @@ test_39b() {
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
 }
-run_test 39b "11063 problem 1 =================================="
+run_test 39b "file mtime the same on clients with/out lock"
 
 test_39c() {
        local client1=${CLIENT1:-`hostname`}
@@ -5285,13 +5285,10 @@ test_81b() {
        [ $MDSCOUNT -lt 2 ] &&
                skip "We need at least 2 MDTs for this test"
 
-       local total
        local setattr_pid
 
-       total=1000
-
        $LFS mkdir -c $MDSCOUNT $DIR1/$tdir || error "$LFS mkdir"
-       createmany -o $DIR1/$tdir/$tfile. $total || error "createmany"
+       createmany -o $DIR1/$tdir/$tfile. $COUNT || error "createmany"
 
        (
                while true; do
@@ -5300,7 +5297,7 @@ test_81b() {
        ) &
        setattr_pid=$!
 
-       for i in $(seq $total); do
+       for ((i = 0; i < COUNT; i++)); do
                mrename $DIR2/$tdir/$tfile.$i $DIR2/$tdir/$tfile-new.$i \
                        > /dev/null
        done
@@ -5355,6 +5352,66 @@ test_81c() {
 }
 run_test 81c "rename revoke LOOKUP lock for remote object"
 
+cleanup_81d() {
+       for ((mds = 0; mds < $MDSCOUNT; mds++)); do
+               local d2=$DIR2/$tdir-$mds
+
+               rm -rf $d2 &
+       done
+       wait || error "rm failed"
+}
+
+test_81d() {
+       local setattr_pid
+       local mdts=$(comma_list $(mdts_nodes))
+
+       do_nodes $mdts "$LCTL set_param mdt.*.md_stats=clear > /dev/null"
+
+       stack_trap cleanup_81d
+       for ((mds = 0; mds < $MDSCOUNT; mds++)); do
+               local d1=$DIR1/$tdir-$mds
+
+               $LFS mkdir -i $mds $d1 $d1/_temporary || error "mkdir failed"
+               createmany -o $d1/_temporary/$tfile. $COUNT ||
+                       error "createmany failed for $d1/_temporary"
+       done
+
+       for ((mds = 0; mds < $MDSCOUNT; mds++)); do
+               local d1=$DIR1/$tdir-$mds
+               local d2=$DIR2/$tdir-$mds
+
+               for ((i = 0; i < COUNT; i++)); do
+                       mrename $d1/_temporary/$tfile.$i $d1/$tfile.$i &
+                       ((i++))
+                       mrename $d2/_temporary/$tfile.$i $d2/$tfile.$i &
+               done
+       done
+       wait || error "rename failed"
+
+       cleanup_81d
+       local stats=$DIR1/md_stats
+       local total=$((MDSCOUNT * COUNT))
+
+       do_nodes $mdts "$LCTL get_param -n mdt.*.md_stats" > $stats
+       cat $stats
+       crossdir=$(awk '/crossdir_rename/ {sum+=$2} END {print sum}' $stats)
+       (( crossdir == total )) ||
+               error "not crossdir: $crossdir != $total"
+       samedir=$(awk '/samedir_rename/ {sum+=$2} END {print sum}' $stats)
+       (( samedir == 0 )) || error "considered samedir: $samedir"
+       pardir=$(awk '/parallel_rename_dir/ {sum+=$2} END {print sum}' $stats)
+       (( pardir == 0 )) || error "considered directory: $pardir"
+
+
+       (( MDS1_VERSION >= $(version_code 2.15.60) )) ||
+               { echo "need MDS >= 2.15.60 for parallel cross-dir"; return 0; }
+
+       parfile=$(awk '/parallel_rename_file/ {sum+=$2} END {print sum}' $stats)
+       (( parfile == total )) ||
+               error "not considered file: $parfile != $total"
+}
+run_test 81d "parallel rename file cross-dir on same MDT"
+
 test_82() {
        [[ "$MDS1_VERSION" -gt $(version_code 2.6.91) ]] ||
                skip "Need MDS version at least 2.6.92"