summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CMakeLists.txt2
-rw-r--r--PendingReleaseNotes7
-rw-r--r--ceph.spec7
-rw-r--r--ceph.spec.in1
-rw-r--r--cmake/modules/BuildArrow.cmake3
-rw-r--r--debian/ceph-exporter.install2
-rw-r--r--debian/ceph-mgr.requires1
-rw-r--r--debian/changelog6
-rw-r--r--debian/control25
-rwxr-xr-xdebian/rules1
-rw-r--r--doc/cephfs/administration.rst75
-rw-r--r--doc/cephfs/health-messages.rst17
l---------qa/distros/a-supported-distro.yaml1
-rw-r--r--qa/distros/all/centos_7.6.yaml2
-rw-r--r--qa/distros/all/centos_8.0.yaml2
-rw-r--r--qa/distros/all/centos_8.1.yaml2
-rw-r--r--qa/distros/all/centos_8.2.yaml2
-rw-r--r--qa/distros/all/centos_8.3.yaml2
-rw-r--r--qa/distros/all/centos_8.stream.yaml2
-rw-r--r--qa/distros/all/centos_9.stream.yaml4
-rw-r--r--qa/distros/all/rhel_7.6.yaml2
-rw-r--r--qa/distros/all/rhel_7.7.yaml2
-rw-r--r--qa/distros/all/rhel_8.0.yaml2
-rw-r--r--qa/distros/all/rhel_8.1.yaml2
-rw-r--r--qa/distros/all/rhel_8.3.yaml2
-rw-r--r--qa/distros/all/rhel_8.4.yaml2
-rw-r--r--qa/distros/all/rhel_8.5.yaml2
-rw-r--r--qa/distros/all/rhel_8.6.yaml2
-rw-r--r--qa/distros/container-hosts/centos_8.stream_container_tools.yaml2
-rw-r--r--qa/distros/container-hosts/centos_8.stream_container_tools_crun.yaml2
-rw-r--r--qa/distros/container-hosts/centos_9.stream.yaml11
-rw-r--r--qa/distros/container-hosts/centos_9.stream_runc.yaml13
-rw-r--r--qa/distros/container-hosts/rhel_8.6_container_tools_3.0.yaml13
-rw-r--r--qa/distros/container-hosts/rhel_8.6_container_tools_rhel8.yaml13
l---------qa/distros/container-hosts/ubuntu_22.04.yaml1
l---------qa/distros/crimson-supported-all-distro/centos_8.yaml1
-rw-r--r--qa/distros/podman/centos_8.stream_container_tools.yaml2
-rw-r--r--qa/distros/podman/centos_9.stream.yaml7
-rw-r--r--qa/distros/podman/rhel_8.6_container_tools_3.0.yaml13
-rw-r--r--qa/distros/podman/rhel_8.6_container_tools_rhel8.yaml13
l---------qa/distros/single-container-host.yaml2
l---------qa/distros/supported-all-distro/centos_8.yaml1
l---------qa/distros/supported-all-distro/rhel_8.yaml1
l---------qa/distros/supported-container-hosts/centos_9.stream.yaml1
l---------qa/distros/supported-container-hosts/centos_9.stream_runc.yaml1
l---------qa/distros/supported-container-hosts/ubuntu_22.04.yaml1
l---------qa/distros/supported-random-distro$/centos_8.yaml1
l---------qa/distros/supported-random-distro$/rhel_8.yaml1
l---------qa/distros/supported/centos_8.stream.yaml1
l---------qa/distros/supported/rhel_latest.yaml1
l---------qa/suites/crimson-rados/basic/centos_8.stream.yaml1
l---------qa/suites/crimson-rados/rbd/centos_8.stream.yaml1
l---------qa/suites/crimson-rados/thrash/centos_8.stream.yaml1
l---------qa/suites/fs/upgrade/featureful_client/old_client/centos_8.stream.yaml1
l---------qa/suites/fs/upgrade/featureful_client/old_client/centos_8.yaml1
l---------qa/suites/fs/upgrade/featureful_client/old_client/centos_9.stream.yaml1
-rw-r--r--qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-from/quincy.yaml (renamed from qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-octopus.yaml)8
-rw-r--r--qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml6
-rw-r--r--qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml3
-rw-r--r--qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/yes.yaml (renamed from qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/quincy.yaml)0
l---------qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.stream.yaml1
l---------qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.yaml1
l---------qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_9.stream.yaml1
-rw-r--r--qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-from/quincy.yaml (renamed from qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-octopus.yaml)8
-rw-r--r--qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml12
-rw-r--r--qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml3
-rw-r--r--qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml1
l---------qa/suites/fs/upgrade/mds_upgrade_sequence/centos_8.stream_container_tools.yaml1
l---------qa/suites/fs/upgrade/mds_upgrade_sequence/centos_9.stream.yaml1
l---------qa/suites/fs/upgrade/nofs/centos_8.stream.yaml1
l---------qa/suites/fs/upgrade/nofs/centos_8.yaml1
l---------qa/suites/fs/upgrade/nofs/centos_9.stream.yaml1
-rw-r--r--qa/suites/fs/upgrade/nofs/tasks/0-from/quincy.yaml (renamed from qa/suites/fs/upgrade/nofs/tasks/0-pacific.yaml)8
-rw-r--r--qa/suites/fs/upgrade/nofs/tasks/1-upgrade.yaml2
l---------qa/suites/fs/upgrade/upgraded_client/centos_8.stream.yaml1
l---------qa/suites/fs/upgrade/upgraded_client/centos_8.yaml1
l---------qa/suites/fs/upgrade/upgraded_client/centos_9.stream.yaml1
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/0-from/nautilus.yaml53
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/0-install/quincy.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/0-from/pacific.yaml)10
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/2-clients/fuse-upgrade.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/0-clients/fuse-upgrade.yaml)3
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/2-clients/kclient.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/0-clients/kclient.yaml)0
l---------qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/.qa1
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/%0
l---------qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/.qa1
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/0-client-upgrade.yaml14
l---------qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/.qa1
l---------qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/.qa1
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/new_ops/% (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/%)0
-rw-r--r--qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/new_ops/newops.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/1-client-sanity.yaml)0
l---------qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/.qa1
l---------qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/blogbench.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/blogbench.yaml)0
l---------qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/dbench.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/dbench.yaml)0
l---------qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/fsstress.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/fsstress.yaml)0
l---------qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/iozone.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/iozone.yaml)0
l---------qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/kernel_untar_build.yaml (renamed from qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/kernel_untar_build.yaml)0
l---------qa/suites/fs/workload/0-centos_9.stream.yaml1
l---------qa/suites/fs/workload/0-rhel_8.yaml1
l---------qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_8.stream_container_tools.yaml1
l---------qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_9.stream.yaml1
l---------qa/suites/orch/cephadm/no-agent-workunits/0-distro2
l---------qa/suites/orch/cephadm/orchestrator_cli/0-random-distro$2
l---------qa/suites/orch/cephadm/osds/0-distro2
l---------qa/suites/orch/cephadm/smoke-roleless/0-distro2
l---------qa/suites/orch/cephadm/smoke-singlehost/0-random-distro$2
l---------qa/suites/orch/cephadm/smoke-small/0-distro/.qa1
l---------qa/suites/orch/cephadm/smoke-small/0-distro/centos_8.stream_container_tools_crun.yaml1
l---------qa/suites/orch/cephadm/smoke-small/0-distro/centos_9.stream_runc.yaml1
l---------qa/suites/orch/cephadm/smoke/0-distro2
l---------qa/suites/orch/cephadm/thrash/0-distro2
-rw-r--r--qa/suites/orch/cephadm/upgrade/1-start-distro/1-start-centos_9.stream.yaml (renamed from qa/suites/orch/cephadm/upgrade/1-start-distro/1-start-centos_8.stream_container-tools.yaml)8
l---------qa/suites/orch/cephadm/with-work/0-distro2
l---------qa/suites/orch/cephadm/workunits/0-distro2
l---------qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_8.stream_container_tools.yaml1
l---------qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_9.stream.yaml1
l---------qa/suites/orch/rook/smoke/0-distro/ubuntu_22.04.yaml1
l---------qa/suites/powercycle/osd/supported-all-distro1
l---------qa/suites/powercycle/osd/supported-distros1
l---------qa/suites/rgw/notifications/centos_latest.yaml1
-rw-r--r--qa/suites/rgw/notifications/supported-all-distro$/$0
l---------qa/suites/rgw/notifications/supported-all-distro$/.qa1
l---------qa/suites/rgw/notifications/supported-all-distro$/centos_8.yaml1
l---------qa/suites/rgw/upgrade/1-install/pacific/distro$/centos_8.stream.yaml1
l---------qa/suites/rgw/upgrade/1-install/pacific/distro$/ubuntu_20.04.yaml2
l---------qa/suites/rgw/upgrade/1-install/quincy/distro$/ubuntu_20.04.yaml2
l---------qa/suites/teuthology/buildpackages/supported-all-distro1
l---------qa/suites/teuthology/buildpackages/supported-distros1
l---------qa/suites/upgrade/pacific-x/parallel/0-random-distro$2
l---------qa/suites/upgrade/quincy-x/parallel/0-random-distro$2
l---------qa/suites/upgrade/quincy-x/stress-split/0-distro2
-rw-r--r--qa/suites/upgrade/reef-p2p/reef-p2p-parallel/point-to-point-upgrade.yaml36
l---------qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/.qa1
l---------qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_8.yaml1
l---------qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_9.stream.yaml1
l---------qa/suites/upgrade/telemetry-upgrade/quincy-x/0-random-distro$2
-rw-r--r--qa/tasks/ceph_fuse.py67
-rw-r--r--qa/tasks/cephfs/mount.py41
-rw-r--r--qa/tasks/cephfs/test_admin.py86
-rw-r--r--qa/tasks/nvme_loop.py30
-rw-r--r--qa/tasks/qemu.py7
-rwxr-xr-xqa/workunits/cephadm/test_dashboard_e2e.sh3
-rwxr-xr-xqa/workunits/cephadm/test_iscsi_pids_limit.sh12
-rwxr-xr-xqa/workunits/cephadm/test_repos.sh4
-rw-r--r--src/.git_version4
-rw-r--r--src/client/Client.cc8
-rw-r--r--src/client/Client.h2
-rw-r--r--src/common/ceph_strings.cc6
-rw-r--r--src/common/options/mds-client.yaml.in8
-rw-r--r--src/mds/Beacon.cc24
-rw-r--r--src/mds/MDSAuthCaps.h17
-rw-r--r--src/mds/Server.cc23
-rw-r--r--src/mds/SessionMap.cc1
-rw-r--r--src/mds/SessionMap.h12
-rw-r--r--src/mds/mdstypes.cc26
-rw-r--r--src/mds/mdstypes.h3
-rw-r--r--src/messages/MMDSBeacon.h5
-rw-r--r--src/mon/MDSMonitor.cc1
-rw-r--r--src/osd/OSDMap.cc8
-rw-r--r--src/pybind/mgr/k8sevents/module.py18
-rw-r--r--src/pybind/mgr/requirements.txt2
159 files changed, 612 insertions, 336 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b31492dd6..eab4d6936 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.16)
project(ceph
- VERSION 18.2.3
+ VERSION 18.2.4
LANGUAGES CXX C ASM)
cmake_policy(SET CMP0028 NEW)
diff --git a/PendingReleaseNotes b/PendingReleaseNotes
index e23c9eb08..c1580e4db 100644
--- a/PendingReleaseNotes
+++ b/PendingReleaseNotes
@@ -100,6 +100,13 @@
`ceph config get mgr mgr/volumes/snapshot_clone_no_wait`
and it can be disabled by using:
`ceph config set mgr mgr/volumes/snapshot_clone_no_wait false`
+* CephFS: fixes to the implementation of the ``root_squash`` mechanism enabled
+ via cephx ``mds`` caps on a client credential require a new client feature
+ bit, ``client_mds_auth_caps``. Clients using credentials with ``root_squash``
+ without this feature will trigger the MDS to raise a HEALTH_ERR on the
+ cluster, MDS_CLIENTS_BROKEN_ROOTSQUASH. See the documentation on this warning
+ and the new feature bit for more information.
+
>=18.0.0
diff --git a/ceph.spec b/ceph.spec
index 7de4d6d8b..10f1c4eee 100644
--- a/ceph.spec
+++ b/ceph.spec
@@ -170,7 +170,7 @@
# main package definition
#################################################################################
Name: ceph
-Version: 18.2.3
+Version: 18.2.4
Release: 0%{?dist}
%if 0%{?fedora} || 0%{?rhel}
Epoch: 2
@@ -186,7 +186,7 @@ License: LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-
Group: System/Filesystems
%endif
URL: http://ceph.com/
-Source0: %{?_remote_tarball_prefix}ceph-18.2.3.tar.bz2
+Source0: %{?_remote_tarball_prefix}ceph-18.2.4.tar.bz2
%if 0%{?suse_version}
# _insert_obs_source_lines_here
ExclusiveArch: x86_64 aarch64 ppc64le s390x
@@ -1301,7 +1301,7 @@ This package provides a Ceph hardware monitoring agent.
# common
#################################################################################
%prep
-%autosetup -p1 -n ceph-18.2.3
+%autosetup -p1 -n ceph-18.2.4
%build
# Disable lto on systems that do not support symver attribute
@@ -2635,6 +2635,5 @@ exit 0
%dir %{python3_sitelib}/ceph_node_proxy
%{python3_sitelib}/ceph_node_proxy/*
%{python3_sitelib}/ceph_node_proxy-*
-#%{_mandir}/man8/ceph-node-proxy.8*
%changelog
diff --git a/ceph.spec.in b/ceph.spec.in
index f073a9c28..b8dfec1ee 100644
--- a/ceph.spec.in
+++ b/ceph.spec.in
@@ -2635,6 +2635,5 @@ exit 0
%dir %{python3_sitelib}/ceph_node_proxy
%{python3_sitelib}/ceph_node_proxy/*
%{python3_sitelib}/ceph_node_proxy-*
-#%{_mandir}/man8/ceph-node-proxy.8*
%changelog
diff --git a/cmake/modules/BuildArrow.cmake b/cmake/modules/BuildArrow.cmake
index 691108a40..8a16b9b88 100644
--- a/cmake/modules/BuildArrow.cmake
+++ b/cmake/modules/BuildArrow.cmake
@@ -86,6 +86,9 @@ function(build_arrow)
else()
list(APPEND arrow_CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release)
endif()
+ # don't add -Werror or debug package builds fail with:
+ #warning _FORTIFY_SOURCE requires compiling with optimization (-O)
+ list(APPEND arrow_CMAKE_ARGS -DBUILD_WARNING_LEVEL=PRODUCTION)
# we use an external project and copy the sources to bin directory to ensure
# that object files are built outside of the source tree.
diff --git a/debian/ceph-exporter.install b/debian/ceph-exporter.install
new file mode 100644
index 000000000..1ac0edcd2
--- /dev/null
+++ b/debian/ceph-exporter.install
@@ -0,0 +1,2 @@
+lib/systemd/system/ceph-exporter*
+usr/bin/ceph-exporter
diff --git a/debian/ceph-mgr.requires b/debian/ceph-mgr.requires
index bf334fb9b..39336330c 100644
--- a/debian/ceph-mgr.requires
+++ b/debian/ceph-mgr.requires
@@ -1,3 +1,4 @@
+bcrypt
pyOpenSSL
cephfs
ceph-argparse
diff --git a/debian/changelog b/debian/changelog
index f0441b895..9c3dc7bb5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+ceph (18.2.4-1) stable; urgency=medium
+
+ * New upstream release
+
+ -- Ceph Release Team <ceph-maintainers@ceph.io> Fri, 12 Jul 2024 09:57:18 -0400
+
ceph (18.2.2-1) stable; urgency=medium
* New upstream release
diff --git a/debian/control b/debian/control
index 14ac6958c..ddba52be7 100644
--- a/debian/control
+++ b/debian/control
@@ -91,7 +91,6 @@ Build-Depends: automake,
python3-all-dev,
python3-cherrypy3,
python3-natsort,
- python3-jwt <pkg.ceph.check>,
python3-pecan <pkg.ceph.check>,
python3-bcrypt <pkg.ceph.check>,
tox <pkg.ceph.check>,
@@ -353,6 +352,30 @@ Description: debugging symbols for ceph-mgr
.
This package contains the debugging symbols for ceph-mgr.
+Package: ceph-exporter
+Architecture: linux-any
+Depends: ceph-base (= ${binary:Version}),
+Description: metrics exporter for the ceph distributed storage system
+ Ceph is a massively scalable, open-source, distributed
+ storage system that runs on commodity hardware and delivers object,
+ block and file system storage.
+ .
+ This package contains the metrics exporter daemon, which is used to expose
+ the performance metrics.
+
+Package: ceph-exporter-dbg
+Architecture: linux-any
+Section: debug
+Priority: extra
+Depends: ceph-exporter (= ${binary:Version}),
+ ${misc:Depends},
+Description: debugging symbols for ceph-exporter
+ Ceph is a massively scalable, open-source, distributed
+ storage system that runs on commodity hardware and delivers object,
+ block and file system storage.
+ .
+ This package contains the debugging symbols for ceph-exporter.
+
Package: ceph-mon
Architecture: linux-any
Depends: ceph-base (= ${binary:Version}),
diff --git a/debian/rules b/debian/rules
index ed7f4a255..68c69e044 100755
--- a/debian/rules
+++ b/debian/rules
@@ -105,6 +105,7 @@ override_dh_strip:
dh_strip -pceph-mds --dbg-package=ceph-mds-dbg
dh_strip -pceph-fuse --dbg-package=ceph-fuse-dbg
dh_strip -pceph-mgr --dbg-package=ceph-mgr-dbg
+ dh_strip -pceph-exporter --dbg-package=ceph-exporter-dbg
dh_strip -pceph-mon --dbg-package=ceph-mon-dbg
dh_strip -pceph-osd --dbg-package=ceph-osd-dbg
dh_strip -pceph-base --dbg-package=ceph-base-dbg
diff --git a/doc/cephfs/administration.rst b/doc/cephfs/administration.rst
index cd912b42a..7244c41f0 100644
--- a/doc/cephfs/administration.rst
+++ b/doc/cephfs/administration.rst
@@ -258,31 +258,47 @@ Clients that are missing newly added features will be evicted automatically.
Here are the current CephFS features and first release they came out:
-+------------------+--------------+-----------------+
-| Feature | Ceph release | Upstream Kernel |
-+==================+==============+=================+
-| jewel | jewel | 4.5 |
-+------------------+--------------+-----------------+
-| kraken | kraken | 4.13 |
-+------------------+--------------+-----------------+
-| luminous | luminous | 4.13 |
-+------------------+--------------+-----------------+
-| mimic | mimic | 4.19 |
-+------------------+--------------+-----------------+
-| reply_encoding | nautilus | 5.1 |
-+------------------+--------------+-----------------+
-| reclaim_client | nautilus | N/A |
-+------------------+--------------+-----------------+
-| lazy_caps_wanted | nautilus | 5.1 |
-+------------------+--------------+-----------------+
-| multi_reconnect | nautilus | 5.1 |
-+------------------+--------------+-----------------+
-| deleg_ino | octopus | 5.6 |
-+------------------+--------------+-----------------+
-| metric_collect | pacific | N/A |
-+------------------+--------------+-----------------+
-| alternate_name | pacific | PLANNED |
-+------------------+--------------+-----------------+
++----------------------------+--------------+-----------------+
+| Feature | Ceph release | Upstream Kernel |
++============================+==============+=================+
+| jewel | jewel | 4.5 |
++----------------------------+--------------+-----------------+
+| kraken | kraken | 4.13 |
++----------------------------+--------------+-----------------+
+| luminous | luminous | 4.13 |
++----------------------------+--------------+-----------------+
+| mimic | mimic | 4.19 |
++----------------------------+--------------+-----------------+
+| reply_encoding | nautilus | 5.1 |
++----------------------------+--------------+-----------------+
+| reclaim_client | nautilus | N/A |
++----------------------------+--------------+-----------------+
+| lazy_caps_wanted | nautilus | 5.1 |
++----------------------------+--------------+-----------------+
+| multi_reconnect | nautilus | 5.1 |
++----------------------------+--------------+-----------------+
+| deleg_ino | octopus | 5.6 |
++----------------------------+--------------+-----------------+
+| metric_collect | pacific | N/A |
++----------------------------+--------------+-----------------+
+| alternate_name | pacific | 6.5 |
++----------------------------+--------------+-----------------+
+| notify_session_state | quincy | 5.19 |
++----------------------------+--------------+-----------------+
+| op_getvxattr | quincy | 6.0 |
++----------------------------+--------------+-----------------+
+| 32bits_retry_fwd | reef | 6.6 |
++----------------------------+--------------+-----------------+
+| new_snaprealm_info | reef | UNKNOWN |
++----------------------------+--------------+-----------------+
+| has_owner_uidgid | reef | 6.6 |
++----------------------------+--------------+-----------------+
+| client_mds_auth_caps | squid+bp | PLANNED |
++----------------------------+--------------+-----------------+
+
+..
+ Comment: use `git describe --tags --abbrev=0 <commit>` to lookup release
+
CephFS Feature Descriptions
@@ -340,6 +356,15 @@ Clients can send performance metric to MDS if MDS support this feature.
Clients can set and understand "alternate names" for directory entries. This is
to be used for encrypted file name support.
+::
+
+ client_mds_auth_caps
+
+To effectively implement ``root_squash`` in a client's ``mds`` caps, the client
+must understand that it is enforcing ``root_squash`` and other cap metadata.
+Clients without this feature are in danger of dropping updates to files. It is
+recommend to set this feature bit.
+
Global settings
---------------
diff --git a/doc/cephfs/health-messages.rst b/doc/cephfs/health-messages.rst
index 8fb23715d..0f171c6cc 100644
--- a/doc/cephfs/health-messages.rst
+++ b/doc/cephfs/health-messages.rst
@@ -252,3 +252,20 @@ other daemons, please see :ref:`health-checks`.
dirty data for cap revokes). If ``defer_client_eviction_on_laggy_osds`` is
set to true (default true), client eviction will not take place and thus
this health warning will be generated.
+
+``MDS_CLIENTS_BROKEN_ROOTSQUASH``
+---------------------------------
+ Message
+ "X client(s) with broken root_squash implementation (MDS_CLIENTS_BROKEN_ROOTSQUASH)"
+
+ Description
+ A bug was discovered in root_squash which would potentially lose changes made by a
+ client restricted with root_squash caps. The fix required a change to the protocol
+ and a client upgrade is required.
+
+ This is a HEALTH_ERR warning because of the danger of inconsistency and lost
+ data. It is recommended to either upgrade your clients, discontinue using
+ root_squash in the interim, or silence the warning if desired.
+
+ To evict and permanently block broken clients from connecting to the
+ cluster, set the ``required_client_feature`` bit ``client_mds_auth_caps``.
diff --git a/qa/distros/a-supported-distro.yaml b/qa/distros/a-supported-distro.yaml
deleted file mode 120000
index 33a40b6e4..000000000
--- a/qa/distros/a-supported-distro.yaml
+++ /dev/null
@@ -1 +0,0 @@
-all/centos_7.2.yaml \ No newline at end of file
diff --git a/qa/distros/all/centos_7.6.yaml b/qa/distros/all/centos_7.6.yaml
index 81014e102..1eddf680c 100644
--- a/qa/distros/all/centos_7.6.yaml
+++ b/qa/distros/all/centos_7.6.yaml
@@ -2,6 +2,6 @@ os_type: centos
os_version: "7.6"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/centos_8.0.yaml b/qa/distros/all/centos_8.0.yaml
index 1679bf0d5..787bbfeb0 100644
--- a/qa/distros/all/centos_8.0.yaml
+++ b/qa/distros/all/centos_8.0.yaml
@@ -2,6 +2,6 @@ os_type: centos
os_version: "8.0"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/centos_8.1.yaml b/qa/distros/all/centos_8.1.yaml
index f764e5079..986e74abf 100644
--- a/qa/distros/all/centos_8.1.yaml
+++ b/qa/distros/all/centos_8.1.yaml
@@ -2,6 +2,6 @@ os_type: centos
os_version: "8.1"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/centos_8.2.yaml b/qa/distros/all/centos_8.2.yaml
index 1ccbd8abd..d9f6178c6 100644
--- a/qa/distros/all/centos_8.2.yaml
+++ b/qa/distros/all/centos_8.2.yaml
@@ -2,6 +2,6 @@ os_type: centos
os_version: "8.2"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/centos_8.3.yaml b/qa/distros/all/centos_8.3.yaml
index b9a7c2579..54e1c3b11 100644
--- a/qa/distros/all/centos_8.3.yaml
+++ b/qa/distros/all/centos_8.3.yaml
@@ -2,6 +2,6 @@ os_type: centos
os_version: "8.3"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/centos_8.stream.yaml b/qa/distros/all/centos_8.stream.yaml
index 5ae75c6be..f9607d2c6 100644
--- a/qa/distros/all/centos_8.stream.yaml
+++ b/qa/distros/all/centos_8.stream.yaml
@@ -2,6 +2,6 @@ os_type: centos
os_version: "8.stream"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/centos_9.stream.yaml b/qa/distros/all/centos_9.stream.yaml
index 52d553bd6..7fe93afcf 100644
--- a/qa/distros/all/centos_9.stream.yaml
+++ b/qa/distros/all/centos_9.stream.yaml
@@ -1,2 +1,6 @@
os_type: centos
os_version: "9.stream"
+overrides:
+ selinux:
+ allowlist:
+ - scontext=system_u:system_r:getty_t:s0
diff --git a/qa/distros/all/rhel_7.6.yaml b/qa/distros/all/rhel_7.6.yaml
index 37bc0fb4a..5a0753014 100644
--- a/qa/distros/all/rhel_7.6.yaml
+++ b/qa/distros/all/rhel_7.6.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "7.6"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/rhel_7.7.yaml b/qa/distros/all/rhel_7.7.yaml
index ac44fe18e..654c73177 100644
--- a/qa/distros/all/rhel_7.7.yaml
+++ b/qa/distros/all/rhel_7.7.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "7.7"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/rhel_8.0.yaml b/qa/distros/all/rhel_8.0.yaml
index da6a33ed0..760573990 100644
--- a/qa/distros/all/rhel_8.0.yaml
+++ b/qa/distros/all/rhel_8.0.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "8.0"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/rhel_8.1.yaml b/qa/distros/all/rhel_8.1.yaml
index c73893149..4b0439c0f 100644
--- a/qa/distros/all/rhel_8.1.yaml
+++ b/qa/distros/all/rhel_8.1.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "8.1"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/rhel_8.3.yaml b/qa/distros/all/rhel_8.3.yaml
index 4e44bbff5..48414fe75 100644
--- a/qa/distros/all/rhel_8.3.yaml
+++ b/qa/distros/all/rhel_8.3.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "8.3"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/rhel_8.4.yaml b/qa/distros/all/rhel_8.4.yaml
index 5a299ffc5..2d4088392 100644
--- a/qa/distros/all/rhel_8.4.yaml
+++ b/qa/distros/all/rhel_8.4.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "8.4"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/rhel_8.5.yaml b/qa/distros/all/rhel_8.5.yaml
index 3e02bb196..591b22661 100644
--- a/qa/distros/all/rhel_8.5.yaml
+++ b/qa/distros/all/rhel_8.5.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "8.5"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/all/rhel_8.6.yaml b/qa/distros/all/rhel_8.6.yaml
index 1f9a6b73f..f70647ed8 100644
--- a/qa/distros/all/rhel_8.6.yaml
+++ b/qa/distros/all/rhel_8.6.yaml
@@ -2,6 +2,6 @@ os_type: rhel
os_version: "8.6"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
ktype: distro
diff --git a/qa/distros/container-hosts/centos_8.stream_container_tools.yaml b/qa/distros/container-hosts/centos_8.stream_container_tools.yaml
index 4a76306f1..3dad3b845 100644
--- a/qa/distros/container-hosts/centos_8.stream_container_tools.yaml
+++ b/qa/distros/container-hosts/centos_8.stream_container_tools.yaml
@@ -2,7 +2,7 @@ os_type: centos
os_version: "8.stream"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
tasks:
diff --git a/qa/distros/container-hosts/centos_8.stream_container_tools_crun.yaml b/qa/distros/container-hosts/centos_8.stream_container_tools_crun.yaml
index b06e1c87d..d1d395b93 100644
--- a/qa/distros/container-hosts/centos_8.stream_container_tools_crun.yaml
+++ b/qa/distros/container-hosts/centos_8.stream_container_tools_crun.yaml
@@ -2,7 +2,7 @@ os_type: centos
os_version: "8.stream"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
tasks:
diff --git a/qa/distros/container-hosts/centos_9.stream.yaml b/qa/distros/container-hosts/centos_9.stream.yaml
new file mode 100644
index 000000000..45295bb4a
--- /dev/null
+++ b/qa/distros/container-hosts/centos_9.stream.yaml
@@ -0,0 +1,11 @@
+os_type: centos
+os_version: "9.stream"
+overrides:
+ selinux:
+ whitelist:
+ - scontext=system_u:system_r:logrotate_t:s0
+
+tasks:
+- pexec:
+ all:
+ - sudo dnf install nvmetcli nvme-cli -y
diff --git a/qa/distros/container-hosts/centos_9.stream_runc.yaml b/qa/distros/container-hosts/centos_9.stream_runc.yaml
new file mode 100644
index 000000000..ed9cb9cc8
--- /dev/null
+++ b/qa/distros/container-hosts/centos_9.stream_runc.yaml
@@ -0,0 +1,13 @@
+os_type: centos
+os_version: "9.stream"
+overrides:
+ selinux:
+ whitelist:
+ - scontext=system_u:system_r:logrotate_t:s0
+
+tasks:
+- pexec:
+ all:
+ - sudo dnf install runc nvmetcli nvme-cli -y
+ - sudo sed -i 's/^#runtime = "crun"/runtime = "runc"/g' /usr/share/containers/containers.conf
+ - sudo sed -i 's/runtime = "crun"/#runtime = "crun"/g' /usr/share/containers/containers.conf
diff --git a/qa/distros/container-hosts/rhel_8.6_container_tools_3.0.yaml b/qa/distros/container-hosts/rhel_8.6_container_tools_3.0.yaml
deleted file mode 100644
index 361d8546e..000000000
--- a/qa/distros/container-hosts/rhel_8.6_container_tools_3.0.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-os_type: rhel
-os_version: "8.6"
-overrides:
- selinux:
- whitelist:
- - scontext=system_u:system_r:logrotate_t:s0
-tasks:
-- pexec:
- all:
- - sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.backup
- - sudo dnf -y module reset container-tools
- - sudo dnf -y module install container-tools:3.0 --allowerasing --nobest
- - sudo cp /etc/containers/registries.conf.backup /etc/containers/registries.conf
diff --git a/qa/distros/container-hosts/rhel_8.6_container_tools_rhel8.yaml b/qa/distros/container-hosts/rhel_8.6_container_tools_rhel8.yaml
deleted file mode 100644
index be94ed69e..000000000
--- a/qa/distros/container-hosts/rhel_8.6_container_tools_rhel8.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-os_type: rhel
-os_version: "8.6"
-overrides:
- selinux:
- whitelist:
- - scontext=system_u:system_r:logrotate_t:s0
-tasks:
-- pexec:
- all:
- - sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.backup
- - sudo dnf -y module reset container-tools
- - sudo dnf -y module install container-tools:rhel8 --allowerasing --nobest
- - sudo cp /etc/containers/registries.conf.backup /etc/containers/registries.conf
diff --git a/qa/distros/container-hosts/ubuntu_22.04.yaml b/qa/distros/container-hosts/ubuntu_22.04.yaml
new file mode 120000
index 000000000..0a708b4db
--- /dev/null
+++ b/qa/distros/container-hosts/ubuntu_22.04.yaml
@@ -0,0 +1 @@
+.qa/distros/all/ubuntu_22.04.yaml \ No newline at end of file
diff --git a/qa/distros/crimson-supported-all-distro/centos_8.yaml b/qa/distros/crimson-supported-all-distro/centos_8.yaml
deleted file mode 120000
index b7e6c9b4e..000000000
--- a/qa/distros/crimson-supported-all-distro/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../all/centos_8.yaml \ No newline at end of file
diff --git a/qa/distros/podman/centos_8.stream_container_tools.yaml b/qa/distros/podman/centos_8.stream_container_tools.yaml
index 4a76306f1..3dad3b845 100644
--- a/qa/distros/podman/centos_8.stream_container_tools.yaml
+++ b/qa/distros/podman/centos_8.stream_container_tools.yaml
@@ -2,7 +2,7 @@ os_type: centos
os_version: "8.stream"
overrides:
selinux:
- whitelist:
+ allowlist:
- scontext=system_u:system_r:logrotate_t:s0
tasks:
diff --git a/qa/distros/podman/centos_9.stream.yaml b/qa/distros/podman/centos_9.stream.yaml
new file mode 100644
index 000000000..d3bc430e6
--- /dev/null
+++ b/qa/distros/podman/centos_9.stream.yaml
@@ -0,0 +1,7 @@
+os_type: centos
+os_version: "9.stream"
+overrides:
+ selinux:
+ whitelist:
+ - scontext=system_u:system_r:logrotate_t:s0
+
diff --git a/qa/distros/podman/rhel_8.6_container_tools_3.0.yaml b/qa/distros/podman/rhel_8.6_container_tools_3.0.yaml
deleted file mode 100644
index 361d8546e..000000000
--- a/qa/distros/podman/rhel_8.6_container_tools_3.0.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-os_type: rhel
-os_version: "8.6"
-overrides:
- selinux:
- whitelist:
- - scontext=system_u:system_r:logrotate_t:s0
-tasks:
-- pexec:
- all:
- - sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.backup
- - sudo dnf -y module reset container-tools
- - sudo dnf -y module install container-tools:3.0 --allowerasing --nobest
- - sudo cp /etc/containers/registries.conf.backup /etc/containers/registries.conf
diff --git a/qa/distros/podman/rhel_8.6_container_tools_rhel8.yaml b/qa/distros/podman/rhel_8.6_container_tools_rhel8.yaml
deleted file mode 100644
index be94ed69e..000000000
--- a/qa/distros/podman/rhel_8.6_container_tools_rhel8.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-os_type: rhel
-os_version: "8.6"
-overrides:
- selinux:
- whitelist:
- - scontext=system_u:system_r:logrotate_t:s0
-tasks:
-- pexec:
- all:
- - sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.backup
- - sudo dnf -y module reset container-tools
- - sudo dnf -y module install container-tools:rhel8 --allowerasing --nobest
- - sudo cp /etc/containers/registries.conf.backup /etc/containers/registries.conf
diff --git a/qa/distros/single-container-host.yaml b/qa/distros/single-container-host.yaml
index f71756d42..08e1be9c2 120000
--- a/qa/distros/single-container-host.yaml
+++ b/qa/distros/single-container-host.yaml
@@ -1 +1 @@
-container-hosts/centos_8.stream_container_tools_crun.yaml \ No newline at end of file
+container-hosts/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/distros/supported-all-distro/centos_8.yaml b/qa/distros/supported-all-distro/centos_8.yaml
deleted file mode 120000
index b7e6c9b4e..000000000
--- a/qa/distros/supported-all-distro/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../all/centos_8.yaml \ No newline at end of file
diff --git a/qa/distros/supported-all-distro/rhel_8.yaml b/qa/distros/supported-all-distro/rhel_8.yaml
deleted file mode 120000
index f803f091e..000000000
--- a/qa/distros/supported-all-distro/rhel_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../all/rhel_8.yaml \ No newline at end of file
diff --git a/qa/distros/supported-container-hosts/centos_9.stream.yaml b/qa/distros/supported-container-hosts/centos_9.stream.yaml
new file mode 120000
index 000000000..584cad677
--- /dev/null
+++ b/qa/distros/supported-container-hosts/centos_9.stream.yaml
@@ -0,0 +1 @@
+../container-hosts/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/distros/supported-container-hosts/centos_9.stream_runc.yaml b/qa/distros/supported-container-hosts/centos_9.stream_runc.yaml
new file mode 120000
index 000000000..81b17ea14
--- /dev/null
+++ b/qa/distros/supported-container-hosts/centos_9.stream_runc.yaml
@@ -0,0 +1 @@
+../container-hosts/centos_9.stream_runc.yaml \ No newline at end of file
diff --git a/qa/distros/supported-container-hosts/ubuntu_22.04.yaml b/qa/distros/supported-container-hosts/ubuntu_22.04.yaml
new file mode 120000
index 000000000..01afa8a63
--- /dev/null
+++ b/qa/distros/supported-container-hosts/ubuntu_22.04.yaml
@@ -0,0 +1 @@
+../container-hosts/ubuntu_22.04.yaml \ No newline at end of file
diff --git a/qa/distros/supported-random-distro$/centos_8.yaml b/qa/distros/supported-random-distro$/centos_8.yaml
deleted file mode 120000
index b7e6c9b4e..000000000
--- a/qa/distros/supported-random-distro$/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../all/centos_8.yaml \ No newline at end of file
diff --git a/qa/distros/supported-random-distro$/rhel_8.yaml b/qa/distros/supported-random-distro$/rhel_8.yaml
deleted file mode 120000
index f803f091e..000000000
--- a/qa/distros/supported-random-distro$/rhel_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../all/rhel_8.yaml \ No newline at end of file
diff --git a/qa/distros/supported/centos_8.stream.yaml b/qa/distros/supported/centos_8.stream.yaml
deleted file mode 120000
index e96091bb1..000000000
--- a/qa/distros/supported/centos_8.stream.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../all/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/distros/supported/rhel_latest.yaml b/qa/distros/supported/rhel_latest.yaml
deleted file mode 120000
index f803f091e..000000000
--- a/qa/distros/supported/rhel_latest.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../all/rhel_8.yaml \ No newline at end of file
diff --git a/qa/suites/crimson-rados/basic/centos_8.stream.yaml b/qa/suites/crimson-rados/basic/centos_8.stream.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/crimson-rados/basic/centos_8.stream.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/crimson-rados/rbd/centos_8.stream.yaml b/qa/suites/crimson-rados/rbd/centos_8.stream.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/crimson-rados/rbd/centos_8.stream.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/crimson-rados/thrash/centos_8.stream.yaml b/qa/suites/crimson-rados/thrash/centos_8.stream.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/crimson-rados/thrash/centos_8.stream.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/centos_8.stream.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/centos_8.stream.yaml
new file mode 120000
index 000000000..e787191b5
--- /dev/null
+++ b/qa/suites/fs/upgrade/featureful_client/old_client/centos_8.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/centos_8.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/centos_8.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/fs/upgrade/featureful_client/old_client/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/centos_9.stream.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/centos_9.stream.yaml
new file mode 120000
index 000000000..dc442c241
--- /dev/null
+++ b/qa/suites/fs/upgrade/featureful_client/old_client/centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-octopus.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-from/quincy.yaml
index e7774423f..7d3611649 100644
--- a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-octopus.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-from/quincy.yaml
@@ -1,9 +1,9 @@
meta:
- desc: |
- install ceph/octopus latest
+ install ceph/quincy latest
tasks:
- install:
- branch: octopus
+ branch: quincy
exclude_packages:
- librados3
- ceph-mgr-dashboard
@@ -13,7 +13,7 @@ tasks:
- cephadm
- ceph-volume
extra_packages: ['librados2']
-- print: "**** done installing octopus"
+- print: "**** done installing quincy"
- ceph:
log-ignorelist:
- overall HEALTH_
@@ -35,5 +35,5 @@ tasks:
ms bind msgr2: false
- exec:
osd.0:
- - ceph osd set-require-min-compat-client octopus
+ - ceph osd set-require-min-compat-client quincy
- print: "**** done ceph"
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml
index 976d6e265..f545d8bfa 100644
--- a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml
@@ -1,6 +1,10 @@
tasks:
- ceph-fuse:
-- print: "**** done octopus client"
+ client.0:
+ client_feature_range: "[0-13],[15-21]"
+ client.1:
+ client_feature_range: "[0-13],[15-21]"
+- print: "**** done client"
- workunit:
clients:
all:
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml
index 26c185946..928c40d20 100644
--- a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml
@@ -22,7 +22,6 @@ tasks:
- install.upgrade:
# upgrade the single cluster node, which is running all the mon/mds/osd/mgr daemons
mon.a:
- branch: quincy
- print: "**** done install.upgrade the host"
- ceph.restart:
daemons: [mon.*, mgr.*]
@@ -42,7 +41,7 @@ tasks:
mon.a:
- ceph osd dump -f json-pretty
- ceph versions
- - ceph osd require-osd-release quincy
+ - ceph osd require-osd-release reef
- for f in `ceph osd pool ls` ; do ceph osd pool set $f pg_autoscale_mode off ; done
- ceph.healthy:
- print: "**** done ceph.restart"
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/quincy.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/yes.yaml
index 138d8f4e2..138d8f4e2 100644
--- a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/quincy.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/yes.yaml
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.stream.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.stream.yaml
new file mode 120000
index 000000000..e787191b5
--- /dev/null
+++ b/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_9.stream.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_9.stream.yaml
new file mode 120000
index 000000000..dc442c241
--- /dev/null
+++ b/qa/suites/fs/upgrade/featureful_client/upgraded_client/centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-octopus.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-from/quincy.yaml
index e7774423f..7d3611649 100644
--- a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-octopus.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-from/quincy.yaml
@@ -1,9 +1,9 @@
meta:
- desc: |
- install ceph/octopus latest
+ install ceph/quincy latest
tasks:
- install:
- branch: octopus
+ branch: quincy
exclude_packages:
- librados3
- ceph-mgr-dashboard
@@ -13,7 +13,7 @@ tasks:
- cephadm
- ceph-volume
extra_packages: ['librados2']
-- print: "**** done installing octopus"
+- print: "**** done installing quincy"
- ceph:
log-ignorelist:
- overall HEALTH_
@@ -35,5 +35,5 @@ tasks:
ms bind msgr2: false
- exec:
osd.0:
- - ceph osd set-require-min-compat-client octopus
+ - ceph osd set-require-min-compat-client quincy
- print: "**** done ceph"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml
index c9b4c046f..3485dd680 100644
--- a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml
@@ -3,9 +3,11 @@ overrides:
nuke-on-error: false
tasks:
- ceph-fuse:
-- print: "**** done octopus client"
-#- workunit:
-# clients:
-# all:
-# - suites/fsstress.sh
+ client.1:
+ client_feature_range: "[0-13],[15-21]"
+- print: "**** done client"
+- workunit:
+ clients:
+ all:
+ - suites/fsstress.sh
- print: "**** done fsstress"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml
index e5ea8b19c..c1d65d25c 100644
--- a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml
@@ -22,7 +22,6 @@ tasks:
- install.upgrade:
# upgrade the single cluster node, which is running all the mon/mds/osd/mgr daemons
mon.a:
- branch: quincy
- print: "**** done install.upgrade the host"
- ceph.restart:
daemons: [mon.*, mgr.*]
@@ -42,7 +41,7 @@ tasks:
mon.a:
- ceph versions
- ceph osd dump -f json-pretty
- - ceph osd require-osd-release quincy
+ - ceph osd require-osd-release reef
- for f in `ceph osd pool ls` ; do ceph osd pool set $f pg_autoscale_mode off ; done
- ceph.healthy:
- print: "**** done ceph.restart"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml
index 251c349ac..58fdfdbd8 100644
--- a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml
+++ b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml
@@ -1,7 +1,6 @@
tasks:
- install.upgrade:
client.0:
- branch: quincy
- print: "**** done install.upgrade on client.0"
- ceph-fuse:
client.0:
diff --git a/qa/suites/fs/upgrade/mds_upgrade_sequence/centos_8.stream_container_tools.yaml b/qa/suites/fs/upgrade/mds_upgrade_sequence/centos_8.stream_container_tools.yaml
deleted file mode 120000
index 7a86f967f..000000000
--- a/qa/suites/fs/upgrade/mds_upgrade_sequence/centos_8.stream_container_tools.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/podman/centos_8.stream_container_tools.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/mds_upgrade_sequence/centos_9.stream.yaml b/qa/suites/fs/upgrade/mds_upgrade_sequence/centos_9.stream.yaml
new file mode 120000
index 000000000..dc442c241
--- /dev/null
+++ b/qa/suites/fs/upgrade/mds_upgrade_sequence/centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/nofs/centos_8.stream.yaml b/qa/suites/fs/upgrade/nofs/centos_8.stream.yaml
new file mode 120000
index 000000000..e787191b5
--- /dev/null
+++ b/qa/suites/fs/upgrade/nofs/centos_8.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/nofs/centos_8.yaml b/qa/suites/fs/upgrade/nofs/centos_8.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/fs/upgrade/nofs/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/nofs/centos_9.stream.yaml b/qa/suites/fs/upgrade/nofs/centos_9.stream.yaml
new file mode 120000
index 000000000..dc442c241
--- /dev/null
+++ b/qa/suites/fs/upgrade/nofs/centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/nofs/tasks/0-pacific.yaml b/qa/suites/fs/upgrade/nofs/tasks/0-from/quincy.yaml
index b74accc69..7d3611649 100644
--- a/qa/suites/fs/upgrade/nofs/tasks/0-pacific.yaml
+++ b/qa/suites/fs/upgrade/nofs/tasks/0-from/quincy.yaml
@@ -1,9 +1,9 @@
meta:
- desc: |
- install ceph/pacific latest
+ install ceph/quincy latest
tasks:
- install:
- branch: pacific
+ branch: quincy
exclude_packages:
- librados3
- ceph-mgr-dashboard
@@ -13,7 +13,7 @@ tasks:
- cephadm
- ceph-volume
extra_packages: ['librados2']
-- print: "**** done installing pacific"
+- print: "**** done installing quincy"
- ceph:
log-ignorelist:
- overall HEALTH_
@@ -35,5 +35,5 @@ tasks:
ms bind msgr2: false
- exec:
osd.0:
- - ceph osd set-require-min-compat-client pacific
+ - ceph osd set-require-min-compat-client quincy
- print: "**** done ceph"
diff --git a/qa/suites/fs/upgrade/nofs/tasks/1-upgrade.yaml b/qa/suites/fs/upgrade/nofs/tasks/1-upgrade.yaml
index 858142871..253013000 100644
--- a/qa/suites/fs/upgrade/nofs/tasks/1-upgrade.yaml
+++ b/qa/suites/fs/upgrade/nofs/tasks/1-upgrade.yaml
@@ -38,7 +38,7 @@ tasks:
- ceph versions
- ceph osd dump -f json-pretty
- ceph fs dump
- - ceph osd require-osd-release quincy
+ - ceph osd require-osd-release reef
- for f in `ceph osd pool ls` ; do ceph osd pool set $f pg_autoscale_mode off ; done
- ceph.healthy:
- print: "**** done ceph.restart"
diff --git a/qa/suites/fs/upgrade/upgraded_client/centos_8.stream.yaml b/qa/suites/fs/upgrade/upgraded_client/centos_8.stream.yaml
new file mode 120000
index 000000000..e787191b5
--- /dev/null
+++ b/qa/suites/fs/upgrade/upgraded_client/centos_8.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/centos_8.yaml b/qa/suites/fs/upgrade/upgraded_client/centos_8.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/fs/upgrade/upgraded_client/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/centos_9.stream.yaml b/qa/suites/fs/upgrade/upgraded_client/centos_9.stream.yaml
new file mode 120000
index 000000000..dc442c241
--- /dev/null
+++ b/qa/suites/fs/upgrade/upgraded_client/centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/all/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/0-from/nautilus.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/0-from/nautilus.yaml
deleted file mode 100644
index 02f541eaf..000000000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/0-from/nautilus.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
-meta:
-- desc: |
- install ceph/nautilus latest
-tasks:
-- install:
- branch: nautilus
- exclude_packages:
- - cephadm
- - ceph-mgr-cephadm
- - ceph-immutable-object-cache
- - python3-rados
- - python3-rgw
- - python3-rbd
- - python3-cephfs
- - ceph-volume
- extra_packages:
- - python-rados
- - python-rgw
- - python-rbd
- - python-cephfs
- # For kernel_untar_build workunit
- extra_system_packages:
- - bison
- - flex
- - elfutils-libelf-devel
- - openssl-devel
- - NetworkManager
- - iproute
- - util-linux
-- print: "**** done installing nautilus"
-- ceph:
- log-ignorelist:
- - overall HEALTH_
- - \(FS_
- - \(MDS_
- - \(OSD_
- - \(MON_DOWN\)
- - \(CACHE_POOL_
- - \(POOL_
- - \(MGR_DOWN\)
- - \(PG_
- - \(SMALLER_PGP_NUM\)
- - Monitor daemon marked osd
- - Behind on trimming
- - Manager daemon
- conf:
- global:
- mon warn on pool no app: false
- ms bind msgr2: false
-- exec:
- osd.0:
- - ceph osd set-require-min-compat-client nautilus
-- print: "**** done ceph"
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/0-from/pacific.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/0-install/quincy.yaml
index defb03922..356f87787 100644
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/0-from/pacific.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/0-install/quincy.yaml
@@ -1,9 +1,9 @@
meta:
- desc: |
- install ceph/pacific latest
+ install ceph/quincy latest
tasks:
- install:
- branch: pacific
+ branch: quincy
exclude_packages:
- cephadm
- ceph-mgr-cephadm
@@ -27,7 +27,7 @@ tasks:
- NetworkManager
- iproute
- util-linux
-- print: "**** done installing pacific"
+- print: "**** done installing quincy"
- ceph:
log-ignorelist:
- overall HEALTH_
@@ -49,5 +49,5 @@ tasks:
ms bind msgr2: false
- exec:
osd.0:
- - ceph osd set-require-min-compat-client pacific
-- print: "**** done ceph"
+ - ceph osd set-require-min-compat-client quincy
+- print: "**** done ceph" \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/0-clients/fuse-upgrade.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/2-clients/fuse-upgrade.yaml
index 34c85a00e..bed83610f 100644
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/0-clients/fuse-upgrade.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/2-clients/fuse-upgrade.yaml
@@ -9,6 +9,7 @@ tasks:
- install.upgrade:
client.0:
- print: "**** done install.upgrade on client.0"
+- ceph.healthy:
- ceph-fuse:
client.0:
-- print: "**** done remount client"
+- print: "**** done remount client.0"
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/0-clients/kclient.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/2-clients/kclient.yaml
index ecc705600..ecc705600 100644
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/0-clients/kclient.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/2-clients/kclient.yaml
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/.qa b/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/.qa
deleted file mode 120000
index a602a0353..000000000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/.qa
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/ \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/% b/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/%
deleted file mode 100644
index e69de29bb..000000000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/%
+++ /dev/null
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/.qa b/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/.qa
deleted file mode 120000
index a602a0353..000000000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/.qa
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/ \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/0-client-upgrade.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/0-client-upgrade.yaml
deleted file mode 100644
index 2d948af19..000000000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/0-client-upgrade.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-teuthology:
- postmerge:
- - if not is_fuse() then reject() end
-tasks:
-- ceph-fuse:
- client.0:
- mounted: false
-- print: "**** done unmount client.0"
-- install.upgrade:
- client.0:
-- print: "**** done install.upgrade on client.0"
-- ceph-fuse:
- client.0:
-- print: "**** done remount client.0"
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/.qa b/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/.qa
deleted file mode 120000
index a602a0353..000000000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/.qa
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/ \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/.qa b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/.qa
new file mode 120000
index 000000000..fea2489fd
--- /dev/null
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/.qa
@@ -0,0 +1 @@
+../.qa \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/% b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/new_ops/%
index e69de29bb..e69de29bb 100644
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/%
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/new_ops/%
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/1-client-sanity.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/new_ops/newops.yaml
index 9508cce65..9508cce65 100644
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/new_ops/1-client-sanity.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/new_ops/newops.yaml
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/.qa b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/.qa
new file mode 120000
index 000000000..fea2489fd
--- /dev/null
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/.qa
@@ -0,0 +1 @@
+../.qa \ No newline at end of file
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/blogbench.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/blogbench.yaml
index a2f8b3052..a2f8b3052 120000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/blogbench.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/blogbench.yaml
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/dbench.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/dbench.yaml
index 9fb8adcea..9fb8adcea 120000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/dbench.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/dbench.yaml
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/fsstress.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/fsstress.yaml
index dc777f36d..dc777f36d 120000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/fsstress.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/fsstress.yaml
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/iozone.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/iozone.yaml
index f4d0ead4f..f4d0ead4f 120000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/iozone.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/iozone.yaml
diff --git a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/kernel_untar_build.yaml b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/kernel_untar_build.yaml
index 317ebf8c4..317ebf8c4 120000
--- a/qa/suites/fs/upgrade/upgraded_client/tasks/2-workload/stress_tests/1-tests/kernel_untar_build.yaml
+++ b/qa/suites/fs/upgrade/upgraded_client/tasks/3-workload/stress_tests/kernel_untar_build.yaml
diff --git a/qa/suites/fs/workload/0-centos_9.stream.yaml b/qa/suites/fs/workload/0-centos_9.stream.yaml
new file mode 120000
index 000000000..dca92ddbf
--- /dev/null
+++ b/qa/suites/fs/workload/0-centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/podman/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/fs/workload/0-rhel_8.yaml b/qa/suites/fs/workload/0-rhel_8.yaml
deleted file mode 120000
index c9abcd7b8..000000000
--- a/qa/suites/fs/workload/0-rhel_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/podman/rhel_8.6_container_tools_rhel8.yaml \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_8.stream_container_tools.yaml b/qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_8.stream_container_tools.yaml
deleted file mode 120000
index 7a86f967f..000000000
--- a/qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_8.stream_container_tools.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/podman/centos_8.stream_container_tools.yaml \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_9.stream.yaml b/qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_9.stream.yaml
new file mode 120000
index 000000000..dca92ddbf
--- /dev/null
+++ b/qa/suites/orch/cephadm/mgr-nfs-upgrade/0-centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/podman/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/no-agent-workunits/0-distro b/qa/suites/orch/cephadm/no-agent-workunits/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/no-agent-workunits/0-distro
+++ b/qa/suites/orch/cephadm/no-agent-workunits/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/orchestrator_cli/0-random-distro$ b/qa/suites/orch/cephadm/orchestrator_cli/0-random-distro$
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/orchestrator_cli/0-random-distro$
+++ b/qa/suites/orch/cephadm/orchestrator_cli/0-random-distro$
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/osds/0-distro b/qa/suites/orch/cephadm/osds/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/osds/0-distro
+++ b/qa/suites/orch/cephadm/osds/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/smoke-roleless/0-distro b/qa/suites/orch/cephadm/smoke-roleless/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/smoke-roleless/0-distro
+++ b/qa/suites/orch/cephadm/smoke-roleless/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/smoke-singlehost/0-random-distro$ b/qa/suites/orch/cephadm/smoke-singlehost/0-random-distro$
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/smoke-singlehost/0-random-distro$
+++ b/qa/suites/orch/cephadm/smoke-singlehost/0-random-distro$
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/smoke-small/0-distro/.qa b/qa/suites/orch/cephadm/smoke-small/0-distro/.qa
new file mode 120000
index 000000000..fea2489fd
--- /dev/null
+++ b/qa/suites/orch/cephadm/smoke-small/0-distro/.qa
@@ -0,0 +1 @@
+../.qa \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/smoke-small/0-distro/centos_8.stream_container_tools_crun.yaml b/qa/suites/orch/cephadm/smoke-small/0-distro/centos_8.stream_container_tools_crun.yaml
deleted file mode 120000
index 83fe02026..000000000
--- a/qa/suites/orch/cephadm/smoke-small/0-distro/centos_8.stream_container_tools_crun.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/distros/container-hosts/centos_8.stream_container_tools_crun.yaml \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/smoke-small/0-distro/centos_9.stream_runc.yaml b/qa/suites/orch/cephadm/smoke-small/0-distro/centos_9.stream_runc.yaml
new file mode 120000
index 000000000..5ef2595cf
--- /dev/null
+++ b/qa/suites/orch/cephadm/smoke-small/0-distro/centos_9.stream_runc.yaml
@@ -0,0 +1 @@
+.qa/distros/container-hosts/centos_9.stream_runc.yaml \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/smoke/0-distro b/qa/suites/orch/cephadm/smoke/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/smoke/0-distro
+++ b/qa/suites/orch/cephadm/smoke/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/thrash/0-distro b/qa/suites/orch/cephadm/thrash/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/thrash/0-distro
+++ b/qa/suites/orch/cephadm/thrash/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/upgrade/1-start-distro/1-start-centos_8.stream_container-tools.yaml b/qa/suites/orch/cephadm/upgrade/1-start-distro/1-start-centos_9.stream.yaml
index bb9a220e6..6272eb0f1 100644
--- a/qa/suites/orch/cephadm/upgrade/1-start-distro/1-start-centos_8.stream_container-tools.yaml
+++ b/qa/suites/orch/cephadm/upgrade/1-start-distro/1-start-centos_9.stream.yaml
@@ -1,13 +1,7 @@
os_type: centos
-os_version: "8.stream"
+os_version: "9.stream"
tasks:
-- pexec:
- all:
- - sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.backup
- - sudo dnf -y module reset container-tools
- - sudo dnf -y module install container-tools
- - sudo cp /etc/containers/registries.conf.backup /etc/containers/registries.conf
- cephadm:
image: quay.io/ceph/ceph:v16.2.0
cephadm_branch: v16.2.0
diff --git a/qa/suites/orch/cephadm/with-work/0-distro b/qa/suites/orch/cephadm/with-work/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/with-work/0-distro
+++ b/qa/suites/orch/cephadm/with-work/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/workunits/0-distro b/qa/suites/orch/cephadm/workunits/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/orch/cephadm/workunits/0-distro
+++ b/qa/suites/orch/cephadm/workunits/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_8.stream_container_tools.yaml b/qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_8.stream_container_tools.yaml
deleted file mode 120000
index 7a86f967f..000000000
--- a/qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_8.stream_container_tools.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/podman/centos_8.stream_container_tools.yaml \ No newline at end of file
diff --git a/qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_9.stream.yaml b/qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_9.stream.yaml
new file mode 120000
index 000000000..dca92ddbf
--- /dev/null
+++ b/qa/suites/orch/cephadm/workunits/task/test_iscsi_container/centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/podman/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/orch/rook/smoke/0-distro/ubuntu_22.04.yaml b/qa/suites/orch/rook/smoke/0-distro/ubuntu_22.04.yaml
new file mode 120000
index 000000000..e4835e4f7
--- /dev/null
+++ b/qa/suites/orch/rook/smoke/0-distro/ubuntu_22.04.yaml
@@ -0,0 +1 @@
+.qa/distros/container-hosts/ubuntu_22.04.yaml \ No newline at end of file
diff --git a/qa/suites/powercycle/osd/supported-all-distro b/qa/suites/powercycle/osd/supported-all-distro
deleted file mode 120000
index ca82dde58..000000000
--- a/qa/suites/powercycle/osd/supported-all-distro
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported-all-distro \ No newline at end of file
diff --git a/qa/suites/powercycle/osd/supported-distros b/qa/suites/powercycle/osd/supported-distros
new file mode 120000
index 000000000..23d9e9be8
--- /dev/null
+++ b/qa/suites/powercycle/osd/supported-distros
@@ -0,0 +1 @@
+.qa/distros/supported \ No newline at end of file
diff --git a/qa/suites/rgw/notifications/centos_latest.yaml b/qa/suites/rgw/notifications/centos_latest.yaml
new file mode 120000
index 000000000..bd9854e70
--- /dev/null
+++ b/qa/suites/rgw/notifications/centos_latest.yaml
@@ -0,0 +1 @@
+.qa/distros/supported/centos_latest.yaml \ No newline at end of file
diff --git a/qa/suites/rgw/notifications/supported-all-distro$/$ b/qa/suites/rgw/notifications/supported-all-distro$/$
deleted file mode 100644
index e69de29bb..000000000
--- a/qa/suites/rgw/notifications/supported-all-distro$/$
+++ /dev/null
diff --git a/qa/suites/rgw/notifications/supported-all-distro$/.qa b/qa/suites/rgw/notifications/supported-all-distro$/.qa
deleted file mode 120000
index a602a0353..000000000
--- a/qa/suites/rgw/notifications/supported-all-distro$/.qa
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/ \ No newline at end of file
diff --git a/qa/suites/rgw/notifications/supported-all-distro$/centos_8.yaml b/qa/suites/rgw/notifications/supported-all-distro$/centos_8.yaml
deleted file mode 120000
index c23fd0540..000000000
--- a/qa/suites/rgw/notifications/supported-all-distro$/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/distros/supported-all-distro/centos_8.yaml \ No newline at end of file
diff --git a/qa/suites/rgw/upgrade/1-install/pacific/distro$/centos_8.stream.yaml b/qa/suites/rgw/upgrade/1-install/pacific/distro$/centos_8.stream.yaml
deleted file mode 120000
index 5dceec7e2..000000000
--- a/qa/suites/rgw/upgrade/1-install/pacific/distro$/centos_8.stream.yaml
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_8.stream.yaml \ No newline at end of file
diff --git a/qa/suites/rgw/upgrade/1-install/pacific/distro$/ubuntu_20.04.yaml b/qa/suites/rgw/upgrade/1-install/pacific/distro$/ubuntu_20.04.yaml
index 29fb99ae2..162964882 120000
--- a/qa/suites/rgw/upgrade/1-install/pacific/distro$/ubuntu_20.04.yaml
+++ b/qa/suites/rgw/upgrade/1-install/pacific/distro$/ubuntu_20.04.yaml
@@ -1 +1 @@
-.qa/distros/supported/ubuntu_20.04.yaml \ No newline at end of file
+.qa/distros/all/ubuntu_20.04.yaml \ No newline at end of file
diff --git a/qa/suites/rgw/upgrade/1-install/quincy/distro$/ubuntu_20.04.yaml b/qa/suites/rgw/upgrade/1-install/quincy/distro$/ubuntu_20.04.yaml
index 29fb99ae2..162964882 120000
--- a/qa/suites/rgw/upgrade/1-install/quincy/distro$/ubuntu_20.04.yaml
+++ b/qa/suites/rgw/upgrade/1-install/quincy/distro$/ubuntu_20.04.yaml
@@ -1 +1 @@
-.qa/distros/supported/ubuntu_20.04.yaml \ No newline at end of file
+.qa/distros/all/ubuntu_20.04.yaml \ No newline at end of file
diff --git a/qa/suites/teuthology/buildpackages/supported-all-distro b/qa/suites/teuthology/buildpackages/supported-all-distro
deleted file mode 120000
index ca82dde58..000000000
--- a/qa/suites/teuthology/buildpackages/supported-all-distro
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported-all-distro \ No newline at end of file
diff --git a/qa/suites/teuthology/buildpackages/supported-distros b/qa/suites/teuthology/buildpackages/supported-distros
new file mode 120000
index 000000000..23d9e9be8
--- /dev/null
+++ b/qa/suites/teuthology/buildpackages/supported-distros
@@ -0,0 +1 @@
+.qa/distros/supported \ No newline at end of file
diff --git a/qa/suites/upgrade/pacific-x/parallel/0-random-distro$ b/qa/suites/upgrade/pacific-x/parallel/0-random-distro$
index 4b341719d..661878557 120000
--- a/qa/suites/upgrade/pacific-x/parallel/0-random-distro$
+++ b/qa/suites/upgrade/pacific-x/parallel/0-random-distro$
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/upgrade/quincy-x/parallel/0-random-distro$ b/qa/suites/upgrade/quincy-x/parallel/0-random-distro$
index 4b341719d..661878557 120000
--- a/qa/suites/upgrade/quincy-x/parallel/0-random-distro$
+++ b/qa/suites/upgrade/quincy-x/parallel/0-random-distro$
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/upgrade/quincy-x/stress-split/0-distro b/qa/suites/upgrade/quincy-x/stress-split/0-distro
index 4b341719d..661878557 120000
--- a/qa/suites/upgrade/quincy-x/stress-split/0-distro
+++ b/qa/suites/upgrade/quincy-x/stress-split/0-distro
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/point-to-point-upgrade.yaml b/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/point-to-point-upgrade.yaml
index 443b89fcf..eee713292 100644
--- a/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/point-to-point-upgrade.yaml
+++ b/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/point-to-point-upgrade.yaml
@@ -3,7 +3,7 @@ meta:
Run ceph on two nodes, using one of them as a client,
with a separate client-only node.
Use xfs beneath the osds.
- install ceph/reef v18.2.1 and the v18.2.x point versions
+ install ceph/reef v18.2.2 and the subsequent v18.2.x point versions
run workload and upgrade-sequence in parallel
(every point release should be tested)
run workload and upgrade-sequence in parallel
@@ -70,32 +70,32 @@ openstack:
count: 3
size: 30 # GB
tasks:
-- print: "**** done reef about to install v18.2.0 "
+- print: "**** done reef about to install v18.2.2 "
+ # See https://tracker.ceph.com/issues/66505. Versions < v18.2.2 contain the crc bug.
- install:
- tag: v18.2.0
+ tag: v18.2.2
# line below can be removed its from jewel test
#exclude_packages: ['ceph-mgr','libcephfs2','libcephfs-devel','libcephfs-dev', 'librgw2']
-- print: "**** done v18.2.0 install"
+- print: "**** done v18.2.2 install"
- ceph:
fs: xfs
add_osds_to_crush: true
- print: "**** done ceph xfs"
- sequential:
- workload
-- print: "**** done workload v18.2.0"
+- print: "**** done workload v18.2.2"
-
-####### upgrade to v18.2.1
-- install.upgrade:
- #exclude_packages: ['ceph-mgr','libcephfs2','libcephfs-devel','libcephfs-dev']
- mon.a:
- tag: v18.2.1
- mon.b:
- tag: v18.2.1
-- parallel:
- - workload_reef
- - upgrade-sequence_reef
-- print: "**** done parallel reef v18.2.1"
+# TODO: uncomment when v18.2.3 is available
+####### upgrade to v18.2.3
+# - install.upgrade:
+# mon.a:
+# tag: v18.2.3
+# mon.b:
+# tag: v18.2.3
+#- parallel:
+# - workload_reef
+# - upgrade-sequence_reef
+#- print: "**** done parallel reef v18.2.3"
#### upgrade to latest reef
- install.upgrade:
@@ -118,7 +118,7 @@ workload_reef:
full_sequential:
- workunit:
branch: reef
- # tag: v18.2.1
+ # tag: v18.2.2
clients:
client.1:
- rados/test.sh
diff --git a/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/.qa b/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/.qa
new file mode 120000
index 000000000..c4fcc4e00
--- /dev/null
+++ b/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/.qa
@@ -0,0 +1 @@
+../../../../../.qa/ \ No newline at end of file
diff --git a/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_8.yaml b/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_8.yaml
deleted file mode 120000
index bb4a6aaf3..000000000
--- a/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_8.yaml
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../distros/supported-all-distro/centos_8.yaml \ No newline at end of file
diff --git a/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_9.stream.yaml b/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_9.stream.yaml
new file mode 120000
index 000000000..7a8040fe8
--- /dev/null
+++ b/qa/suites/upgrade/reef-p2p/reef-p2p-parallel/supported-all-distro/centos_9.stream.yaml
@@ -0,0 +1 @@
+.qa/distros/supported-container-hosts/centos_9.stream.yaml \ No newline at end of file
diff --git a/qa/suites/upgrade/telemetry-upgrade/quincy-x/0-random-distro$ b/qa/suites/upgrade/telemetry-upgrade/quincy-x/0-random-distro$
index 4b341719d..661878557 120000
--- a/qa/suites/upgrade/telemetry-upgrade/quincy-x/0-random-distro$
+++ b/qa/suites/upgrade/telemetry-upgrade/quincy-x/0-random-distro$
@@ -1 +1 @@
-.qa/distros/container-hosts \ No newline at end of file
+.qa/distros/supported-container-hosts \ No newline at end of file
diff --git a/qa/tasks/ceph_fuse.py b/qa/tasks/ceph_fuse.py
index 70cf9bf83..706bdd977 100644
--- a/qa/tasks/ceph_fuse.py
+++ b/qa/tasks/ceph_fuse.py
@@ -4,6 +4,7 @@ Ceph FUSE client task
import contextlib
import logging
+import re
from teuthology import misc
from tasks.cephfs.fuse_mount import FuseMount
@@ -86,6 +87,32 @@ def task(ctx, config):
client.1:
mount_subvol_num: 1
+ Example for client mount with custom client feature set
+
+ tasks:
+ - ceph:
+ - ceph-fuse:
+ client.0:
+ client_feature_range: 21 # everything including CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK
+
+ OR
+
+ tasks:
+ - ceph:
+ - ceph-fuse:
+ client.0:
+ client_feature_range: "[0-13],[15-21]" # all features except metric_collect (bit 14)
+
+ OR
+
+ tasks:
+ - ceph:
+ - ceph-fuse:
+ client.0:
+ client_feature_range: "[0-13],16,19,[20-21]" # all features except metric_collect,alternate_name, op_getvxattr, 32bit_retry_fwd
+
+ client_feature_range can have repetitive and overlapping ranges/values - the parsed feature bits would not have duplicates and is sorted. Decreasing ranges are silently ignored.
+
:param ctx: Context
:param config: Configuration
"""
@@ -161,12 +188,50 @@ def task(ctx, config):
for remote in remotes:
FuseMount.cleanup_stale_netnses_and_bridge(remote)
+ def parse_client_feature_range(client_feature_range):
+ def intify(val):
+ try:
+ return int(val)
+ except ValueError:
+ log.warn(f'failed to decode feature bit {val}')
+ raise
+ feature_bits = []
+ pvalue = re.compile(r'(\d+)')
+ prange = re.compile(r'\[(\d+)\-(\d+)\]')
+ if (isinstance(client_feature_range, int)):
+ # everything upto (and including) this feature bit
+ feature_bits.extend(range(0, client_feature_range+1))
+ elif isinstance(client_feature_range, str):
+ for feat in client_feature_range.split(','):
+ m = pvalue.match(feat)
+ if m:
+ feature_bits.append(intify(m.group(1)))
+ continue
+ m = prange.match(feat)
+ if m:
+ feature_bits.extend(range(intify(m.group(1)), intify(m.group(2))+1))
+ continue
+ raise ValueError(f'Invalid feature range or value "{feat}"')
+ else:
+ raise TypeError("client_feature_range must be of type int or str")
+ return sorted(set(feature_bits))
+
# Mount any clients we have been asked to (default to mount all)
log.info('Mounting ceph-fuse clients...')
for info in mounted_by_me.values():
config = info["config"]
mount_x = info['mount']
- mount_x.mount(mntopts=config.get('mntopts', []), mntargs=config.get('mntargs', []))
+
+ # apply custom client feature set
+ client_features = []
+ client_feature_range = config.get("client_feature_range", None)
+ if client_feature_range is not None:
+ client_features = ",".join(str(i) for i in parse_client_feature_range(client_feature_range))
+ mntargs = config.get('mntargs', [])
+ if client_features:
+ mntargs.append(f"--client_debug_inject_features={client_features}")
+ log.debug(f"passing mntargs={mntargs}")
+ mount_x.mount(mntopts=config.get('mntopts', []), mntargs=mntargs)
for info in mounted_by_me.values():
info["mount"].wait_until_mounted()
diff --git a/qa/tasks/cephfs/mount.py b/qa/tasks/cephfs/mount.py
index bd92cadaa..f995f7c8b 100644
--- a/qa/tasks/cephfs/mount.py
+++ b/qa/tasks/cephfs/mount.py
@@ -551,30 +551,21 @@ class CephFSMount(object):
raise RuntimeError('value of attributes should be either str '
f'or None. {k} - {v}')
- def update_attrs(self, client_id=None, client_keyring_path=None,
- client_remote=None, hostfs_mntpt=None, cephfs_name=None,
- cephfs_mntpt=None):
- if not (client_id or client_keyring_path or client_remote or
- cephfs_name or cephfs_mntpt or hostfs_mntpt):
- return
-
- self._verify_attrs(client_id=client_id,
- client_keyring_path=client_keyring_path,
- hostfs_mntpt=hostfs_mntpt, cephfs_name=cephfs_name,
- cephfs_mntpt=cephfs_mntpt)
-
- if client_id:
- self.client_id = client_id
- if client_keyring_path:
- self.client_keyring_path = client_keyring_path
- if client_remote:
- self.client_remote = client_remote
- if hostfs_mntpt:
- self.hostfs_mntpt = hostfs_mntpt
- if cephfs_name:
- self.cephfs_name = cephfs_name
- if cephfs_mntpt:
- self.cephfs_mntpt = cephfs_mntpt
+ def update_attrs(self, **kwargs):
+ verify_keys = [
+ 'client_id',
+ 'client_keyring_path',
+ 'hostfs_mntpt',
+ 'cephfs_name',
+ 'cephfs_mntpt',
+ ]
+
+ self._verify_attrs(**{key: kwargs[key] for key in verify_keys if key in kwargs})
+
+ for k in verify_keys:
+ v = kwargs.get(k)
+ if v is not None:
+ setattr(self, k, v)
def remount(self, **kwargs):
"""
@@ -597,7 +588,7 @@ class CephFSMount(object):
self.update_attrs(**kwargs)
- retval = self.mount(mntopts=mntopts, check_status=check_status)
+ retval = self.mount(mntopts=mntopts, check_status=check_status, **kwargs)
# avoid this scenario (again): mount command might've failed and
# check_status might have silenced the exception, yet we attempt to
# wait which might lead to an error.
diff --git a/qa/tasks/cephfs/test_admin.py b/qa/tasks/cephfs/test_admin.py
index 4f3100bbe..db0e5660a 100644
--- a/qa/tasks/cephfs/test_admin.py
+++ b/qa/tasks/cephfs/test_admin.py
@@ -1319,6 +1319,92 @@ class TestFsAuthorize(CephFSTestCase):
self.captester.conduct_neg_test_for_chown_caps()
self.captester.conduct_neg_test_for_truncate_caps()
+ def test_multifs_rootsquash_nofeature(self):
+ """
+ That having root_squash on one fs doesn't prevent access to others.
+ """
+
+ if not isinstance(self.mount_a, FuseMount):
+ self.skipTest("only FUSE client has CEPHFS_FEATURE_MDS_AUTH_CAPS "
+ "needed to enforce root_squash MDS caps")
+
+ self.fs1 = self.fs
+ self.fs2 = self.mds_cluster.newfs('testcephfs2')
+
+ self.mount_a.umount_wait()
+
+ self.run_ceph_cmd(f'auth caps client.{self.mount_a.client_id} '
+ f'mon "allow r" '
+ f'osd "allow rw tag cephfs data={self.fs1.name}, allow rw tag cephfs data={self.fs2.name}" '
+ f'mds "allow rwp fsname={self.fs1.name}, allow rw fsname={self.fs2.name} root_squash"')
+
+ CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK = 21
+ # all but CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK
+ features = ",".join([str(i) for i in range(CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK)])
+ mntargs = [f"--client_debug_inject_features={features}"]
+
+ # should succeed
+ with self.assert_cluster_log("report clients with broken root_squash", present=False):
+ self.mount_a.remount(mntargs=mntargs, cephfs_name=self.fs1.name)
+
+ def test_rootsquash_nofeature(self):
+ """
+ That having root_squash on an fs without the feature bit raises a HEALTH_ERR warning.
+ """
+
+ if not isinstance(self.mount_a, FuseMount):
+ self.skipTest("only FUSE client has CEPHFS_FEATURE_MDS_AUTH_CAPS "
+ "needed to enforce root_squash MDS caps")
+
+ self.mount_a.umount_wait()
+
+ FS_AUTH_CAPS = (('/', 'rw', 'root_squash'),)
+ keyring = self.fs.authorize(self.client_id, FS_AUTH_CAPS)
+
+ CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK = 21
+ # all but CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK
+ features = ",".join([str(i) for i in range(CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK)])
+ mntargs = [f"--client_debug_inject_features={features}"]
+
+ # should succeed
+ with self.assert_cluster_log("with broken root_squash implementation"):
+ keyring_path = self.mount_a.client_remote.mktemp(data=keyring)
+ self.mount_a.remount(client_id=self.client_id, client_keyring_path=keyring_path, mntargs=mntargs, cephfs_name=self.fs.name)
+ self.wait_for_health("MDS_CLIENTS_BROKEN_ROOTSQUASH", 60)
+ self.assertFalse(self.mount_a.is_blocked())
+
+ self.mount_a.umount_wait()
+ self.wait_for_health_clear(60)
+
+ def test_rootsquash_nofeature_evict(self):
+ """
+ That having root_squash on an fs without the feature bit can be evicted.
+ """
+
+ if not isinstance(self.mount_a, FuseMount):
+ self.skipTest("only FUSE client has CEPHFS_FEATURE_MDS_AUTH_CAPS "
+ "needed to enforce root_squash MDS caps")
+
+ self.mount_a.umount_wait()
+
+ FS_AUTH_CAPS = (('/', 'rw', 'root_squash'),)
+ keyring = self.fs.authorize(self.client_id, FS_AUTH_CAPS)
+
+ CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK = 21
+ # all but CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK
+ features = ",".join([str(i) for i in range(CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK)])
+ mntargs = [f"--client_debug_inject_features={features}"]
+
+ # should succeed
+ keyring_path = self.mount_a.client_remote.mktemp(data=keyring)
+ self.mount_a.remount(client_id=self.client_id, client_keyring_path=keyring_path, mntargs=mntargs, cephfs_name=self.fs.name)
+ self.wait_for_health("MDS_CLIENTS_BROKEN_ROOTSQUASH", 60)
+
+ self.fs.required_client_features("add", "client_mds_auth_caps")
+ self.wait_for_health_clear(60)
+ self.assertTrue(self.mount_a.is_blocked())
+
+
def test_single_path_rootsquash_issue_56067(self):
"""
That a FS client using root squash MDS caps allows non-root user to write data
diff --git a/qa/tasks/nvme_loop.py b/qa/tasks/nvme_loop.py
index c9d8f0dc7..5b29c11f0 100644
--- a/qa/tasks/nvme_loop.py
+++ b/qa/tasks/nvme_loop.py
@@ -1,5 +1,6 @@
import contextlib
import logging
+import json
from io import StringIO
from teuthology import misc as teuthology
@@ -66,10 +67,33 @@ def task(ctx, config):
with contextutil.safe_while(sleep=1, tries=15) as proceed:
while proceed():
- p = remote.run(args=['sudo', 'nvme', 'list'], stdout=StringIO())
+ p = remote.run(args=['sudo', 'nvme', 'list', '-o', 'json'], stdout=StringIO())
new_devs = []
- for line in p.stdout.getvalue().splitlines():
- dev, _, vendor = line.split()[0:3]
+ # `nvme list -o json` will return the following output:
+ '''{
+ "Devices" : [
+ {
+ "DevicePath" : "/dev/nvme0n1",
+ "Firmware" : "8DV101H0",
+ "Index" : 0,
+ "ModelNumber" : "INTEL SSDPEDMD400G4",
+ "ProductName" : "Unknown Device",
+ "SerialNumber" : "PHFT620400WB400BGN"
+ },
+ {
+ "DevicePath" : "/dev/nvme1n1",
+ "Firmware" : "5.15.0-1",
+ "Index" : 1,
+ "ModelNumber" : "Linux",
+ "ProductName" : "Unknown Device",
+ "SerialNumber" : "7672ce414766ba44a8e5"
+ }
+ ]
+ }'''
+ nvme_list = json.loads(p.stdout.getvalue())
+ for device in nvme_list['Devices']:
+ dev = device['DevicePath']
+ vendor = device['ModelNumber']
if dev.startswith('/dev/') and vendor == 'Linux':
new_devs.append(dev)
log.info(f'new_devs {new_devs}')
diff --git a/qa/tasks/qemu.py b/qa/tasks/qemu.py
index 6533026b4..3c0f7c3b5 100644
--- a/qa/tasks/qemu.py
+++ b/qa/tasks/qemu.py
@@ -8,6 +8,8 @@ import os
import yaml
import time
+from packaging.version import Version
+
from tasks import rbd
from tasks.util.workunit import get_refspec_after_overrides
from teuthology import contextutil
@@ -492,7 +494,10 @@ def run_qemu(ctx, config):
)
nfs_service_name = 'nfs'
- if remote.os.name in ['rhel', 'centos'] and float(remote.os.version) >= 8:
+ if (
+ remote.os.name in ['rhel', 'centos'] and
+ Version(remote.os.version.lower().removesuffix(".stream")) >= Version("8")
+ ):
nfs_service_name = 'nfs-server'
# make an nfs mount to use for logging and to
diff --git a/qa/workunits/cephadm/test_dashboard_e2e.sh b/qa/workunits/cephadm/test_dashboard_e2e.sh
index 32e0bcc77..13746ec6d 100755
--- a/qa/workunits/cephadm/test_dashboard_e2e.sh
+++ b/qa/workunits/cephadm/test_dashboard_e2e.sh
@@ -20,6 +20,9 @@ install_common () {
$SUDO apt-get update
$SUDO apt-get install nodejs
elif grep -q rhel /etc/*-release; then
+ if grep -q "CentOS Stream 9" /etc/*-release; then
+ NODEJS_VERSION="18"
+ fi
$SUDO yum module -y enable nodejs:$NODEJS_VERSION
$SUDO yum install -y jq npm
else
diff --git a/qa/workunits/cephadm/test_iscsi_pids_limit.sh b/qa/workunits/cephadm/test_iscsi_pids_limit.sh
index bed4cc9e2..40bc60856 100755
--- a/qa/workunits/cephadm/test_iscsi_pids_limit.sh
+++ b/qa/workunits/cephadm/test_iscsi_pids_limit.sh
@@ -12,7 +12,17 @@ test ${CONT_COUNT} -eq 2
for i in ${ISCSI_CONT_IDS}
do
- test $(sudo podman exec ${i} cat /sys/fs/cgroup/pids/pids.max) == max
+ # cgroups v1 and v2 have slightly different file locations for the pids.max
+ # so check both spots
+ if [ $(sudo podman exec ${i} cat /sys/fs/cgroup/pids/pids.max) ]; then
+ pid_limit=$(sudo podman exec ${i} cat /sys/fs/cgroup/pids/pids.max)
+ elif [ $(sudo podman exec ${i} cat /sys/fs/cgroup/pids.max) ]; then
+ pid_limit=$(sudo podman exec ${i} cat /sys/fs/cgroup/pids.max)
+ else
+ echo "could not find pids.max inside container"
+ exit 1
+ fi
+ test $pid_limit == max
done
for i in ${ISCSI_CONT_IDS}
diff --git a/qa/workunits/cephadm/test_repos.sh b/qa/workunits/cephadm/test_repos.sh
index 221585fd0..5c17e5106 100755
--- a/qa/workunits/cephadm/test_repos.sh
+++ b/qa/workunits/cephadm/test_repos.sh
@@ -30,7 +30,7 @@ function test_install_uninstall() {
sudo zypper -n remove cephadm )
}
-sudo $CEPHADM -v add-repo --release octopus
+sudo $CEPHADM -v add-repo --release quincy
test_install_uninstall
sudo $CEPHADM -v rm-repo
@@ -38,7 +38,7 @@ sudo $CEPHADM -v add-repo --dev main
test_install_uninstall
sudo $CEPHADM -v rm-repo
-sudo $CEPHADM -v add-repo --release 15.2.7
+sudo $CEPHADM -v add-repo --release 17.2.6
test_install_uninstall
sudo $CEPHADM -v rm-repo
diff --git a/src/.git_version b/src/.git_version
index 32a4fa347..1c10e47ef 100644
--- a/src/.git_version
+++ b/src/.git_version
@@ -1,2 +1,2 @@
-76424b2fe1bb19c32c52140f39764599abf5e035
-18.2.3
+e7ad5345525c7aa95470c26863873b581076945d
+18.2.4
diff --git a/src/client/Client.cc b/src/client/Client.cc
index ba41e9dd0..ec97e36fb 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -392,6 +392,12 @@ Client::Client(Messenger *m, MonClient *mc, Objecter *objecter_)
if (cct->_conf->client_acl_type == "posix_acl")
acl_type = POSIX_ACL;
+ if (auto str = cct->_conf->client_debug_inject_features; !str.empty()) {
+ myfeatures = feature_bitset_t(str);
+ } else {
+ myfeatures = feature_bitset_t(CEPHFS_FEATURES_CLIENT_SUPPORTED);
+ }
+
lru.lru_set_midpoint(cct->_conf->client_cache_mid);
// file handles
@@ -2354,7 +2360,7 @@ MetaSessionRef Client::_open_mds_session(mds_rank_t mds)
auto m = make_message<MClientSession>(CEPH_SESSION_REQUEST_OPEN);
m->metadata = metadata;
- m->supported_features = feature_bitset_t(CEPHFS_FEATURES_CLIENT_SUPPORTED);
+ m->supported_features = myfeatures;
m->metric_spec = feature_bitset_t(CEPHFS_METRIC_FEATURES_ALL);
session->con->send_message2(std::move(m));
return session;
diff --git a/src/client/Client.h b/src/client/Client.h
index beeef0803..dc9e31aa8 100644
--- a/src/client/Client.h
+++ b/src/client/Client.h
@@ -1639,6 +1639,8 @@ private:
uint64_t nr_write_request = 0;
std::vector<MDSCapAuth> cap_auths;
+
+ feature_bitset_t myfeatures;
};
/**
diff --git a/src/common/ceph_strings.cc b/src/common/ceph_strings.cc
index 18dcc701b..a92311618 100644
--- a/src/common/ceph_strings.cc
+++ b/src/common/ceph_strings.cc
@@ -151,7 +151,11 @@ uint64_t ceph_release_features(int r)
return req;
req |= CEPH_FEATUREMASK_CRUSH_CHOOSE_ARGS; // and overlaps
- if (r <= CEPH_RELEASE_LUMINOUS)
+ if (r <= CEPH_RELEASE_QUINCY)
+ return req;
+
+ req |= CEPH_FEATUREMASK_SERVER_REEF; // upmap-primary
+ if (r <= CEPH_RELEASE_REEF)
return req;
return req;
diff --git a/src/common/options/mds-client.yaml.in b/src/common/options/mds-client.yaml.in
index 1f7600dee..28912cdb1 100644
--- a/src/common/options/mds-client.yaml.in
+++ b/src/common/options/mds-client.yaml.in
@@ -251,6 +251,14 @@ options:
default: 0
services:
- mds_client
+- name: client_debug_inject_features
+ type: str
+ level: dev
+ services:
+ - mds_client
+ flags:
+ - startup
+ with_legacy: true
- name: client_max_inline_size
type: size
level: dev
diff --git a/src/mds/Beacon.cc b/src/mds/Beacon.cc
index 5dd319a14..b67e0a31b 100644
--- a/src/mds/Beacon.cc
+++ b/src/mds/Beacon.cc
@@ -484,6 +484,30 @@ void Beacon::notify_health(MDSRank const *mds)
health.metrics.push_back(m);
}
+ // Report a health warning if clients have broken root_squash
+ if (auto c = mds->sessionmap.num_broken_root_squash_clients(); c > 0) {
+ std::vector<MDSHealthMetric> metrics;
+
+ for (auto&& session : mds->sessionmap.get_broken_root_squash_clients()) {
+ CachedStackStringStream css;
+ *css << "Client " << session->get_human_name() << " has broken root_squash implementation";
+ MDSHealthMetric m(MDS_HEALTH_CLIENTS_BROKEN_ROOTSQUASH, HEALTH_ERR, css->strv());
+ m.metadata["client_id"] = stringify(session->get_client());
+ metrics.emplace_back(std::move(m));
+ }
+
+ if (metrics.size() <= (size_t)g_conf()->mds_health_summarize_threshold) {
+ health.metrics.insert(std::end(health.metrics), std::make_move_iterator(std::begin(metrics)), std::make_move_iterator(std::end(metrics)));
+ } else {
+ CachedStackStringStream css;
+ *css << "There are " << c << " clients with broken root_squash implementations";
+ dout(20) << css->strv() << dendl;
+ MDSHealthMetric m(MDS_HEALTH_CLIENTS_BROKEN_ROOTSQUASH, HEALTH_ERR, css->strv());
+ m.metadata["client_count"] = stringify(c);
+ health.metrics.push_back(std::move(m));
+ }
+ }
+
// Report if we have significantly exceeded our cache size limit
if (mds->mdcache->cache_overfull()) {
CachedStackStringStream css;
diff --git a/src/mds/MDSAuthCaps.h b/src/mds/MDSAuthCaps.h
index bbb2589b3..f77fd965a 100644
--- a/src/mds/MDSAuthCaps.h
+++ b/src/mds/MDSAuthCaps.h
@@ -146,6 +146,10 @@ struct MDSCapMatch {
*/
bool match_path(std::string_view target_path) const;
+ bool match_fs(std::string_view target_fs) const {
+ return fs_name == target_fs || fs_name.empty() || fs_name == "*";
+ }
+
void encode(ceph::buffer::list& bl) const {
ENCODE_START(1, 1, bl);
encode(uid, bl);
@@ -261,8 +265,7 @@ public:
}
for (const MDSCapGrant &g : grants) {
- if (g.match.fs_name == fs_name || g.match.fs_name.empty() ||
- g.match.fs_name == "*") {
+ if (g.match.match_fs(fs_name)) {
if (mask & MAY_READ && g.spec.allow_read()) {
return true;
}
@@ -285,10 +288,12 @@ public:
}
}
- bool root_squash_in_caps() const {
- for (const MDSCapGrant &g : grants) {
- if (g.match.root_squash) {
- return true;
+ bool root_squash_in_caps(std::string_view fs_name) const {
+ for (const MDSCapGrant& g : grants) {
+ if (g.match.match_fs(fs_name)) {
+ if (g.match.root_squash) {
+ return true;
+ }
}
}
return false;
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index 48e7b03ae..2f8b376ce 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -717,16 +717,10 @@ void Server::handle_client_session(const cref_t<MClientSession> &m)
break;
}
- if (session->auth_caps.root_squash_in_caps() && !client_metadata.features.test(CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK)) {
- CachedStackStringStream css;
- *css << "client lacks CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK needed to enforce 'root_squash' MDS auth caps";
- send_reject_message(css->strv());
- mds->clog->warn() << "client session (" << session->info.inst
- << ") lacks CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK "
- << " needed to enforce 'root_squash' MDS auth caps";
- session->clear();
- break;
-
+ std::string_view fs_name = mds->mdsmap->get_fs_name();
+ bool client_caps_check = client_metadata.features.test(CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK);
+ if (session->auth_caps.root_squash_in_caps(fs_name) && !client_caps_check) {
+ mds->sessionmap.add_to_broken_root_squash_clients(session);
}
// Special case for the 'root' metadata path; validate that the claimed
// root is actually within the caps of the session
@@ -1573,11 +1567,10 @@ void Server::handle_client_reconnect(const cref_t<MClientReconnect> &m)
*css << "missing required features '" << missing_features << "'";
error_str = css->strv();
}
- if (session->auth_caps.root_squash_in_caps() &&
- !session->info.client_metadata.features.test(CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK)) {
- CachedStackStringStream css;
- *css << "client lacks CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK needed to enforce 'root_squash' MDS auth caps";
- error_str = css->strv();
+ std::string_view fs_name = mds->mdsmap->get_fs_name();
+ bool client_caps_check = session->info.client_metadata.features.test(CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK);
+ if (session->auth_caps.root_squash_in_caps(fs_name) && !client_caps_check) {
+ mds->sessionmap.add_to_broken_root_squash_clients(session);
}
}
diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc
index 9cc2b0138..9bec67c24 100644
--- a/src/mds/SessionMap.cc
+++ b/src/mds/SessionMap.cc
@@ -705,6 +705,7 @@ void SessionMap::remove_session(Session *s)
s->trim_completed_requests(0);
s->item_session_list.remove_myself();
+ broken_root_squash_clients.erase(s);
session_map.erase(s->info.inst.name);
dirty_sessions.erase(s->info.inst.name);
null_sessions.insert(s->info.inst.name);
diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h
index 360dd66a2..623f20a0e 100644
--- a/src/mds/SessionMap.h
+++ b/src/mds/SessionMap.h
@@ -682,6 +682,16 @@ public:
void remove_session(Session *s);
void touch_session(Session *session);
+ void add_to_broken_root_squash_clients(Session* s) {
+ broken_root_squash_clients.insert(s);
+ }
+ uint64_t num_broken_root_squash_clients() const {
+ return broken_root_squash_clients.size();
+ }
+ auto const& get_broken_root_squash_clients() const {
+ return broken_root_squash_clients;
+ }
+
Session *get_oldest_session(int state) {
auto by_state_entry = by_state.find(state);
if (by_state_entry == by_state.end() || by_state_entry->second->empty())
@@ -849,6 +859,8 @@ private:
bool validate_and_encode_session(MDSRank *mds, Session *session, bufferlist& bl);
void apply_blocklist(const std::set<entity_name_t>& victims);
+
+ std::set<Session*> broken_root_squash_clients;
};
std::ostream& operator<<(std::ostream &out, const Session &s);
diff --git a/src/mds/mdstypes.cc b/src/mds/mdstypes.cc
index 044c33459..114ca137b 100644
--- a/src/mds/mdstypes.cc
+++ b/src/mds/mdstypes.cc
@@ -7,6 +7,10 @@
#include "common/Formatter.h"
#include "common/StackStringStream.h"
+#include <iostream>
+#include <sstream>
+#include <string>
+
const mds_gid_t MDS_GID_NONE = mds_gid_t(0);
using std::list;
@@ -429,7 +433,7 @@ feature_bitset_t::feature_bitset_t(unsigned long value)
}
}
-feature_bitset_t::feature_bitset_t(const vector<size_t>& array)
+void feature_bitset_t::init_array(const vector<size_t>& array)
{
if (!array.empty()) {
size_t n = array.back();
@@ -448,6 +452,26 @@ feature_bitset_t::feature_bitset_t(const vector<size_t>& array)
}
}
+feature_bitset_t::feature_bitset_t(std::string_view str)
+{
+ std::stringstream ss;
+ std::vector<size_t> v;
+ std::string atom;
+
+ ss << str;
+ while (std::getline(ss, atom, ',')) {
+ v.push_back(std::stoul(atom));
+ }
+ std::sort(v.begin(), v.end());
+
+ init_array(v);
+}
+
+feature_bitset_t::feature_bitset_t(const vector<size_t>& array)
+{
+ init_array(array);
+}
+
feature_bitset_t& feature_bitset_t::operator-=(const feature_bitset_t& other)
{
for (size_t i = 0; i < _vec.size(); ++i) {
diff --git a/src/mds/mdstypes.h b/src/mds/mdstypes.h
index 3381d44c9..8e7b16761 100644
--- a/src/mds/mdstypes.h
+++ b/src/mds/mdstypes.h
@@ -294,6 +294,7 @@ public:
feature_bitset_t(const feature_bitset_t& other) : _vec(other._vec) {}
feature_bitset_t(feature_bitset_t&& other) : _vec(std::move(other._vec)) {}
feature_bitset_t(unsigned long value = 0);
+ feature_bitset_t(std::string_view);
feature_bitset_t(const std::vector<size_t>& array);
feature_bitset_t& operator=(const feature_bitset_t& other) {
_vec = other._vec;
@@ -347,6 +348,8 @@ public:
void dump(ceph::Formatter *f) const;
void print(std::ostream& out) const;
private:
+ void init_array(const std::vector<size_t>& v);
+
std::vector<block_type> _vec;
};
WRITE_CLASS_ENCODER(feature_bitset_t)
diff --git a/src/messages/MMDSBeacon.h b/src/messages/MMDSBeacon.h
index d843b0e76..2323f78d8 100644
--- a/src/messages/MMDSBeacon.h
+++ b/src/messages/MMDSBeacon.h
@@ -46,6 +46,8 @@ enum mds_metric_t {
MDS_HEALTH_CACHE_OVERSIZED,
MDS_HEALTH_SLOW_METADATA_IO,
MDS_HEALTH_CLIENTS_LAGGY,
+ MDS_HEALTH_CLIENTS_LAGGY_MANY,
+ MDS_HEALTH_CLIENTS_BROKEN_ROOTSQUASH,
MDS_HEALTH_DUMMY, // not a real health warning, for testing
};
@@ -65,6 +67,7 @@ inline const char *mds_metric_name(mds_metric_t m)
case MDS_HEALTH_CACHE_OVERSIZED: return "MDS_CACHE_OVERSIZED";
case MDS_HEALTH_SLOW_METADATA_IO: return "MDS_SLOW_METADATA_IO";
case MDS_HEALTH_CLIENTS_LAGGY: return "MDS_CLIENTS_LAGGY";
+ case MDS_HEALTH_CLIENTS_BROKEN_ROOTSQUASH: return "MDS_CLIENTS_BROKEN_ROOTSQUASH";
case MDS_HEALTH_DUMMY: return "MDS_DUMMY";
default:
return "???";
@@ -101,6 +104,8 @@ inline const char *mds_metric_summary(mds_metric_t m)
return "%num% MDSs report slow metadata IOs";
case MDS_HEALTH_CLIENTS_LAGGY:
return "%num% client(s) laggy due to laggy OSDs";
+ case MDS_HEALTH_CLIENTS_BROKEN_ROOTSQUASH:
+ return "%num% MDS report clients with broken root_squash implementation";
default:
return "???";
}
diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc
index 0ac5060f7..88894d73f 100644
--- a/src/mon/MDSMonitor.cc
+++ b/src/mon/MDSMonitor.cc
@@ -275,6 +275,7 @@ void MDSMonitor::encode_pending(MonitorDBStore::TransactionRef t)
}
pending.get_health_checks(&new_checks);
for (auto& p : new_checks.checks) {
+ // TODO: handle "client_count" metadata when summarizing
p.second.summary = std::regex_replace(
p.second.summary,
std::regex("%num%"),
diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc
index 5fb73084d..6468e605c 100644
--- a/src/osd/OSDMap.cc
+++ b/src/osd/OSDMap.cc
@@ -1747,9 +1747,12 @@ uint64_t OSDMap::get_features(int entity_type, uint64_t *pmask) const
}
mask |= CEPH_FEATURES_CRUSH;
- if (!pg_upmap.empty() || !pg_upmap_items.empty() || !pg_upmap_primaries.empty())
+ if (!pg_upmap.empty() || !pg_upmap_items.empty())
features |= CEPH_FEATUREMASK_OSDMAP_PG_UPMAP;
mask |= CEPH_FEATUREMASK_OSDMAP_PG_UPMAP;
+ if (!pg_upmap_primaries.empty())
+ features |= CEPH_FEATUREMASK_SERVER_REEF;
+ mask |= CEPH_FEATUREMASK_SERVER_REEF;
for (auto &pool: pools) {
if (pool.second.has_flag(pg_pool_t::FLAG_HASHPSPOOL)) {
@@ -1821,6 +1824,9 @@ ceph_release_t OSDMap::get_min_compat_client() const
{
uint64_t f = get_features(CEPH_ENTITY_TYPE_CLIENT, nullptr);
+ if (HAVE_FEATURE(f, SERVER_REEF)) { // v18.2.3 (upmap-primary; see #61948)
+ return ceph_release_t::reef;
+ }
if (HAVE_FEATURE(f, OSDMAP_PG_UPMAP) || // v12.0.0-1733-g27d6f43
HAVE_FEATURE(f, CRUSH_CHOOSE_ARGS)) { // v12.0.1-2172-gef1ef28
return ceph_release_t::luminous; // v12.2.0
diff --git a/src/pybind/mgr/k8sevents/module.py b/src/pybind/mgr/k8sevents/module.py
index b34029209..5855ba42e 100644
--- a/src/pybind/mgr/k8sevents/module.py
+++ b/src/pybind/mgr/k8sevents/module.py
@@ -67,7 +67,11 @@ else:
# which causes an exception in the generator. A workaround is discussed for a similar issue
# in https://github.com/kubernetes-client/python/issues/376 which has been used here
# pylint: disable=no-member
- from kubernetes.client.models.v1_event import V1Event
+ try:
+ from kubernetes.client.models.core_v1_event import CoreV1Event as V1Event
+ except ImportError:
+ from kubernetes.client.models.v1_event import V1Event
+
def local_involved_object(self, involved_object):
if involved_object is None:
involved_object = client.V1ObjectReference(api_version="1")
@@ -409,14 +413,14 @@ class KubernetesEvent(object):
event_source = client.V1EventSource(component="ceph-mgr",
host=self.host)
- return client.V1Event(
- involved_object=obj_ref,
- metadata=obj_meta,
- message=self.message,
- count=self.count,
+ return V1Event(
+ involved_object=obj_ref,
+ metadata=obj_meta,
+ message=self.message,
+ count=self.count,
type=self.event_type,
reason=self.event_reason,
- source=event_source,
+ source=event_source,
first_timestamp=self.first_timestamp,
last_timestamp=self.last_timestamp
)
diff --git a/src/pybind/mgr/requirements.txt b/src/pybind/mgr/requirements.txt
index 7daee3323..044674f9b 100644
--- a/src/pybind/mgr/requirements.txt
+++ b/src/pybind/mgr/requirements.txt
@@ -1,5 +1,5 @@
-rrequirements-required.txt
asyncssh==2.9
-kubernetes==11.0.0
+kubernetes
urllib3==1.26.15
pytest==7.4.4