/tests/zfs-tests/tests/functional/threadsappend/threadsappend_001_pos.ksh

https://github.com/adilger/zfs · Korn Shell · 80 lines · 16 code · 10 blank · 54 comment · 2 complexity · 46451575c1ad8f99a1b4a3f8346f8c88 MD5 · raw file

  1. #! /bin/ksh -p
  2. #
  3. # CDDL HEADER START
  4. #
  5. # The contents of this file are subject to the terms of the
  6. # Common Development and Distribution License (the "License").
  7. # You may not use this file except in compliance with the License.
  8. #
  9. # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10. # or http://www.opensolaris.org/os/licensing.
  11. # See the License for the specific language governing permissions
  12. # and limitations under the License.
  13. #
  14. # When distributing Covered Code, include this CDDL HEADER in each
  15. # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16. # If applicable, add the following below this CDDL HEADER, with the
  17. # fields enclosed by brackets "[]" replaced with your own identifying
  18. # information: Portions Copyright [yyyy] [name of copyright owner]
  19. #
  20. # CDDL HEADER END
  21. #
  22. #
  23. # Copyright 2007 Sun Microsystems, Inc. All rights reserved.
  24. # Use is subject to license terms.
  25. #
  26. #
  27. # Copyright (c) 2013, 2016 by Delphix. All rights reserved.
  28. #
  29. . $STF_SUITE/include/libtest.shlib
  30. #
  31. # DESCRIPTION:
  32. #
  33. # Ensure multiple threads performing write appends to the same ZFS
  34. # file succeed.
  35. #
  36. # STRATEGY:
  37. # 1) Verify this is a multi-processor system
  38. # 2) Create multiple threads with each appending to a file
  39. # 3) Verify that the resulting file is the expected size
  40. #
  41. verify_runnable "both"
  42. log_assert "Ensure multiple threads performing write appends to the same" \
  43. "ZFS file succeed"
  44. #
  45. # $FILE_SIZE is hardcoded into threadsappend.c and is the expected
  46. # size of the file after all the threads have appended to it
  47. #
  48. typeset -i FILE_SIZE=1310720
  49. TESTFILE='testfile-threadsappend'
  50. #
  51. # This test should be run on a multi-processor system because otherwise the FS
  52. # will not be concurrently used by the threads
  53. #
  54. if ! is_mp; then
  55. log_fail "This test should be executed on a multi-processor system."
  56. fi
  57. #
  58. # zfs_threadsappend tries to append to $TESTFILE using threads
  59. # so that the resulting file is $FILE_SIZE bytes in size
  60. #
  61. log_must threadsappend ${TESTDIR}/${TESTFILE}
  62. #
  63. # Check the size of the resulting file
  64. #
  65. SIZE=`ls -l ${TESTDIR}/${TESTFILE} | awk '{print $5}'`
  66. if [[ $SIZE -ne $FILE_SIZE ]]; then
  67. log_fail "'The length of ${TESTDIR}/${TESTFILE}' doesn't equal 1310720."
  68. fi
  69. log_pass "Multiple thread appends succeeded. File size as expected"