Re: [PATCH 2/3] ceph: test combination of copy_file_range with truncate

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 07, 2020 at 06:52:11PM +0100, Luis Henriques wrote:
> From: Luis Henriques <lhenriques@xxxxxxxx>
> 
> This test was motivated by an OSD bug found while testing copy_file_range.
> This bug was an issue with the way the OSDs handled the truncate_seq
> value, which was being copied from the original object into the
> destination object.  This test ensures the kernel client correctly handles
> fixed/non-fixed OSDs.
> 
> Link: https://tracker.ceph.com/issues/37378
> Signed-off-by: Luis Henriques <lhenriques@xxxxxxxx>
> ---
>  tests/ceph/002     | 74 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/ceph/002.out |  8 +++++
>  tests/ceph/group   |  1 +
>  3 files changed, 83 insertions(+)
>  create mode 100644 tests/ceph/002
>  create mode 100644 tests/ceph/002.out
> 
> diff --git a/tests/ceph/002 b/tests/ceph/002
> new file mode 100644
> index 000000000000..a2ae6c9629f4
> --- /dev/null
> +++ b/tests/ceph/002
> @@ -0,0 +1,74 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (C) 2020 SUSE Linux Products GmbH. All Rights Reserved.
> +#
> +# FS QA Test No. ceph/002
> +#
> +# Test bug found while testing copy_file_range.
> +#
> +# This bug was an issue with how the OSDs handled the truncate_seq, copying it
> +# from the original object into the destination object.  This test ensures the
> +# kernel client correctly handles fixed/non-fixed OSDs.
> +#
> +# https://tracker.ceph.com/issues/37378

I noticed that the bug in above issue link has been fixed, it'd be good
to reference the fix commit as well, so people will know where the fix
is when test fails.

Thanks,
Eryu

> +#
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1    # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -rf $tmp.*
> +}
> +
> +# get standard environment
> +. common/rc
> +. common/filter
> +. common/attr
> +
> +# real QA test starts here
> +_supported_fs ceph
> +
> +_require_xfs_io_command "copy_range"
> +_require_attrs
> +_require_test
> +
> +workdir=$TEST_DIR/test-$seq
> +rm -rf $workdir
> +mkdir $workdir
> +rm -f $seqres.full
> +
> +# Use 4M object size
> +objsz=4194304
> +file="$workdir/file-$objsz"
> +dest="$workdir/dest-$objsz"
> +touch $file $dest
> +
> +# object_size has to be a multiple of stripe_unit
> +$SETFATTR_PROG -n ceph.file.layout \
> +	-v "stripe_unit=$objsz stripe_count=1 object_size=$objsz" \
> +	$file $dest
> +
> +# Create a 3 objects size files
> +$XFS_IO_PROG -c "pwrite -S 0x61 0 $objsz" $file >> $seqres.full 2>&1
> +$XFS_IO_PROG -c "pwrite -S 0x62 $objsz $objsz" $file >> $seqres.full 2>&1
> +$XFS_IO_PROG -c "pwrite -S 0x63 $(($objsz * 2)) $objsz" $file >> $seqres.full 2>&1
> +
> +$XFS_IO_PROG -c "pwrite -S 0x64 0 $(($objsz * 3))" $dest >> $seqres.full 2>&1
> +# Truncate the destination file (messing up with the truncate_seq)
> +$XFS_IO_PROG -c "truncate 0" $dest >> $seqres.full 2>&1
> +
> +# copy the whole file over
> +$XFS_IO_PROG -c "copy_range -s 0 -d 0 -l $(($objsz * 3)) $file" "$dest"
> +
> +hexdump $dest
> +
> +#success, all done
> +status=0
> +exit
> diff --git a/tests/ceph/002.out b/tests/ceph/002.out
> new file mode 100644
> index 000000000000..6f067250afff
> --- /dev/null
> +++ b/tests/ceph/002.out
> @@ -0,0 +1,8 @@
> +QA output created by 002
> +0000000 6161 6161 6161 6161 6161 6161 6161 6161
> +*
> +0400000 6262 6262 6262 6262 6262 6262 6262 6262
> +*
> +0800000 6363 6363 6363 6363 6363 6363 6363 6363
> +*
> +0c00000
> diff --git a/tests/ceph/group b/tests/ceph/group
> index 11f0b9ad03d3..c28fe473c1a4 100644
> --- a/tests/ceph/group
> +++ b/tests/ceph/group
> @@ -1 +1,2 @@
>  001 auto quick copy
> +002 auto quick copy



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux