ceph/qa
Leonid Usov b1cb6d9856 mds/quiesce: quiesce_inode should not hold on to remote auth pins
1. avoid taking a remote authpin for the quiesce lock
2. drop remote authpins that were taken because of other locks

We should not be forcing a mustpin when taking quiesce lock.
This creates unnecessary overhead due to the distributed nature
of the quiesce: all ranks will execute quiesce_inode, including
the auth rank, which will authpin the inode.

Auth pinning on the auth rank is important to synchronize quiesce
with operations that are managed by the auth, like fragmenting
and exporting.

If we let a remote quiesce process take a foreign authpin then
it may block freezing on the auth, which will stall quiesce locally.
This wouldn't be a problem if the quiesce that is blocked on the auth
and the quiesce that's holding a remote authpin from the replica side
were unrelated, but in our case it may be the same logical quiesce
that effectively steps on its own toes. This creates an opportunity
for a deadlock.

Fixes: https://tracker.ceph.com/issues/66152
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
2024-05-26 11:33:52 +03:00
..
archs
btrfs
cephfs qa: ignore variation of PG_DEGRADED health warning 2024-04-30 10:03:12 -04:00
client
clusters suites: add crush rules to thrash erasure code 2024-02-28 07:21:27 +00:00
config qa/config/crimson_qa_overrides: adjust mgr_stats_period 2024-05-02 15:49:21 +00:00
crontab qa/crontab: use historically normal priorities for nightlies 2024-03-14 15:01:53 -04:00
debug
distros qa: ignore container checkpoint/restore related selinux denials for centos9 2024-03-06 14:58:32 +05:30
erasure-code suites/ec-rados-plugin=jerasure-k=8-m=6-crush: roles set 2024-04-18 13:00:22 +00:00
libceph
machine_types qa/nightlies: move schedule_subset script alongside cron_wrapper 2024-03-11 13:45:52 -04:00
mds
mgr_ttl_cache
mon/bootstrap
mon_election qa: add missing terminating newline 2024-04-29 12:22:26 -04:00
msgr
nightlies qa/crontab: simplify and minimize argument specification 2024-03-11 13:46:22 -04:00
objectstore
objectstore_cephfs
objectstore_debug
overrides
packages
qa_scripts
rbd qa: krbd_msgr_segments.t: adapt to different vgremove outputs 2024-04-15 12:04:25 +02:00
releases
rgw
rgw_bucket_sharding
rgw_frontend
rgw_pool_type
standalone mon/LogMonitor: Use generic cluster log level config 2024-03-13 13:10:54 -04:00
suites Merge pull request #56114 from xxhdx1985126/wip-seastore-teuthology-max-test-attr-len 2024-05-19 13:28:24 +03:00
tasks mds/quiesce: quiesce_inode should not hold on to remote auth pins 2024-05-26 11:33:52 +03:00
timezone
workunits Merge pull request #52560 from petrutlucian94/rbd_service_restart_test 2024-05-17 09:09:38 +02:00
.gitignore
.qa
CMakeLists.txt
find-used-ports.sh
loopall.sh
lsan.supp qa/lsan.supp: suppress MallocExtension::Initialize 2024-03-27 07:35:28 +08:00
Makefile
mypy.ini
README
run_xfstests_qemu.sh
run_xfstests-obsolete.sh
run_xfstests.sh
run-standalone.sh
runallonce.sh
runoncfuse.sh
runonkclient.sh
setup-chroot.sh
test_import.py
tox.ini qa: disable namespace packages on mypy runs 2024-01-23 09:45:40 -05:00
valgrind.supp

ceph-qa-suite
-------------

clusters/    - some predefined cluster layouts
suites/      - set suite

The suites directory has a hierarchical collection of tests.  This can be
freeform, but generally follows the convention of

  suites/<test suite name>/<test group>/...

A test is described by a yaml fragment.

A test can exist as a single .yaml file in the directory tree.  For example:

 suites/foo/one.yaml
 suites/foo/two.yaml

is a simple group of two tests.

A directory with a magic '+' file represents a test that combines all
other items in the directory into a single yaml fragment.  For example:

 suites/foo/bar/+
 suites/foo/bar/a.yaml
 suites/foo/bar/b.yaml
 suites/foo/bar/c.yaml

is a single test consisting of a + b + c.

A directory with a magic '%' file represents a test matrix formed from
all other items in the directory.  For example,

 suites/baz/%
 suites/baz/a.yaml
 suites/baz/b/b1.yaml
 suites/baz/b/b2.yaml
 suites/baz/c.yaml
 suites/baz/d/d1.yaml
 suites/baz/d/d2.yaml

is a 4-dimensional test matrix.  Two dimensions (a, c) are trivial (1
item), so this is really 2x2 = 4 tests, which are

  a + b1 + c + d1
  a + b1 + c + d2
  a + b2 + c + d1
  a + b2 + c + d2

A directory with a magic '$' file, or a directory whose name ends with '$',
represents a test where one of the non-magic items is chosen randomly.  For
example, both

 suites/foo/$
 suites/foo/a.yaml
 suites/foo/b.yaml
 suites/foo/c.yaml

and

 suites/foo$/a.yaml
 suites/foo$/b.yaml
 suites/foo$/c.yaml

is a single test, either a, b or c.  This can be used in conjunction with the
'%' file in the same (see below) or other directories to run a series of tests
without causing an unwanted increase in the total number of jobs run.

Symlinks are okay.

One particular use of symlinks is to combine '%' and the latter form of '$'
feature.  Consider supported_distros directory containing fragments that define
os_type and os_version:

 supported_distros/%
 supported_distros/centos.yaml
 supported_distros/rhel.yaml
 supported_distros/ubuntu.yaml

A test that links supported_distros as distros (a name that doesn't end with
'$') will be run three times: on centos, rhel and ubuntu.  A test that links
supported_distros as distros$ will be run just once: either on centos, rhel or
ubuntu, chosen randomly.

The teuthology code can be found in https://github.com/ceph/teuthology.git