diff --git a/ceph/CMakeLists.txt b/ceph/CMakeLists.txt index e3eda69cf..730f6d3db 100644 --- a/ceph/CMakeLists.txt +++ b/ceph/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.10.2) # remove cmake/modules/FindPython* once 3.12 is required project(ceph - VERSION 16.2.12 + VERSION 16.2.13 LANGUAGES CXX C ASM) foreach(policy diff --git a/ceph/PendingReleaseNotes b/ceph/PendingReleaseNotes index f5af91d7d..cba4e03dd 100644 --- a/ceph/PendingReleaseNotes +++ b/ceph/PendingReleaseNotes @@ -32,11 +32,18 @@ in certain recovery scenarios, e.g., monitor database lost and rebuilt, and the restored file system is expected to have the same ID as before. +>=16.2.12 +--------- + * CEPHFS: Rename the `mds_max_retries_on_remount_failure` option to `client_max_retries_on_remount_failure` and move it from mds.yaml.in to mds-client.yaml.in because this option was only used by MDS client from its birth. +* `ceph mgr dump` command now outputs `last_failure_osd_epoch` and + `active_clients` fields at the top level. Previously, these fields were + output under `always_on_modules` field. + >=16.2.11 -------- diff --git a/ceph/ceph.spec b/ceph/ceph.spec index 86da6aa7e..2bfdbc9ad 100644 --- a/ceph/ceph.spec +++ b/ceph/ceph.spec @@ -135,7 +135,7 @@ # main package definition ################################################################################# Name: ceph -Version: 16.2.12 +Version: 16.2.13 Release: 0%{?dist} %if 0%{?fedora} || 0%{?rhel} Epoch: 2 @@ -151,7 +151,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-16.2.12.tar.bz2 +Source0: %{?_remote_tarball_prefix}ceph-16.2.13.tar.bz2 %if 0%{?suse_version} # _insert_obs_source_lines_here ExclusiveArch: x86_64 aarch64 ppc64le s390x @@ -1208,7 +1208,7 @@ This package provides Ceph default alerts for Prometheus. # common ################################################################################# %prep -%autosetup -p1 -n ceph-16.2.12 +%autosetup -p1 -n ceph-16.2.13 %build # Disable lto on systems that do not support symver attribute diff --git a/ceph/changelog.upstream b/ceph/changelog.upstream index 127d10722..774c39ca2 100644 --- a/ceph/changelog.upstream +++ b/ceph/changelog.upstream @@ -1,7 +1,13 @@ -ceph (16.2.12-1focal) focal; urgency=medium +ceph (16.2.13-1focal) focal; urgency=medium - -- Jenkins Build Slave User Thu, 13 Apr 2023 22:05:57 +0000 + -- Jenkins Build Slave User Mon, 08 May 2023 20:49:59 +0000 + +ceph (16.2.13-1) stable; urgency=medium + + * New upstream release + + -- Ceph Release Team Mon, 08 May 2023 20:39:33 +0000 ceph (16.2.12-1) stable; urgency=medium diff --git a/ceph/doc/architecture.rst b/ceph/doc/architecture.rst index 46be74603..e73ec26c0 100644 --- a/ceph/doc/architecture.rst +++ b/ceph/doc/architecture.rst @@ -199,6 +199,8 @@ For details on configuring monitors, see the `Monitor Config Reference`_. .. index:: architecture; high availability authentication +.. _arch_high_availability_authentication: + High Availability Authentication ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/ceph/doc/dev/cephfs-mirroring.rst b/ceph/doc/dev/cephfs-mirroring.rst index 3ca487c03..3379c96fa 100644 --- a/ceph/doc/dev/cephfs-mirroring.rst +++ b/ceph/doc/dev/cephfs-mirroring.rst @@ -2,38 +2,44 @@ CephFS Mirroring ================ -CephFS supports asynchronous replication of snapshots to a remote CephFS file system via -`cephfs-mirror` tool. Snapshots are synchronized by mirroring snapshot data followed by -creating a snapshot with the same name (for a given directory on the remote file system) as -the snapshot being synchronized. +CephFS supports asynchronous replication of snapshots to a remote CephFS file +system via `cephfs-mirror` tool. Snapshots are synchronized by mirroring +snapshot data followed by creating a snapshot with the same name (for a given +directory on the remote file system) as the snapshot being synchronized. Requirements ------------ -The primary (local) and secondary (remote) Ceph clusters version should be Pacific or later. +The primary (local) and secondary (remote) Ceph clusters version should be +Pacific or later. Key Idea -------- -For a given snapshot pair in a directory, `cephfs-mirror` daemon will rely on readdir diff -to identify changes in a directory tree. The diffs are applied to directory in the remote -file system thereby only synchronizing files that have changed between two snapshots. +For a given snapshot pair in a directory, `cephfs-mirror` daemon will rely on +readdir diff to identify changes in a directory tree. The diffs are applied to +directory in the remote file system thereby only synchronizing files that have +changed between two snapshots. This feature is tracked here: https://tracker.ceph.com/issues/47034. -Currently, snapshot data is synchronized by bulk copying to the remote filesystem. +Currently, snapshot data is synchronized by bulk copying to the remote +filesystem. -.. note:: Synchronizing hardlinks is not supported -- hardlinked files get synchronized - as separate files. +.. note:: Synchronizing hardlinks is not supported -- hardlinked files get + synchronized as separate files. Creating Users -------------- -Start by creating a user (on the primary/local cluster) for the mirror daemon. This user -requires write capability on the metadata pool to create RADOS objects (index objects) -for watch/notify operation and read capability on the data pool(s). +Start by creating a user (on the primary/local cluster) for the mirror daemon. +This user requires write capability on the metadata pool to create RADOS +objects (index objects) for watch/notify operation and read capability on the +data pool(s). - $ ceph auth get-or-create client.mirror mon 'profile cephfs-mirror' mds 'allow r' osd 'allow rw tag cephfs metadata=*, allow r tag cephfs data=*' mgr 'allow r' +.. prompt:: bash $ + + ceph auth get-or-create client.mirror mon 'profile cephfs-mirror' mds 'allow r' osd 'allow rw tag cephfs metadata=*, allow r tag cephfs data=*' mgr 'allow r' Create a user for each file system peer (on the secondary/remote cluster). This user needs to have full capabilities on the MDS (to take snapshots) and the OSDs:: diff --git a/ceph/doc/glossary.rst b/ceph/doc/glossary.rst index 26ecec2e4..b87818194 100644 --- a/ceph/doc/glossary.rst +++ b/ceph/doc/glossary.rst @@ -188,9 +188,12 @@ Storage Clusters receive data from :term:`Ceph Client`\s. CephX - The Ceph authentication protocol. CephX operates like Kerberos, - but it has no single point of failure. See the :ref:`CephX - Configuration Reference`. + The Ceph authentication protocol. CephX authenticates users and + daemons. CephX operates like Kerberos, but it has no single + point of failure. See the :ref:`High-availability + Authentication section` + of the Architecture document and the :ref:`CephX Configuration + Reference`. Client A client is any program external to Ceph that uses a Ceph @@ -249,6 +252,9 @@ Any single machine or server in a Ceph Cluster. See :term:`Ceph Node`. + Hybrid OSD + Refers to an OSD that has both HDD and SSD drives. + LVM tags Extensible metadata for LVM volumes and groups. It is used to store Ceph-specific information about devices and its @@ -303,6 +309,20 @@ state of a multi-site configuration. When the period is updated, the "epoch" is said thereby to have been changed. + Placement Groups (PGs) + Placement groups (PGs) are subsets of each logical Ceph pool. + Placement groups perform the function of placing objects (as a + group) into OSDs. Ceph manages data internally at + placement-group granularity: this scales better than would + managing individual (and therefore more numerous) RADOS + objects. A cluster that has a larger number of placement groups + (for example, 100 per OSD) is better balanced than an otherwise + identical cluster with a smaller number of placement groups. + + Ceph's internal RADOS objects are each mapped to a specific + placement group, and each placement group belongs to exactly + one Ceph pool. + :ref:`Pool` A pool is a logical partition used to store objects. diff --git a/ceph/doc/mgr/prometheus.rst b/ceph/doc/mgr/prometheus.rst index d4a9fd911..e7e00d958 100644 --- a/ceph/doc/mgr/prometheus.rst +++ b/ceph/doc/mgr/prometheus.rst @@ -64,7 +64,7 @@ in conjunction with multiple Prometheus instances, overload the manager and lead to unresponsive or crashing Ceph manager instances. Hence, the cache is enabled by default. This means that there is a possibility that the cache becomes stale. The cache is considered stale when the time to fetch the metrics from -Ceph exceeds the configured :confval:``mgr/prometheus/scrape_interval``. +Ceph exceeds the configured ``mgr/prometheus/scrape_interval``. If that is the case, **a warning will be logged** and the module will either diff --git a/ceph/doc/rados/operations/monitoring.rst b/ceph/doc/rados/operations/monitoring.rst index f923942bd..e8e709f23 100644 --- a/ceph/doc/rados/operations/monitoring.rst +++ b/ceph/doc/rados/operations/monitoring.rst @@ -374,13 +374,6 @@ Most health mutes disappear if the unhealthy condition that triggered the health For example, suppose that there is one OSD down and the health check is muted. In that case, if one or more additional OSDs go down, then the health mute disappears. This behavior occurs in any health check with a threshold value. -Detecting Configuration Issues -============================== - -Although Ceph continuously monitors itself, some configuration issues can be -detected only with an external tool called ``ceph-medic``. ->>>>>>> 41684ebd33b (doc/rados: edit ops/monitoring.rst (2 of 3)) - Checking a Cluster's Usage Stats ================================ @@ -404,48 +397,49 @@ The output of ``ceph df`` resembles the following:: cephfs.a.meta 2 32 6.8 KiB 6.8 KiB 0 B 22 96 KiB 96 KiB 0 B 0 297 GiB N/A N/A 22 0 B 0 B cephfs.a.data 3 32 0 B 0 B 0 B 0 0 B 0 B 0 B 0 99 GiB N/A N/A 0 0 B 0 B test 4 32 22 MiB 22 MiB 50 KiB 248 19 MiB 19 MiB 50 KiB 0 297 GiB N/A N/A 248 0 B 0 B - -- **CLASS:** for example, "ssd" or "hdd" + +- **CLASS:** For example, "ssd" or "hdd". - **SIZE:** The amount of storage capacity managed by the cluster. - **AVAIL:** The amount of free space available in the cluster. - **USED:** The amount of raw storage consumed by user data (excluding - BlueStore's database) + BlueStore's database). - **RAW USED:** The amount of raw storage consumed by user data, internal - overhead, or reserved capacity. -- **%RAW USED:** The percentage of raw storage used. Use this number in - conjunction with the ``full ratio`` and ``near full ratio`` to ensure that - you are not reaching your cluster's capacity. See `Storage Capacity`_ for - additional details. + overhead, and reserved capacity. +- **%RAW USED:** The percentage of raw storage used. Watch this number in + conjunction with ``full ratio`` and ``near full ratio`` to be forewarned when + your cluster approaches the fullness thresholds. See `Storage Capacity`_. -**POOLS:** +**POOLS:** -The **POOLS** section of the output provides a list of pools and the notional -usage of each pool. The output from this section **DOES NOT** reflect replicas, -clones or snapshots. For example, if you store an object with 1MB of data, the -notional usage will be 1MB, but the actual usage may be 2MB or more depending -on the number of replicas, clones and snapshots. +The POOLS section of the output provides a list of pools and the *notional* +usage of each pool. This section of the output **DOES NOT** reflect replicas, +clones, or snapshots. For example, if you store an object with 1MB of data, +then the notional usage will be 1MB, but the actual usage might be 2MB or more +depending on the number of replicas, clones, and snapshots. -- **ID:** The number of the node within the pool. -- **STORED:** actual amount of data user/Ceph has stored in a pool. This is - similar to the USED column in earlier versions of Ceph but the calculations - (for BlueStore!) are more precise (gaps are properly handled). +- **ID:** The number of the specific node within the pool. +- **STORED:** The actual amount of data that the user has stored in a pool. + This is similar to the USED column in earlier versions of Ceph, but the + calculations (for BlueStore!) are more precise (in that gaps are properly + handled). - - **(DATA):** usage for RBD (RADOS Block Device), CephFS file data, and RGW + - **(DATA):** Usage for RBD (RADOS Block Device), CephFS file data, and RGW (RADOS Gateway) object data. - - **(OMAP):** key-value pairs. Used primarily by CephFS and RGW (RADOS + - **(OMAP):** Key-value pairs. Used primarily by CephFS and RGW (RADOS Gateway) for metadata storage. -- **OBJECTS:** The notional number of objects stored per pool. "Notional" is - defined above in the paragraph immediately under "POOLS". -- **USED:** The space allocated for a pool over all OSDs. This includes - replication, allocation granularity, and erasure-coding overhead. Compression - savings and object content gaps are also taken into account. BlueStore's - database is not included in this amount. +- **OBJECTS:** The notional number of objects stored per pool (that is, the + number of objects other than replicas, clones, or snapshots). +- **USED:** The space allocated for a pool over all OSDs. This includes space + for replication, space for allocation granularity, and space for the overhead + associated with erasure-coding. Compression savings and object-content gaps + are also taken into account. However, BlueStore's database is not included in + the amount reported under USED. - - **(DATA):** object usage for RBD (RADOS Block Device), CephFS file data, and RGW - (RADOS Gateway) object data. - - **(OMAP):** object key-value pairs. Used primarily by CephFS and RGW (RADOS + - **(DATA):** Object usage for RBD (RADOS Block Device), CephFS file data, + and RGW (RADOS Gateway) object data. + - **(OMAP):** Object key-value pairs. Used primarily by CephFS and RGW (RADOS Gateway) for metadata storage. - **%USED:** The notional percentage of storage used per pool. @@ -454,50 +448,50 @@ on the number of replicas, clones and snapshots. - **QUOTA OBJECTS:** The number of quota objects. - **QUOTA BYTES:** The number of bytes in the quota objects. - **DIRTY:** The number of objects in the cache pool that have been written to - the cache pool but have not been flushed yet to the base pool. This field is - only available when cache tiering is in use. -- **USED COMPR:** amount of space allocated for compressed data (i.e. this - includes comrpessed data plus all the allocation, replication and erasure - coding overhead). -- **UNDER COMPR:** amount of data passed through compression (summed over all - replicas) and beneficial enough to be stored in a compressed form. + the cache pool but have not yet been flushed to the base pool. This field is + available only when cache tiering is in use. +- **USED COMPR:** The amount of space allocated for compressed data. This + includes compressed data in addition to all of the space required for + replication, allocation granularity, and erasure- coding overhead. +- **UNDER COMPR:** The amount of data that has passed through compression + (summed over all replicas) and that is worth storing in a compressed form. +.. note:: The numbers in the POOLS section are notional. They do not include + the number of replicas, clones, or snapshots. As a result, the sum of the + USED and %USED amounts in the POOLS section of the output will not be equal + to the sum of the USED and %USED amounts in the RAW section of the output. -.. note:: The numbers in the POOLS section are notional. They are not - inclusive of the number of replicas, snapshots or clones. As a result, the - sum of the USED and %USED amounts will not add up to the USED and %USED - amounts in the RAW section of the output. - -.. note:: The MAX AVAIL value is a complicated function of the replication - or erasure code used, the CRUSH rule that maps storage to devices, the - utilization of those devices, and the configured ``mon_osd_full_ratio``. +.. note:: The MAX AVAIL value is a complicated function of the replication or + the kind of erasure coding used, the CRUSH rule that maps storage to + devices, the utilization of those devices, and the configured + ``mon_osd_full_ratio`` setting. Checking OSD Status =================== -You can check OSDs to ensure they are ``up`` and ``in`` by executing the +To check if OSDs are ``up`` and ``in``, run the following command: .. prompt:: bash # ceph osd stat - -Or: + +Alternatively, you can run the following command: .. prompt:: bash # ceph osd dump - -You can also check view OSDs according to their position in the CRUSH map by -using the folloiwng command: + +To view OSDs according to their position in the CRUSH map, run the following +command: .. prompt:: bash # ceph osd tree -Ceph will print out a CRUSH tree with a host, its OSDs, whether they are up -and their weight: +To print out a CRUSH tree that displays a host, its OSDs, whether the OSDs are +``up``, and the weight of the OSDs, run the following command: .. code-block:: bash @@ -509,88 +503,90 @@ and their weight: 1 ssd 1.00000 osd.1 up 1.00000 1.00000 2 ssd 1.00000 osd.2 up 1.00000 1.00000 -For a detailed discussion, refer to `Monitoring OSDs and Placement Groups`_. +See `Monitoring OSDs and Placement Groups`_. Checking Monitor Status ======================= -If your cluster has multiple monitors (likely), you should check the monitor -quorum status after you start the cluster and before reading and/or writing data. A -quorum must be present when multiple monitors are running. You should also check -monitor status periodically to ensure that they are running. +If your cluster has multiple monitors, then you need to perform certain +"monitor status" checks. After starting the cluster and before reading or +writing data, you should check quorum status. A quorum must be present when +multiple monitors are running to ensure proper functioning of your Ceph +cluster. Check monitor status regularly in order to ensure that all of the +monitors are running. -To see display the monitor map, execute the following: +To display the monitor map, run the following command: .. prompt:: bash $ ceph mon stat - -Or: + +Alternatively, you can run the following command: .. prompt:: bash $ ceph mon dump - -To check the quorum status for the monitor cluster, execute the following: - + +To check the quorum status for the monitor cluster, run the following command: + .. prompt:: bash $ ceph quorum_status -Ceph will return the quorum status. For example, a Ceph cluster consisting of -three monitors may return the following: +Ceph returns the quorum status. For example, a Ceph cluster that consists of +three monitors might return the following: .. code-block:: javascript - { "election_epoch": 10, - "quorum": [ - 0, - 1, - 2], - "quorum_names": [ - "a", - "b", - "c"], - "quorum_leader_name": "a", - "monmap": { "epoch": 1, - "fsid": "444b489c-4f16-4b75-83f0-cb8097468898", - "modified": "2011-12-12 13:28:27.505520", - "created": "2011-12-12 13:28:27.505520", - "features": {"persistent": [ - "kraken", - "luminous", - "mimic"], - "optional": [] - }, - "mons": [ - { "rank": 0, - "name": "a", - "addr": "127.0.0.1:6789/0", - "public_addr": "127.0.0.1:6789/0"}, - { "rank": 1, - "name": "b", - "addr": "127.0.0.1:6790/0", - "public_addr": "127.0.0.1:6790/0"}, - { "rank": 2, - "name": "c", - "addr": "127.0.0.1:6791/0", - "public_addr": "127.0.0.1:6791/0"} - ] - } - } + { "election_epoch": 10, + "quorum": [ + 0, + 1, + 2], + "quorum_names": [ + "a", + "b", + "c"], + "quorum_leader_name": "a", + "monmap": { "epoch": 1, + "fsid": "444b489c-4f16-4b75-83f0-cb8097468898", + "modified": "2011-12-12 13:28:27.505520", + "created": "2011-12-12 13:28:27.505520", + "features": {"persistent": [ + "kraken", + "luminous", + "mimic"], + "optional": [] + }, + "mons": [ + { "rank": 0, + "name": "a", + "addr": "127.0.0.1:6789/0", + "public_addr": "127.0.0.1:6789/0"}, + { "rank": 1, + "name": "b", + "addr": "127.0.0.1:6790/0", + "public_addr": "127.0.0.1:6790/0"}, + { "rank": 2, + "name": "c", + "addr": "127.0.0.1:6791/0", + "public_addr": "127.0.0.1:6791/0"} + ] + } + } Checking MDS Status =================== -Metadata servers provide metadata services for CephFS. Metadata servers have -two sets of states: ``up | down`` and ``active | inactive``. To ensure your -metadata servers are ``up`` and ``active``, execute the following: +Metadata servers provide metadata services for CephFS. Metadata servers have +two sets of states: ``up | down`` and ``active | inactive``. To check if your +metadata servers are ``up`` and ``active``, run the following command: .. prompt:: bash $ ceph mds stat - -To display details of the metadata cluster, execute the following: + +To display details of the metadata servers, run the following command: .. prompt:: bash $ @@ -600,9 +596,9 @@ To display details of the metadata cluster, execute the following: Checking Placement Group States =============================== -Placement groups map objects to OSDs. When you monitor your -placement groups, you will want them to be ``active`` and ``clean``. -For a detailed discussion, refer to `Monitoring OSDs and Placement Groups`_. +Placement groups (PGs) map objects to OSDs. PGs are monitored in order to +ensure that they are ``active`` and ``clean``. See `Monitoring OSDs and +Placement Groups`_. .. _Monitoring OSDs and Placement Groups: ../monitoring-osd-pg @@ -611,36 +607,36 @@ For a detailed discussion, refer to `Monitoring OSDs and Placement Groups`_. Using the Admin Socket ====================== -The Ceph admin socket allows you to query a daemon via a socket interface. -By default, Ceph sockets reside under ``/var/run/ceph``. To access a daemon -via the admin socket, login to the host running the daemon and use the -following command: +The Ceph admin socket allows you to query a daemon via a socket interface. By +default, Ceph sockets reside under ``/var/run/ceph``. To access a daemon via +the admin socket, log in to the host that is running the daemon and run one of +the two following commands: .. prompt:: bash $ ceph daemon {daemon-name} ceph daemon {path-to-socket-file} -For example, the following are equivalent: +For example, the following commands are equivalent to each other: .. prompt:: bash $ ceph daemon osd.0 foo ceph daemon /var/run/ceph/ceph-osd.0.asok foo -To view the available admin socket commands, execute the following command: +To view the available admin-socket commands, run the following command: .. prompt:: bash $ ceph daemon {daemon-name} help -The admin socket command enables you to show and set your configuration at -runtime. See `Viewing a Configuration at Runtime`_ for details. - -Additionally, you can set configuration values at runtime directly (i.e., the -admin socket bypasses the monitor, unlike ``ceph tell {daemon-type}.{id} -config set``, which relies on the monitor but doesn't require you to login -directly to the host in question ). +Admin-socket commands enable you to view and set your configuration at runtime. +For more on viewing your configuration, see `Viewing a Configuration at +Runtime`_. There are two methods of setting configuration value at runtime: (1) +using the admin socket, which bypasses the monitor and requires a direct login +to the host in question, and (2) using the ``ceph tell {daemon-type}.{id} +config set`` command, which relies on the monitor and does not require a direct +login. .. _Viewing a Configuration at Runtime: ../../configuration/ceph-conf#viewing-a-configuration-at-runtime .. _Storage Capacity: ../../configuration/mon-config-ref#storage-capacity diff --git a/ceph/doc/radosgw/multisite.rst b/ceph/doc/radosgw/multisite.rst index bddb7ed05..976ed9e3f 100644 --- a/ceph/doc/radosgw/multisite.rst +++ b/ceph/doc/radosgw/multisite.rst @@ -1011,7 +1011,7 @@ Making a Zonegroup the Default One zonegroup in the list of zonegroups must be the default zonegroup. There can be only one default zonegroup. In the case that there is only one zonegroup which was not designated the default zonegroup when it was created, use the -folloiwng command to make it the default zonegroup. Commands of this form can +following command to make it the default zonegroup. Commands of this form can be used to change which zonegroup is the default. #. Designate a zonegroup as the default zonegroup: @@ -1184,8 +1184,8 @@ The zonegroup configuration looks like this: Setting a Zonegroup ~~~~~~~~~~~~~~~~~~~~ -The process of defining a zonegroup consists of creating a JSON object and, at -a minimum, specifying the required settings: +The process of defining a zonegroup consists of creating a JSON object and +specifying the required settings. Here is a list of the required settings: 1. ``name``: The name of the zonegroup. Required. @@ -1223,26 +1223,26 @@ a minimum, specifying the required settings: object data. Set to ``default-placement`` by default. It is also possible to set a per-user default placement in the user info for each user. -To set a zonegroup, create a JSON object that contains the required fields, -save the object to a file (e.g., ``zonegroup.json``), and run the following -command: +Setting a Zonegroup - Procedure +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. prompt:: bash # +#. To set a zonegroup, create a JSON object that contains the required fields, + save the object to a file (for example, ``zonegroup.json``), and run the + following command: + + .. prompt:: bash # - radosgw-admin zonegroup set --infile zonegroup.json + radosgw-admin zonegroup set --infile zonegroup.json -Where ``zonegroup.json`` is the JSON file you created. + Where ``zonegroup.json`` is the JSON file you created. -.. important:: The ``default`` zonegroup ``is_master`` setting is ``true`` by - default. If you create a new zonegroup and want to make it the master - zonegroup, you must either set the ``default`` zonegroup ``is_master`` - setting to ``false``, or delete the ``default`` zonegroup. + .. important:: The ``default`` zonegroup ``is_master`` setting is ``true`` by default. If you create an additional zonegroup and want to make it the master zonegroup, you must either set the ``default`` zonegroup ``is_master`` setting to ``false`` or delete the ``default`` zonegroup. -Finally, update the period: +#. Update the period: -.. prompt:: bash # + .. prompt:: bash # - radosgw-admin period update --commit + radosgw-admin period update --commit Setting a Zonegroup Map ~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/ceph/doc/radosgw/s3select.rst b/ceph/doc/radosgw/s3select.rst index fc7ae339c..83d2df47f 100644 --- a/ceph/doc/radosgw/s3select.rst +++ b/ceph/doc/radosgw/s3select.rst @@ -7,44 +7,63 @@ Overview -------- - | The purpose of the **s3 select** engine is to create an efficient pipe between user client and storage nodes (the engine should be close as possible to storage). - | It enables selection of a restricted subset of (structured) data stored in an S3 object using an SQL-like syntax. - | It also enables for higher level analytic-applications (such as SPARK-SQL) , using that feature to improve their latency and throughput. +The purpose of the **s3 select** engine is to create an efficient pipe between +user client and storage nodes (the engine should be close as possible to +storage). It enables the selection of a restricted subset of (structured) data +stored in an S3 object using an SQL-like syntax. It also enables for higher +level analytic-applications (such as SPARK-SQL), using that feature to improve +their latency and throughput. - | For example, a s3-object of several GB (CSV file), a user needs to extract a single column which filtered by another column. - | As the following query: - | ``select customer-id from s3Object where age>30 and age<65;`` +For example, an s3-object of several GB (CSV file), a user needs to extract a +single column filtered by another column. As the following query: ``select +customer-id from s3Object where age>30 and age<65;`` - | Currently the whole s3-object must retrieve from OSD via RGW before filtering and extracting data. - | By "pushing down" the query into OSD , it's possible to save a lot of network and CPU(serialization / deserialization). +Currently the whole s3-object must be retrieved from OSD via RGW before +filtering and extracting data. By "pushing down" the query into radosgw, it's +possible to save a lot of network and CPU(serialization / deserialization). - | **The bigger the object, and the more accurate the query, the better the performance**. + **The bigger the object, and the more accurate the query, the better the + performance**. Basic workflow -------------- - | S3-select query is sent to RGW via `AWS-CLI `_ +S3-select query is sent to RGW via `AWS-CLI +`_ - | It passes the authentication and permission process as an incoming message (POST). - | **RGWSelectObj_ObjStore_S3::send_response_data** is the “entry point”, it handles each fetched chunk according to input object-key. - | **send_response_data** is first handling the input query, it extracts the query and other CLI parameters. +It passes the authentication and permission process as an incoming message +(POST). **RGWSelectObj_ObjStore_S3::send_response_data** is the “entry point”, +it handles each fetched chunk according to input object-key. +**send_response_data** is first handling the input query, it extracts the query +and other CLI parameters. - | Per each new fetched chunk (~4m), RGW executes s3-select query on it. - | The current implementation supports CSV objects and since chunks are randomly “cutting” the CSV rows in the middle, those broken-lines (first or last per chunk) are skipped while processing the query. - | Those “broken” lines are stored and later merged with the next broken-line (belong to the next chunk), and finally processed. +Per each new fetched chunk (~4m), RGW executes an s3-select query on it. The +current implementation supports CSV objects and since chunks are randomly +“cutting” the CSV rows in the middle, those broken-lines (first or last per +chunk) are skipped while processing the query. Those “broken” lines are +stored and later merged with the next broken-line (belong to the next chunk), +and finally processed. - | Per each processed chunk an output message is formatted according to `AWS specification `_ and sent back to the client. - | RGW supports the following response: ``{:event-type,records} {:content-type,application/octet-stream} {:message-type,event}``. - | For aggregation queries the last chunk should be identified as the end of input, following that the s3-select-engine initiates end-of-process and produces an aggregate result. +Per each processed chunk an output message is formatted according to `AWS +specification +`_ +and sent back to the client. RGW supports the following response: +``{:event-type,records} {:content-type,application/octet-stream} +{:message-type,event}``. For aggregation queries the last chunk should be +identified as the end of input, following that the s3-select-engine initiates +end-of-process and produces an aggregated result. Basic functionalities ~~~~~~~~~~~~~~~~~~~~~ - | **S3select** has a definite set of functionalities that should be implemented (if we wish to stay compliant with AWS), currently only a portion of it is implemented. +**S3select** has a definite set of functionalities compliant with AWS. - | The implemented software architecture supports basic arithmetic expressions, logical and compare expressions, including nested function calls and casting operators, that alone enables the user reasonable flexibility. - | review the below s3-select-feature-table_. +The implemented software architecture supports basic arithmetic expressions, +logical and compare expressions, including nested function calls and casting +operators, which enables the user great flexibility. + +review the below s3-select-feature-table_. Error Handling diff --git a/ceph/doc/start/documenting-ceph.rst b/ceph/doc/start/documenting-ceph.rst index 4c8dca842..3158f8a6a 100644 --- a/ceph/doc/start/documenting-ceph.rst +++ b/ceph/doc/start/documenting-ceph.rst @@ -2,11 +2,8 @@ Documenting Ceph ================== -The **easiest way** to help the Ceph project is to contribute to the -documentation. As the Ceph user base grows and the development pace quickens, an -increasing number of people are updating the documentation and adding new -information. Even small contributions like fixing spelling errors or clarifying -instructions will help the Ceph project immensely. +You can help the Ceph project by contributing to the documentation. Even +small contributions help the Ceph project. The Ceph documentation source resides in the ``ceph/doc`` directory of the Ceph repository, and Python Sphinx renders the source into HTML and manpages. The @@ -47,10 +44,10 @@ branch name you prefer (for example, ``pacific``, to create a URL that reads Making Contributions ==================== -Making a documentation contribution generally involves the same procedural -sequence as making a code contribution, except that you must build documentation -source instead of compiling program source. The sequence includes the following -steps: +Making a documentation contribution involves the same basic procedure as making +a code contribution, with one exception: you must build documentation source +instead of compiling program source. This sequence (the sequence of building +the documentation source) includes the following steps: #. `Get the Source`_ #. `Select a Branch`_ @@ -64,32 +61,33 @@ steps: Get the Source -------------- -Ceph documentation lives in the Ceph repository right alongside the Ceph source -code under the ``ceph/doc`` directory. For details on github and Ceph, -see :ref:`Get Involved`. +The source of the Ceph documentation is a collection of ReStructured Text files +that are in the Ceph repository in the ``ceph/doc`` directory. For details +on GitHub and Ceph, see :ref:`Get Involved`. -The most common way to make contributions is to use the `Fork and Pull`_ -approach. You must: +Use the `Fork and Pull`_ approach to make documentation contributions. To do +this, you must: -#. Install git locally. For Debian/Ubuntu, execute: +#. Install git locally. In Debian or Ubuntu, run the following command: .. prompt:: bash $ sudo apt-get install git - For Fedora, execute: + In Fedora, run the following command: .. prompt:: bash $ sudo yum install git - For CentOS/RHEL, execute: + In CentOS/RHEL, run the following command: .. prompt:: bash $ sudo yum install git -#. Ensure your ``.gitconfig`` file has your name and email address. : +#. Make sure that your ``.gitconfig`` file has been configured to include your + name and email address: .. code-block:: ini @@ -109,37 +107,36 @@ approach. You must: #. Fork the Ceph project. See https://github.com/ceph/ceph. -#. Clone your fork of the Ceph project to your local host. +#. Clone your fork of the Ceph project to your local host. This creates what is + known as a "local working copy". +The Ceph documentation is organized by component: -Ceph organizes documentation into an information architecture primarily by its -main components. - -- **Ceph Storage Cluster:** The Ceph Storage Cluster documentation resides - under the ``doc/rados`` directory. +- **Ceph Storage Cluster:** The Ceph Storage Cluster documentation is + in the ``doc/rados`` directory. -- **Ceph Block Device:** The Ceph Block Device documentation resides under +- **Ceph Block Device:** The Ceph Block Device documentation is in the ``doc/rbd`` directory. -- **Ceph Object Storage:** The Ceph Object Storage documentation resides under +- **Ceph Object Storage:** The Ceph Object Storage documentation is in the ``doc/radosgw`` directory. -- **Ceph File System:** The Ceph File System documentation resides under the +- **Ceph File System:** The Ceph File System documentation is in the ``doc/cephfs`` directory. -- **Installation (Quick):** Quick start documentation resides under the +- **Installation (Quick):** Quick start documentation is in the ``doc/start`` directory. -- **Installation (Manual):** Manual installation documentation resides under - the ``doc/install`` directory. +- **Installation (Manual):** Documentaton concerning the manual installation of + Ceph is in the ``doc/install`` directory. -- **Manpage:** Manpage source resides under the ``doc/man`` directory. +- **Manpage:** Manpage source is in the ``doc/man`` directory. -- **Developer:** Developer documentation resides under the ``doc/dev`` +- **Developer:** Developer documentation is in the ``doc/dev`` directory. -- **Images:** If you include images such as JPEG or PNG files, you should - store them under the ``doc/images`` directory. +- **Images:** Images including JPEG and PNG files are stored in the + ``doc/images`` directory. Select a Branch diff --git a/ceph/qa/suites/fs/functional/tasks/snap_schedule_snapdir.yaml b/ceph/qa/suites/fs/functional/tasks/snap_schedule_snapdir.yaml new file mode 100644 index 000000000..7bbcf000f --- /dev/null +++ b/ceph/qa/suites/fs/functional/tasks/snap_schedule_snapdir.yaml @@ -0,0 +1,30 @@ +overrides: + ceph: + conf: + mgr: + debug mgr: 20 + debug ms: 1 + debug finisher: 20 + debug client: 20 + log-whitelist: + - OSD full dropping all updates + - OSD near full + - pausewr flag + - failsafe engaged, dropping updates + - failsafe disengaged, no longer dropping + - is full \(reached quota + - POOL_FULL + - POOL_BACKFILLFULL + +overrides: + kclient: + snapdirname: .customsnapkernel + ceph: + conf: + client: + client snapdir: .customsnapfuse + +tasks: + - cephfs_test_runner: + modules: + - tasks.cephfs.test_snap_schedules.TestSnapSchedulesSnapdir diff --git a/ceph/qa/suites/fs/workload/ms_mode/$ b/ceph/qa/suites/fs/workload/ms_mode/$ new file mode 100644 index 000000000..e69de29bb diff --git a/ceph/qa/suites/fs/workload/ms_mode/crc.yaml b/ceph/qa/suites/fs/workload/ms_mode/crc.yaml new file mode 100644 index 000000000..7efada467 --- /dev/null +++ b/ceph/qa/suites/fs/workload/ms_mode/crc.yaml @@ -0,0 +1,3 @@ +overrides: + kclient: + mntopts: ["ms_mode=crc"] diff --git a/ceph/qa/suites/fs/workload/ms_mode/legacy.yaml b/ceph/qa/suites/fs/workload/ms_mode/legacy.yaml new file mode 100644 index 000000000..8a68a7756 --- /dev/null +++ b/ceph/qa/suites/fs/workload/ms_mode/legacy.yaml @@ -0,0 +1,3 @@ +overrides: + kclient: + mntopts: ["ms_mode=legacy"] diff --git a/ceph/qa/suites/fs/workload/ms_mode/secure.yaml b/ceph/qa/suites/fs/workload/ms_mode/secure.yaml new file mode 100644 index 000000000..b4a4221d5 --- /dev/null +++ b/ceph/qa/suites/fs/workload/ms_mode/secure.yaml @@ -0,0 +1,3 @@ +overrides: + kclient: + mntopts: ["ms_mode=secure"] diff --git a/ceph/qa/suites/orch/cephadm/workunits/task/test_iscsi_pids_limit.yaml b/ceph/qa/suites/orch/cephadm/workunits/task/test_iscsi_pids_limit.yaml new file mode 100644 index 000000000..b271777e1 --- /dev/null +++ b/ceph/qa/suites/orch/cephadm/workunits/task/test_iscsi_pids_limit.yaml @@ -0,0 +1,20 @@ +roles: +- - host.a + - osd.0 + - osd.1 + - osd.2 + - mon.a + - mgr.a + - client.0 +tasks: +- install: +- cephadm: +- cephadm.shell: + host.a: + - ceph osd pool create foo + - rbd pool init foo + - ceph orch apply iscsi foo u p +- workunit: + clients: + client.0: + - cephadm/test_iscsi_pids_limit.sh diff --git a/ceph/qa/suites/rgw/multifs/tasks/rgw_bucket_quota.yaml b/ceph/qa/suites/rgw/multifs/tasks/rgw_bucket_quota.yaml index eb4a67ea0..e07c8b5cc 100644 --- a/ceph/qa/suites/rgw/multifs/tasks/rgw_bucket_quota.yaml +++ b/ceph/qa/suites/rgw/multifs/tasks/rgw_bucket_quota.yaml @@ -1,5 +1,3 @@ -# Amazon/S3.pm (cpan) not available as an rpm -os_type: ubuntu tasks: - install: - ceph: diff --git a/ceph/qa/suites/rgw/multifs/tasks/rgw_multipart_upload.yaml b/ceph/qa/suites/rgw/multifs/tasks/rgw_multipart_upload.yaml index f7e561f07..bac4f4016 100644 --- a/ceph/qa/suites/rgw/multifs/tasks/rgw_multipart_upload.yaml +++ b/ceph/qa/suites/rgw/multifs/tasks/rgw_multipart_upload.yaml @@ -1,5 +1,3 @@ -# Amazon::S3 is not available on el7 -os_type: ubuntu tasks: - install: - ceph: diff --git a/ceph/qa/suites/rgw/multifs/tasks/rgw_user_quota.yaml b/ceph/qa/suites/rgw/multifs/tasks/rgw_user_quota.yaml index e661ff33d..92c63d2e8 100644 --- a/ceph/qa/suites/rgw/multifs/tasks/rgw_user_quota.yaml +++ b/ceph/qa/suites/rgw/multifs/tasks/rgw_user_quota.yaml @@ -1,5 +1,3 @@ -# Amazon/S3.pm (cpan) not available as an rpm -os_type: ubuntu tasks: - install: - ceph: diff --git a/ceph/qa/suites/rgw/multifs/ubuntu_latest.yaml b/ceph/qa/suites/rgw/multifs/ubuntu_latest.yaml new file mode 120000 index 000000000..3a09f9abb --- /dev/null +++ b/ceph/qa/suites/rgw/multifs/ubuntu_latest.yaml @@ -0,0 +1 @@ +.qa/distros/supported/ubuntu_latest.yaml \ No newline at end of file diff --git a/ceph/qa/suites/rgw/multisite/supported-random-distro$ b/ceph/qa/suites/rgw/multisite/supported-random-distro$ new file mode 120000 index 000000000..0862b4457 --- /dev/null +++ b/ceph/qa/suites/rgw/multisite/supported-random-distro$ @@ -0,0 +1 @@ +.qa/distros/supported-random-distro$ \ No newline at end of file diff --git a/ceph/qa/suites/rgw/multisite/tasks/test_multi.yaml b/ceph/qa/suites/rgw/multisite/tasks/test_multi.yaml index 3247f2416..1a65a67b5 100644 --- a/ceph/qa/suites/rgw/multisite/tasks/test_multi.yaml +++ b/ceph/qa/suites/rgw/multisite/tasks/test_multi.yaml @@ -1,8 +1,3 @@ -# see http://tracker.ceph.com/issues/20360 and http://tracker.ceph.com/issues/18126 -#os_type: centos -# ubuntu and no valgrind until we migrate test to py3 -os_type: ubuntu - tasks: - install: - ceph: {cluster: c1} @@ -10,16 +5,12 @@ tasks: - rgw: c1.client.0: port: 8000 -# valgrind: [--tool=memcheck, --max-threads=1024] # http://tracker.ceph.com/issues/25214 c1.client.1: port: 8001 -# valgrind: [--tool=memcheck, --max-threads=1024] c2.client.0: port: 8000 -# valgrind: [--tool=memcheck, --max-threads=1024] c2.client.1: port: 8001 -# valgrind: [--tool=memcheck, --max-threads=1024] - rgw-multisite: - rgw-multisite-tests: config: diff --git a/ceph/qa/suites/rgw/multisite/valgrind.yaml b/ceph/qa/suites/rgw/multisite/valgrind.yaml deleted file mode 100644 index 71c56fae4..000000000 --- a/ceph/qa/suites/rgw/multisite/valgrind.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# see http://tracker.ceph.com/issues/20360 and http://tracker.ceph.com/issues/18126 -#os_type: centos -# ubuntu and no valgrind until we migrate test to py3 -os_type: ubuntu - -overrides: - install: - ceph: - ceph: - conf: - global: - osd heartbeat grace: 40 - mon: - mon osd crush smoke test: false - osd: - osd fast shutdown: false -# valgrind: -# mon: [--tool=memcheck, --leak-check=full, --show-reachable=yes] -# osd: [--tool=memcheck] -# mds: [--tool=memcheck] diff --git a/ceph/qa/suites/rgw/multisite/valgrind.yaml.disabled b/ceph/qa/suites/rgw/multisite/valgrind.yaml.disabled new file mode 100644 index 000000000..36e20f02c --- /dev/null +++ b/ceph/qa/suites/rgw/multisite/valgrind.yaml.disabled @@ -0,0 +1,20 @@ +overrides: + install: + ceph: + ceph: + conf: + global: + osd heartbeat grace: 40 + mon: + mon osd crush smoke test: false + osd: + osd fast shutdown: false + rgw: + c1.client.0: + valgrind: [--tool=memcheck, --max-threads=1024] # http://tracker.ceph.com/issues/25214 + c1.client.1: + valgrind: [--tool=memcheck, --max-threads=1024] + c2.client.0: + valgrind: [--tool=memcheck, --max-threads=1024] + c2.client.1: + valgrind: [--tool=memcheck, --max-threads=1024] diff --git a/ceph/qa/suites/rgw/tempest/tasks/rgw_tempest.yaml b/ceph/qa/suites/rgw/tempest/tasks/rgw_tempest.yaml index 08739e969..1413465a3 100644 --- a/ceph/qa/suites/rgw/tempest/tasks/rgw_tempest.yaml +++ b/ceph/qa/suites/rgw/tempest/tasks/rgw_tempest.yaml @@ -1,7 +1,3 @@ -# ubuntu for py2 until we move to py3 -os_type: ubuntu - -# see http://tracker.ceph.com/issues/20360 and http://tracker.ceph.com/issues/18126 tasks: - install: - ceph: diff --git a/ceph/qa/suites/rgw/thrash/ubuntu_latest.yaml b/ceph/qa/suites/rgw/thrash/ubuntu_latest.yaml new file mode 120000 index 000000000..3a09f9abb --- /dev/null +++ b/ceph/qa/suites/rgw/thrash/ubuntu_latest.yaml @@ -0,0 +1 @@ +.qa/distros/supported/ubuntu_latest.yaml \ No newline at end of file diff --git a/ceph/qa/suites/rgw/thrash/workload/rgw_bucket_quota.yaml b/ceph/qa/suites/rgw/thrash/workload/rgw_bucket_quota.yaml index eef9ca3ec..bc441ff32 100644 --- a/ceph/qa/suites/rgw/thrash/workload/rgw_bucket_quota.yaml +++ b/ceph/qa/suites/rgw/thrash/workload/rgw_bucket_quota.yaml @@ -1,5 +1,3 @@ -# Amazon/S3.pm (cpan) not available as an rpm -os_type: ubuntu tasks: - workunit: clients: diff --git a/ceph/qa/suites/rgw/thrash/workload/rgw_multipart_upload.yaml b/ceph/qa/suites/rgw/thrash/workload/rgw_multipart_upload.yaml index f364f2d23..1b98f2625 100644 --- a/ceph/qa/suites/rgw/thrash/workload/rgw_multipart_upload.yaml +++ b/ceph/qa/suites/rgw/thrash/workload/rgw_multipart_upload.yaml @@ -1,5 +1,3 @@ -# Amazon::S3 is not available on el7 -os_type: ubuntu tasks: - workunit: clients: diff --git a/ceph/qa/suites/rgw/thrash/workload/rgw_user_quota.yaml b/ceph/qa/suites/rgw/thrash/workload/rgw_user_quota.yaml index 670ac0c17..75ba3d474 100644 --- a/ceph/qa/suites/rgw/thrash/workload/rgw_user_quota.yaml +++ b/ceph/qa/suites/rgw/thrash/workload/rgw_user_quota.yaml @@ -1,5 +1,3 @@ -# Amazon/S3.pm (cpan) not available as an rpm -os_type: ubuntu tasks: - workunit: clients: diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/.qa b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/.qa new file mode 120000 index 000000000..a23f7e045 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/.qa @@ -0,0 +1 @@ +../../.qa \ No newline at end of file diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/% b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/% new file mode 100644 index 000000000..e69de29bb diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/.qa b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/.qa new file mode 120000 index 000000000..a23f7e045 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/.qa @@ -0,0 +1 @@ +../../.qa \ No newline at end of file diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/+ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/+ new file mode 100644 index 000000000..e69de29bb diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/.qa b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/.qa new file mode 120000 index 000000000..a602a0353 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/.qa @@ -0,0 +1 @@ +../.qa/ \ No newline at end of file diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/openstack.yaml b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/openstack.yaml new file mode 100644 index 000000000..b0f3b9b4d --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/openstack.yaml @@ -0,0 +1,4 @@ +openstack: + - volumes: # attached to each instance + count: 4 + size: 30 # GB diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/start.yaml b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/start.yaml new file mode 100644 index 000000000..b2bce035e --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/0-cluster/start.yaml @@ -0,0 +1,19 @@ +meta: +- desc: | + Install and run ceph on one node, + with a separate client 1. + Upgrade client 1 to reef + Run tests against old cluster +roles: +- - mon.a + - mon.b + - mon.c + - osd.0 + - osd.1 + - osd.2 + - client.0 + - mgr.x +- - client.1 +overrides: + ceph: + fs: xfs diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/1-install/.qa b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/1-install/.qa new file mode 120000 index 000000000..a602a0353 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/1-install/.qa @@ -0,0 +1 @@ +../.qa/ \ No newline at end of file diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/1-install/pacific-client-x.yaml b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/1-install/pacific-client-x.yaml new file mode 100644 index 000000000..12c989e68 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/1-install/pacific-client-x.yaml @@ -0,0 +1,11 @@ +tasks: +- install: + branch: pacific + exclude_packages: ['ceph-mgr','libcephfs2','libcephfs-devel','libcephfs-dev','python34-cephfs','python34-rados'] +- print: "**** done install pacific" +- install.upgrade: + exclude_packages: ['ceph-test', 'ceph-test-dbg','libcephfs1', 'python-ceph'] + client.1: +- print: "**** done install.upgrade to -x on client.1" +- ceph: +- print: "**** done ceph task" diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/2-workload/.qa b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/2-workload/.qa new file mode 120000 index 000000000..a602a0353 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/2-workload/.qa @@ -0,0 +1 @@ +../.qa/ \ No newline at end of file diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/2-workload/rbd_notification_tests.yaml b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/2-workload/rbd_notification_tests.yaml new file mode 100644 index 000000000..a7fb39df9 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/2-workload/rbd_notification_tests.yaml @@ -0,0 +1,34 @@ +tasks: +- parallel: + - workunit: + branch: pacific + clients: + client.0: + - rbd/notify_master.sh + env: + RBD_FEATURES: "61" + - workunit: + branch: reef + clients: + client.1: + - rbd/notify_slave.sh + env: + RBD_FEATURES: "61" + RBD_DISABLE_UPDATE_FEATURES: "1" +- print: "**** done rbd: old librbd -> new librbd" +- parallel: + - workunit: + branch: pacific + clients: + client.0: + - rbd/notify_slave.sh + env: + RBD_FEATURES: "61" + - workunit: + branch: reef + clients: + client.1: + - rbd/notify_master.sh + env: + RBD_FEATURES: "61" +- print: "**** done rbd: new librbd -> old librbd" diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/supported/.qa b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/supported/.qa new file mode 120000 index 000000000..a602a0353 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/supported/.qa @@ -0,0 +1 @@ +../.qa/ \ No newline at end of file diff --git a/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/supported/ubuntu_20.04.yaml b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/supported/ubuntu_20.04.yaml new file mode 120000 index 000000000..834ac14f7 --- /dev/null +++ b/ceph/qa/suites/upgrade-clients/client-upgrade-pacific-reef/pacific-client-x/rbd/supported/ubuntu_20.04.yaml @@ -0,0 +1 @@ +../../../../../../distros/all/ubuntu_20.04.yaml \ No newline at end of file diff --git a/ceph/qa/tasks/ceph.py b/ceph/qa/tasks/ceph.py index a6eab9be8..c9d361969 100644 --- a/ceph/qa/tasks/ceph.py +++ b/ceph/qa/tasks/ceph.py @@ -1474,9 +1474,8 @@ def healthy(ctx, config): if ctx.cluster.only(teuthology.is_type('mds', cluster_name)).remotes: # Some MDSs exist, wait for them to be healthy - ceph_fs = Filesystem(ctx) # TODO: make Filesystem cluster-aware - ceph_fs.wait_for_daemons(timeout=300) - + for fs in Filesystem.get_all_fs(ctx): + fs.wait_for_daemons(timeout=300) def wait_for_mon_quorum(ctx, config): """ diff --git a/ceph/qa/tasks/ceph_fuse.py b/ceph/qa/tasks/ceph_fuse.py index d2db29732..2712229f9 100644 --- a/ceph/qa/tasks/ceph_fuse.py +++ b/ceph/qa/tasks/ceph_fuse.py @@ -156,7 +156,7 @@ def task(ctx, config): mount_x.cephfs_mntpt = config.get("mount_path") if config.get("mountpoint"): mount_x.hostfs_mntpt = config.get("mountpoint") - mount_x.mount(createfs=False) + mount_x.mount() for info in mounted_by_me.values(): info["mount"].wait_until_mounted() diff --git a/ceph/qa/tasks/cephfs/filesystem.py b/ceph/qa/tasks/cephfs/filesystem.py index 1918fcd7e..cf4c88303 100644 --- a/ceph/qa/tasks/cephfs/filesystem.py +++ b/ceph/qa/tasks/cephfs/filesystem.py @@ -486,6 +486,17 @@ class MDSCluster(CephCluster): class Filesystem(MDSCluster): + + """ + Generator for all Filesystems in the cluster. + """ + @classmethod + def get_all_fs(cls, ctx): + mdsc = MDSCluster(ctx) + status = mdsc.status() + for fs in status.get_filesystems(): + yield cls(ctx, fscid=fs['id']) + """ This object is for driving a CephFS filesystem. The MDS daemons driven by MDSCluster may be shared with other Filesystems. diff --git a/ceph/qa/tasks/cephfs/fuse_mount.py b/ceph/qa/tasks/cephfs/fuse_mount.py index 5c5d1c85c..3bd759da8 100644 --- a/ceph/qa/tasks/cephfs/fuse_mount.py +++ b/ceph/qa/tasks/cephfs/fuse_mount.py @@ -31,18 +31,12 @@ class FuseMount(CephFSMount): self.inst = None self.addr = None - def mount(self, mntopts=[], createfs=True, check_status=True, **kwargs): + def mount(self, mntopts=[], check_status=True, **kwargs): self.update_attrs(**kwargs) self.assert_and_log_minimum_mount_details() self.setup_netns() - if createfs: - # TODO: don't call setupfs() from within mount(), since it's - # absurd. The proper order should be: create FS first and then - # call mount(). - self.setupfs(name=self.cephfs_name) - try: return self._mount(mntopts, check_status) except RuntimeError: diff --git a/ceph/qa/tasks/cephfs/kernel_mount.py b/ceph/qa/tasks/cephfs/kernel_mount.py index faf0aa19b..21be0c287 100644 --- a/ceph/qa/tasks/cephfs/kernel_mount.py +++ b/ceph/qa/tasks/cephfs/kernel_mount.py @@ -34,17 +34,12 @@ class KernelMount(CephFSMount): self.inst = None self.addr = None - def mount(self, mntopts=[], createfs=True, check_status=True, **kwargs): + def mount(self, mntopts=[], check_status=True, **kwargs): self.update_attrs(**kwargs) self.assert_and_log_minimum_mount_details() self.setup_netns() - # TODO: don't call setupfs() from within mount(), since it's - # absurd. The proper order should be: create FS first and then - # call mount(). - if createfs: - self.setupfs(name=self.cephfs_name) if not self.cephfs_mntpt: self.cephfs_mntpt = '/' diff --git a/ceph/qa/tasks/cephfs/mount.py b/ceph/qa/tasks/cephfs/mount.py index a24fd284a..20eeb4551 100644 --- a/ceph/qa/tasks/cephfs/mount.py +++ b/ceph/qa/tasks/cephfs/mount.py @@ -123,6 +123,18 @@ class CephFSMount(object): def netns_name(self, name): self._netns_name = name + def assert_that_ceph_fs_exists(self): + output = self.client_remote.run(args='ceph fs ls', stdout=StringIO()).\ + stdout.getvalue() + if self.cephfs_name: + assert self.cephfs_name in output, \ + 'expected ceph fs is not present on the cluster' + log.info(f'Mounting Ceph FS {self.cephfs_name}; just confirmed its presence on cluster') + else: + assert 'No filesystems enabled' not in output, \ + 'ceph cluster has no ceph fs, not even the default ceph fs' + log.info('Mounting default Ceph FS; just confirmed its presence on cluster') + def assert_and_log_minimum_mount_details(self): """ Make sure we have minimum details required for mounting. Ideally, this @@ -136,6 +148,8 @@ class CephFSMount(object): '3. the remote machine where CephFS will be mounted.\n') raise RuntimeError(errmsg) + self.assert_that_ceph_fs_exists() + log.info('Mounting Ceph FS. Following are details of mount; remember ' '"None" represents Python type None -') log.info(f'self.client_remote.hostname = {self.client_remote.hostname}') @@ -395,7 +409,7 @@ class CephFSMount(object): args = ['sudo', 'ip', 'link', 'set', 'brx.{0}'.format(self.nsid), 'up'] self.client_remote.run(args=args, timeout=(5*60), omit_sudo=False) - def mount(self, mntopts=[], createfs=True, check_status=True, **kwargs): + def mount(self, mntopts=[], check_status=True, **kwargs): """ kwargs expects its members to be same as the arguments accepted by self.update_attrs(). @@ -469,22 +483,19 @@ class CephFSMount(object): 2. Run update_attrs(). 3. Run mount(). - Accepts arguments of self.mount() and self.update_attrs() with 2 exceptions - - 1. Accepts wait too which can be True or False. - 2. The default value of createfs is False. + Accepts arguments of self.mount() and self.update_attrs() with 1 + exception: wait accepted too which can be True or False. """ self.umount_wait() assert not self.mounted mntopts = kwargs.pop('mntopts', []) - createfs = kwargs.pop('createfs', False) check_status = kwargs.pop('check_status', True) wait = kwargs.pop('wait', True) self.update_attrs(**kwargs) - retval = self.mount(mntopts=mntopts, createfs=createfs, - check_status=check_status) + retval = self.mount(mntopts=mntopts, check_status=check_status) # 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/ceph/qa/tasks/vstart_runner.py b/ceph/qa/tasks/vstart_runner.py index db0cb41cf..c88c93b80 100644 --- a/ceph/qa/tasks/vstart_runner.py +++ b/ceph/qa/tasks/vstart_runner.py @@ -667,7 +667,7 @@ class LocalKernelMount(KernelMount): path = "{0}/client.{1}.*.asok".format(d, self.client_id) return path - def mount(self, mntopts=[], createfs=True, check_status=True, **kwargs): + def mount(self, mntopts=[], check_status=True, **kwargs): self.update_attrs(**kwargs) self.assert_and_log_minimum_mount_details() @@ -679,9 +679,6 @@ class LocalKernelMount(KernelMount): if not self.cephfs_mntpt: self.cephfs_mntpt = "/" - # TODO: don't call setupfs() from within mount() - if createfs: - self.setupfs(name=self.cephfs_name) opts = 'norequire_active_mds' if self.client_id: @@ -801,7 +798,7 @@ class LocalFuseMount(FuseMount): path = "{0}/client.{1}.*.asok".format(d, self.client_id) return path - def mount(self, mntopts=[], createfs=True, check_status=True, **kwargs): + def mount(self, mntopts=[], check_status=True, **kwargs): self.update_attrs(**kwargs) self.assert_and_log_minimum_mount_details() @@ -811,10 +808,6 @@ class LocalFuseMount(FuseMount): else: self.using_namespace = False - # TODO: don't call setupfs() from within mount() - if createfs: - self.setupfs(name=self.cephfs_name) - stderr = StringIO() try: self.client_remote.run(args=['mkdir', '-p', self.hostfs_mntpt], diff --git a/ceph/qa/workunits/cephadm/test_iscsi_pids_limit.sh b/ceph/qa/workunits/cephadm/test_iscsi_pids_limit.sh new file mode 100755 index 000000000..32326f140 --- /dev/null +++ b/ceph/qa/workunits/cephadm/test_iscsi_pids_limit.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# checks if the containers default pids-limit (4096) is removed and Iscsi +# containers continue to run +# exits 1 if fails + +set -ex + +ISCSI_CONT_IDS=$(sudo podman ps -qa --filter='name=iscsi') +CONT_COUNT=$(echo ${ISCSI_CONT_IDS} | wc -w) +test ${CONT_COUNT} -eq 2 + +for i in ${ISCSI_CONT_IDS} +do + sudo podman exec ${i} /bin/sh -c 'for j in {0..20000}; do sleep 30 & done' +done + +for i in ${ISCSI_CONT_IDS} +do + SLEEP_COUNT=$(sudo podman exec ${i} /bin/sh -c 'ps -ef | grep -c sleep') + test ${SLEEP_COUNT} -gt 20000 +done + +echo OK diff --git a/ceph/src/.git_version b/ceph/src/.git_version index b7c9ec300..05a7db940 100644 --- a/ceph/src/.git_version +++ b/ceph/src/.git_version @@ -1,2 +1,2 @@ -5a2d516ce4b134bfafc80c4274532ac0d56fc1e2 -16.2.12 +5378749ba6be3a0868b51803968ee9cde4833a3e +16.2.13 diff --git a/ceph/src/common/legacy_config_opts.h b/ceph/src/common/legacy_config_opts.h index 1301b649e..ea103d7de 100644 --- a/ceph/src/common/legacy_config_opts.h +++ b/ceph/src/common/legacy_config_opts.h @@ -806,6 +806,10 @@ OPTION(rocksdb_collect_compaction_stats, OPT_BOOL) //For rocksdb, this behavior OPTION(rocksdb_collect_extended_stats, OPT_BOOL) //For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled. OPTION(rocksdb_collect_memory_stats, OPT_BOOL) //For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled. +OPTION(rocksdb_cf_compact_on_deletion, OPT_BOOL) +OPTION(rocksdb_cf_compact_on_deletion_sliding_window, OPT_INT) +OPTION(rocksdb_cf_compact_on_deletion_trigger, OPT_INT) + // rocksdb options that will be used for omap(if omap_backend is rocksdb) OPTION(filestore_rocksdb_options, OPT_STR) // rocksdb options that will be used in monstore @@ -1264,6 +1268,11 @@ OPTION(rgw_override_bucket_index_max_shards, OPT_U32) */ OPTION(rgw_bucket_index_max_aio, OPT_U32) +/** + * Represents the maximum AIO pending requests for multi object delete requests. + */ +OPTION(rgw_multi_obj_del_max_aio, OPT_U32) + /** * whether or not the quota/gc threads should be started */ diff --git a/ceph/src/common/options.cc b/ceph/src/common/options.cc index 381b69398..4dc69cb0d 100644 --- a/ceph/src/common/options.cc +++ b/ceph/src/common/options.cc @@ -3972,6 +3972,22 @@ std::vector