v20.2.3 Tentacle released
This is the third minor release in the Tentacle series. We recommend that all users update to this release.
Release Date ¶
August 3, 2026
Notable Changes ¶
MDS (Metadata Server) ¶
- Fixed a crash and shutdown hang that could occur when ephemeral pins were active and
max_mdswas set to 0. - Session reclaim could miss blocklisting an old session; this is now handled correctly.
- Fixed a case where scrub was unable to identify damage from an irreparable hard link.
OSD (Object Storage Daemon) ¶
- BlueStore: Fixed a BlueFS WAL envelope-mode bug that caused write buffer misalignment.
- Erasure Coding: Fixed truncate+write planning for EC shard sizes.
- Fixed a condition that prevented rolling forward of PG log entries.
- Prevented
OSDMap::check_health()from asserting when new OSDs are found in a subtree. - Scrub: "repairing" scrubs — deep scrubs re-run specifically to fix a previously detected inconsistency — are no longer blocked by the configured allowed scrub hours/days; they can now run at any time.
RGW (RADOS Gateway) ¶
- Added the
ssl_ciphersuitesoption for the Beast front-end to support TLS 1.3 cipher customization. - Fixed PutObject's
canned_aclcomparison bug affectingBlockPublicAcls. - Fixed crashes occurring on realm reload.
- Implemented CopyObject support for encrypted objects.
- Added mTLS client-certificate authentication support for Kafka notifications.
- Fixed removal of delete markers in lifecycle processing.
RADOS / librados / neorados ¶
- librbd: Fixed a use-after-free bug releasing object map locks during deep copy.
- librbd: Fixed memory leaks in PWL discard operations.
- neorados: Fixed an infinite trim loop on empty data log shards.
- Fixed cancellation-slot cleanup in librados/asio's associated executor.
Dashboard ¶
- Added a hardware-monitoring dashboard backed by node-proxy metrics.
- Fixed a bind-address regression caused by CherryPy isolation.
- Added support for adding hosts via CSV upload.
- NVMeoF: multiple CLI and UI backports (EC pool support, IO statistics, role management).
- Object: The global RGW Roles tab has been removed. Role management is now scoped under RGW Accounts, where roles can be listed, created, edited, and deleted for a selected account.
ceph-volume ¶
- Reworked OSD mapper lifecycle handling (LVM + raw) for activate.
- Improved detection of rotational media under dm-crypt to bypass the workqueue correctly.
- Fixed OSD re-deployment issues with disk-selection filters and DB devices.
- Added retry handling for
lvswhen it returns an empty result or a "devices file is missing" error.
NVMe-oF ¶
- Delayed gateway failback to avoid flapping.
- Gateways in the DELETING state no longer process starting beacons from other gateways.
rbd_with_crc32cis now enabled by default via cephadm.- Introduced a new NVMeoF mgr module. The module automatically creates the
".nvmeof"metadata pool if it does not already exist. Gateway-group state files are stored in this pool unless the user specifies another pool. The module is enabled automatically on fresh installs; on upgrades from an older cluster, it must be enabled manually.
rbd-mirror ¶
- Obsolete primary mirror snapshots are now pruned after relocation.
Changelog ¶
[Stretch Mode] mon: restrict changing mon election strategy post stretch mode (pr#65457, Kamoltat Sirivadhna)
ceph-exporter: fix systemd unit (pr#70193, Henry Hirsch)
ceph-volume: detect rotational media under dm-crypt for workqueue bypass (pr#69228, Guillaume Abrioux)
ceph-volume: fallback to default for empty get_file_contents values (pr#68883, Guillaume Abrioux)
ceph-volume: fix argparse dmcrypt opts: use str type (pr#68882, Guillaume Abrioux)
ceph-volume: fix raw activate when device path is stale (pr#69410, Guillaume Abrioux)
ceph-volume: fix re-deployment of OSD issues with disk selection filters and DB Devices (pr#69093, Raimund Sacherer)
ceph-volume: has_bluestore_label checks all bluestore label replica o… (pr#68586, Guillaume Abrioux, Redouane Kachach)
ceph-volume: make TPM2 PCR policy configurable (default to PCR 7) (pr#68681, Guillaume Abrioux)
ceph-volume: OSD mapper lifecycle (LVM + raw) for activate (pr#69091, Guillaume Abrioux)
ceph-volume: pass --set-keepcaps for FCM crush device class on mkfs (pr#68633, Guillaume Abrioux)
ceph-volume: retry lvs after empty result and "devices file is missing" stderr (pr#69206, Guillaume Abrioux)
ceph-volume: skip internal raid mirror LVs in inventory (pr#69703, Guillaume Abrioux)
cephadm/nvmeof: enable rbd_with_crc32c by default (pr#66957, Alexander Indenbaum)
cephadm: fix EndPoint to handle bracketed IPv6 addresses (pr#68573, Redouane Kachach)
Containerfile: Support pulp repo URLs (pr#69581, David Galloway)
doc/rados/configuration: recommend wpq for EC clusters seeing slow ops (pr#68943, Matthew N. Heler)
doc/rbd: clarify mirror resync snapshot behavior (pr#70080, Miki Patel)
Include s3tests in Ceph repo (pr#69775, Adam C. Emerson)
journal/ObjectPlayer: don't acquire locks in destructor (pr#70015, Kefu Chai)
librados/asio: clear cancellation slot in associated executor (pr#69050, Casey Bodley)
librbd/pwl: fix memory leaks in discard operations (pr#68955, Kefu Chai)
librbd: fix use-after-free releasing object map locks in deep copy (pr#70010, Kefu Chai)
mds/MDSMap: Enhance set_min_compat_client to validate iterator range before sorting feature bits (pr#65533, Edwin Rodriguez)
mds: fix crash and shutdown hang when ephemeral pins active and max_mds is 0 (pr#69486, chungfengz)
mds: for an irreparable hard link scrub is not able to identify the damage (pr#68853, Md Mahamudur Rahaman Sajib)
mds: prevent CDir omap commit with empty updates/removals/header (issue#76455, pr#69502, Venky Shankar)
mds: session reclaim could miss blocklisting an old session (pr#69504, Venky Shankar)
messages: MOSDOpReply encode and decode errorcode32_t with PGID64 fea… (pr#66269, Nitzan Mordechai)
mgr/cephadm: Add degraded namespace flag to NVMEoF spec file (pr#69679, Gil Bregman)
mgr/cephadm: Add IO statistics enable field to the cephadm NVMEoF spec file (pr#70312, Gil Bregman)
mgr/cephadm: renames ceph_device to ceph_device_lvm (pr#68751, Robert Sander)
mgr/DaemonServer: Aggregate and globally sort OSDs for ok-to-upgrade (pr#69542, Sridhar Seshasayee)
mgr/DaemonServer: auto-tune stats period when message queue gets backed up (pr#69015, Nitzan Mordechai)
mgr/DaemonServer: clarify ok-to-upgrade error message for CRUSH buckets (pr#69369, Sridhar Seshasayee)
mgr/DaemonServer: Make an ok-to-upgrade error message more generic (pr#70392, Sridhar Seshasayee)
mgr/dashboard: Add hardware monitoring dashboard using node proxy metrics (pr#69925, Afreen Misbah)
mgr/dashboard: "Access Denied" being shown on overview page for read-only user (pr#68786, Devika Babrekar)
mgr/dashboard: Add "connection get_io_statistics" to NVMeoF CLI (pr#67844, Gil Bregman)
mgr/dashboard: Add EC pools support to NVMEoF CLI (pr#69142, Gil Bregman)
mgr/dashboard: Add Hosts via CSV Upload (pr#69213, Sagar Gopale)
mgr/dashboard: Align RGW role management with Carbon and scope to accounts (pr#69589, Sagar Gopale)
mgr/dashboard: Backport cephadm e2e test fixes (pr#69848, Afreen Misbah, Nizamudeen A)
mgr/dashboard: Carbonize cluster-wide OSD flags modal (pr#69022, Sagar Gopale)
mgr/dashboard: Combining Quorum tables data on Monitors page (pr#69534, Devika Babrekar)
mgr/dashboard: fix bind address regression from CherryPy isolation (pr#69715, Afreen Misbah)
mgr/dashboard: fix errors after PR merge https://github.com/ceph/ceph/pull/68566 (pr#70184, Tomer Haskalovitch)
mgr/dashboard: Fix for EC profile creation modal scrollbar (pr#69661, Devika Babrekar)
mgr/dashboard: Fix username validation for special characters by URL-encoding user lookup requests (pr#69953, Aashish Sharma)
mgr/dashboard: fix zone creation in rgw service creation form (pr#69705, Aashish Sharma)
mgr/dashboard: introduce details card component (pr#67633, Naman Munet, Nizamudeen A)
mgr/dashboard: introduce NvmeofCLICommand's success_message_template and success_message_map parameters to allow meaningful success messages (pr#67964, Tomer Haskalovitch)
mgr/dashboard: introduce traddr for backward compatibility (pr#68566, Tomer Haskalovitch)
mgr/dashboard: NVMeoF backports (pr#70271, Vallari Agrawal, Tomer Haskalovitch)
mgr/dashboard: rbd-mirroring - hide create/import token buttons for (pr#69951, Aashish Sharma)
mgr/dashboard: skip the table when an nvmeof cli result has no columns (pr#69709, Kefu Chai)
mgr/nvmeof: change pool application to nvmeof-meta instead of rbd (pr#70444, Tomer Haskalovitch)
mgr/pg_autoscaler: Add 'osd pool get threshold' command which returns the current threshold value (pr#68692, Connor Fawcett)
mgr/smb: fix incorrect referenced variable (pr#69150, Xavi Hernandez)
mgr/snap_schedule: restrict retention period multipliers set (pr#67265, Milind Changire)
mgr: filter root logger fallback (pr#69927, Matthew N Heler)
mgr: handle SIGTERM/SIGINT in standby mgr to avoid CEPHADM_FAILED_DAEMON (pr#69780, Nitzan Mordechai)
mgr: Properly set description in labeled get_perf_schema_python (pr#69818, stzuraski898)
mgr: replace deprecated PyImport_ImportModuleNoBlock with PyImport_ImportModule (pr#69665, Kefu Chai)
mon/config: trim whitespace in config target (pr#69803, Nitzan Mordechai)
mon/HealthMonitor: avoid MON_DOWN for freshly added Monitor (pr#67323, Anoop C S, Patrick Donnelly)
mon/MonClient: check stopping for auth request handling (pr#68508, Patrick Donnelly)
mon/OSDMonitor: remove unused crush rules after erasure code pools deleted (pr#69075, Nitzan Mordechai)
mon: fix ConnectionTracker::notify_rank_removed (pr#69720, Kamoltat (Junior) Sirivadhna)
monitoring: Add subvolume dashboard (pr#67592, Ankush Behl, Aashish Sharma)
neorados/cls/log: fix infinite trim loop on empty data log shards (pr#69113, Oguzhan Ozmen)
node-proxy: atollon hardware monitoring (FCM stats, temperatures, fan speed..) (pr#69708, Guillaume Abrioux)
nvmeof: Change the NVMEOF image version to 1.7 (pr#69980, Gil Bregman)
nvmeofgw : do not process starting beacons from GWs in DELETING state (pr#69025, Leonid Chernin)
nvmeofgw: delay failback (pr#69236, Leonid Chernin)
nvmeofgw:fix forcing unavailable gw exit by sending (pr#69518, Leonid Chernin)
os/bluestore: Fix BlueFS WAL envelope mode rendering write buffer misalignment (pr#68426, Adam Kupczyk, Igor Fedotov)
osd/ECTransaction: fix truncate+write planning for EC shard sizes (pr#70249, Alex Ainscow)
osd/PeeringState: add perf counters for PG rebuild times (pr#69965, Sridhar Seshasayee)
osd/PrimaryLogPG: encode an empty data_bl for empty sparse reads (pr#67357, Ilya Dryomov)
osd/scheduler: Classify subOp reads according to op priority for mClock (pr#69773, Sridhar Seshasayee)
osd/scrub: 'repairing' scrubs allowed at all times (pr#69160, Ronen Friedman)
osd: Fix condition for rolling forward pg log entries (pr#69575, Matty Williams)
osd: prevent OSDMap::check_health() from asserting due to new OSDs found in subtree (pr#68865, Radoslaw Zarzynski)
osdc: deliver neorados completions to associated executor (pr#69742, Radoslaw Zarzynski, Shilpa Jagannath, Casey Bodley)
pybind/cephfs, mgr/volumes: introduce non-recursive rmtree(), refactor purge() to use it and add MDS optimizations (pr#65812, Rishabh Dave)
python-common: multi-line for yaml (pr#68579, Timothy Q Nguyen)
qa/cephfs: increase clones for test_for_6_ongoing_clones (pr#68645, Rishabh Dave)
qa/rgw/upgrade: remove rocky from reef upgrade (pr#69845, Casey Bodley)
qa/rgw: remove ragweed from verify subsuite (pr#69115, Casey Bodley)
qa/standalone: fix/improve bluefs tests (pr#67885, Igor Fedotov)
qa/suite/rados/encoder: update release N-2 for ceph-dencoder tests (pr#67176, Nitzan Mordechai, Kefu Chai)
qa/suites/nvmeof: set beacon grace and connect panic (pr#69338, Vallari Agrawal)
qa/suites/rados: temporarily disable ceph-post-file test (pr#68610, Laura Flores)
qa/suites/rbd/valgrind: pin to centos_9.stream instead of rpm_latest (pr#70131, Ilya Dryomov)
qa/suites/upgrade: ignore fs down variant (pr#70403, Patrick Donnelly)
qa/tasks/keystone: restart mariadb for rocky and alma linux too (pr#67542, Kyr Shatskyy)
qa/tasks/mgr: test_module_selftest set influx hostname to avoid warnings (pr#67801, Nitzan Mordechai)
qa/tasks/thrashosds-health: fine tune ignorelist for degraded and undersized pgs (pr#67338, Laura Flores)
qa/tests: Add client-upgrade-tentacle-umbrella test (pr#69888, Yuri Weinstein)
qa: fix nvmeof upgrade from v20.2.0 (pr#69729, Vallari Agrawal)
qa: ignore evicted client warnings for singletone bluestore (pr#69377, Nitzan Mordechai)
qa: ignore expected MON_DOWN (pr#68515, Patrick Donnelly)
qa: pykmip task defaults to ceph fork (pr#70091, Casey Bodley)
rbd-mirror: prune obsolete primary mirror snapshots after relocation (pr#69762, Miki Patel, Prasanna Kumar Kalever)
Revive nvme module (pr#67933, Laura Flores, Redouane Kachach, Vallari Agrawal, Avan Thakkar, Tomer Haskalovitch)
rgw/beast: add ssl_ciphersuites option for tls 1.3 (pr#69178, Casey Bodley)
rgw/bucket-logging: handle SigV2 presigned URLs (pr#68968, Nithya Balachandran)
rgw/datalog: Remove use of 'detached' in
rgw\_log\_backingwatch (pr#69967, Adam C. Emerson)rgw/gc: mark rgw_gc_max_objs as startup-only (pr#68993, Matthew N. Heler)
rgw/http: use a dedicated mutex for reqs_change_state (pr#69935, Matthew N. Heler)
rgw/iam: fix NotEquals handling for multiple values (pr#67214, liubingrun)
rgw/iam: match value of Null condition (pr#68444, Casey Bodley)
rgw/kafka: add mTLS client certificate auth support for Kafka notifications (issue#67427, pr#69216, Jan Radon, Matthew N. Heler)
rgw/lc: Warn against changing rgw_lc_max_objs once lifecycle is in use (pr#69787, Matthew N. Heler)
rgw/lua: Add Lua functionality for blocking requests (pr#68599, mertsunacoglu)
rgw/notification: Prevent reserved_size leak by decrementing overhead on commit/abort (pr#67576, Krunal Chheda, kchheda3)
rgw/notify: fix reading the entries in a loop (pr#66491, Yuval Lifshitz, Nithya Balachandran, N Balachandran)
rgw/restore: take the hash mod HASH_PRIME when picking a shard (pr#69607, Matthew N. Heler)
rgw/rgw_lua_utils: fix memory leak in luaL_error() formatting (pr#70018, Kefu Chai)
rgw/s3: fix PutObject's canned_acl comparisons for BlockPublicAcls (pr#69480, Casey Bodley)
rgw/sns: ListTopics uses account root arn for policy evaluation (pr#69273, Casey Bodley)
rgw:
account rm --purge-datacan delete users/roles/groups/oidcs too (pr#68059, Casey Bodley)rgw: avoid doubled ARN in GetBucketReplication for pre-existing data (pr#69024, Lumir Sliva)
rgw: Fix crashes on realm reload (pr#70262, Lumir Sliva, Adam C. Emerson, Oguzhan Ozmen)
rgw: fix overflow of outstanding counter in SimpleThrottler (pr#67692, Xinying Song)
rgw: implement CopyObject for encrypted objects (pr#69277, Matthew Heler, Casey Bodley, Matthew N. Heler, Seena Fallah)
rgw: ListRoles returns "Access Denied" for a regular user with valid allow policy (pr#68028, Theofilos Mouratidis)
rgw: return an etag header for all successful complete-multipart (pr#70108, Matt Benjamin)
rgw: RGWSI_Notify drains the finisher before deleting RGWWatchers (pr#66522, Casey Bodley)
rgw: stop crashing when an admin tries to assume a nonexistent role (pr#69001, Matthew N. Heler)
rgw: use local error code in handle_individual_object() (pr#69740, Casey Bodley)
rgwlc: fix removal of delete markers (SAL) (pr#69543, Matt Benjamin)
test/ceph-helpers: Pass timeout and add timeout for commands in test_pg_scrub (pr#66888, Nitzan Mordechai)
test/kafka: support archived kafka versions (pr#70301, Yuval Lifshitz, Adam C. Emerson)
test/rgw/notification: fix rabbitmq dependency for rocky10 (pr#69291, Yuval Lifshitz)
test: rados singleton-bluestore missing mds for cephtool tests (pr#68689, Nitzan Mordechai)