Patrick Donnelly [Thu, 14 May 2026 17:26:33 +0000 (13:26 -0400)]
.github/workflows/releng-audit: consolidate into single job
In order to make this a required check someday, we can't have the main
job ever be skipped. So, consolidate into a single job and skip actions
based on the router logic.
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
Venky Shankar [Thu, 14 May 2026 09:27:21 +0000 (14:57 +0530)]
Merge PR #64774 into main
* refs/pull/64774/head:
test_cephfs.py: delete purge_dir() helper method, use rmtree() instead
test_cephfs.py: remove rendundant call to purge_dir()
test_cephfs.py: test rmtree on root
pybind/cephfs: don't attempt to unlink root in rmtree
test_cephfs.py: test rmtree with and without should_cancel
pybind/cephfs: make should_cancel option parameter for rmtree()
mgr/volumes: clone using cptree() from cephfs python bindings
test_cephfs: add unit tests for cptree() in cephfs python bindings
test/pybind/assertions: add helper method assert_less
pybind/cephfs: use depth-first, non-recursive approach for cloning
test_cephfs: call object setup/teardown for all tests in TestWithRootUser
test_cephfs.py: add tests for utimensat()
pybind/cephfs: add python bindings for utimensat()
qa/cephfs: add tests for chownat()
pybind/cephfs: add python bindings for chownat()
test_cephfs.py: add tests for chmodat()
pybind/cephfs: add python bindings for chmodat()
test_cephfs.py: add tests for symlinkat()
pybind/cephfs: add python binding for symlinkat()
test_cephfs.py: add test for readlinkat()
pybind/cephfs: add python binding for readlinkat()
pybind/cephfs: add tests for statxat()
pybind/cephfs: add python bindings for statxat()
test_cephfs.py: add tests for mkdirat()
pybind/cephfs: add python binding for mkdirat()
Reviewed-by: Venky Shankar <vshankar@redhat.com> Reviewed-by: Jos Collin <jcollin@redhat.com>
Patrick Donnelly [Wed, 13 May 2026 19:48:41 +0000 (15:48 -0400)]
Merge PR #68781 into main
* refs/pull/68781/head:
doc/governance: remove Sam from CSC
Reviewed-by: Joseph Mundackal <jmundackal@bloomberg.net> Reviewed-by: Josh Durgin <jdurgin@redhat.com> Reviewed-by: Anthony D Atri <anthony.datri@gmail.com>
Kefu Chai [Wed, 13 May 2026 04:32:33 +0000 (12:32 +0800)]
crimson/osd: drop redundant trailing co_return in pg_advance_map
check_for_splits() and split_pg() both ended with a bare co_return
that the compiler inserts implicitly for a coroutine returning
seastar::future<>. Remove the redundant statements.
Venky Shankar [Tue, 12 May 2026 15:26:29 +0000 (20:56 +0530)]
Merge PR #68128 into main
* refs/pull/68128/head:
qa: Fix checksum calculation on empty directories
qa: Add mirror test for snapshot with only dir
tools/cephfs_mirror: Fix sync hang
Olivier Chaze [Tue, 12 May 2026 14:32:10 +0000 (16:32 +0200)]
doc/rgw: warn about rgw_usage_max_shards consistency
Add documentation warnings explaining that all RGW daemons and
radosgw-admin commands must use the same rgw_usage_max_shards value.
Mismatched shard counts cause writes and reads/trim to target different
objects, resulting in seemingly empty usage logs or failed cleanup.
Also document the --rgw-usage-max-shards command-line parameter for
radosgw-admin as an alternative to global config.
Kefu Chai [Tue, 12 May 2026 09:17:56 +0000 (17:17 +0800)]
debian: drop explicit libprotobuf dependency from ceph-osd-crimson
The ceph-osd-crimson package already lists ${shlibs:Depends} in its
Depends field, which generates the correct libprotobuf dependency for
the target distribution at build time (e.g. libprotobuf32t64 on
Trixie/Noble). The hardcoded libprotobuf23 entry is redundant and
breaks installations on distributions where protobuf ships under a
different package name.
Afreen Misbah [Tue, 5 May 2026 21:05:11 +0000 (02:35 +0530)]
mgr/dashboard: Updates to empty state component
- added state for no storage in empty state component
- extended the icon component to take into account the scenario of button with icon
- fix unit tests
Shweta Bhosale [Mon, 11 May 2026 10:02:14 +0000 (15:32 +0530)]
mgr/nfs: reuse CephfsClient for path checks and earmark resolver
cephfs_path_is_dir defined an inner function decorated with lru_cache, so
each call got a new function object and an empty cache, CephfsClient(mgr)
ran every time. Moved caching to module-level cephfs_client_for_mgr(mgr)
and call it from cephfs_path_is_dir.
Passed that shared client into CephFSEarmarkResolver from the NFS module so
export create/apply does not construct a separate CephfsClient for
earmarks.
Kefu Chai [Mon, 11 May 2026 05:46:25 +0000 (13:46 +0800)]
crimson: consolidate the return paths of get_segment_manager()
before this change, two branches both return `BlockSegmentManager`,
which is redundant. in this change, consolidate them so that the
`HAVE_ZNS` path becomes an early return. this improves readability.
Kefu Chai [Mon, 11 May 2026 05:27:42 +0000 (13:27 +0800)]
crimson: abort on ioctl(BLKGETNRZONES) failure
previously, we did not check the return value of ioctl(BLKGETNRZONES).
we query the number of zones of the storage device to determine which
seastore backend to use. the only possible error from this ioctl is
-EFAULT (invalid user pointer), which indicates a programming error
and should never happen in practice. use ceph_assert() to catch this.
Kefu Chai [Mon, 11 May 2026 05:07:25 +0000 (13:07 +0800)]
crimson: use uint32_t when calling ioctl(BLKGETNRZONES)
before this change, we pass a pointer to a `size_t` to
ioctl(BLKGETNRZONES), but in the Linux kernel,
include/uapi/linux/blkzoned.h:
```c
#define BLKGETNRZONES _IOR(0x12, 133, __u32)
```
this API reads 32 bits of data into the pointer. on 64-bit
architectures, size_t is 64 bits. fortunately, we initialize
nr_zones with 0, so the upper 32 bits remain zero. this works
on little-endian systems, but not on big-endian systems. it is
also semantically wrong. we should pass a pointer to a 32-bit
value when calling ioctl(BLKGETNRZONES).
in this change, we change the type of nr_zones from size_t to
uint32_t to match what the Linux kernel expects.
```
[1/3] Building CXX object src/crimson/os/seastore/CMakeFiles/crimson-seastore.dir/segment_manager.cc.o
/home/kefu/dev/ceph/src/crimson/os/seastore/segment_manager.cc:45:15: warning: lambda capture 'FNAME' is not used [-Wunused-lambda-capture]
45 | ).then([FNAME,
| ^
```
but we went further by coroutinize the whole method. because the return
value of ioctl() is not checked before this change, and clang correctly
flagged this with a warning, we marker it with `[[maybe_unused]]`, we
will fix it in a separate change.
Ronen Friedman [Sun, 3 May 2026 07:10:34 +0000 (07:10 +0000)]
crimson/osd: add crimson_memory config option
Add a crimson_memory configuration option that maps to seastar's
--memory flag, allowing control over the per-OSD seastar memory
allocation. Default is 0, meaning seastar uses its default behavior.
This reduces core dump sizes in test environments (from ~117GB to
~32GB with crimson_memory=32G) by limiting the pre-allocated seastar
memory pool.
doc: document the releng-audit workflow and update release examples
Updates SubmittingPatches-backports.rst and development-workflow.rst to
capture the new automated backport auditing system.
Changes include:
- Documenting the CI checks for commit parity, conflict simulation, and
Redmine linkage.
- Explaining how PR authors can trigger a retest (`/audit retest`) and
how leads can bypass the audit (`/audit override`).
- Replacing outdated `master` branch references with `main`.
- Updating the release cycle timeline to reflect current releases
(Quincy, Reef, Squid, Tentacle).
- Removing obsolete instructions for manual PR labeling.
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
script/ptl-tool, actions: introduce event-driven CI backport auditing
This commit entirely restructures the `ptl-tool.py` script and introduces a new GitHub Actions workflow to enable event-driven, asynchronous execution of backport audits.
New GitHub Actions Workflow (`releng-audit.yaml`):
* Implements a state-machine workflow using the `pull_request_target` event for secure execution.
* Introduces an "anti-spam" push shield that halts automated checks and blocks merging if the PR already has a `releng-audit-fail` label.
* Allows developers to easily re-trigger audits by removing the failure label or commenting `/audit retest`.
* Provides an `/audit override` mechanism exclusively for the `ceph-release-manager` team to bypass checks on valid conflict resolutions.
Key Architectural Changes to `ptl-tool.py`:
* Strategy Pattern Refactor: Decoupled the monolithic `verify_pr_readiness` block into modular, extensible classes (`MergeConflictCheck`, `CommitParityCheck`, `ConflictSimulationCheck`, `RedmineLinkageCheck`) conforming to `BaseAuditCheck`.
* AuditContext & Shared State: Replaced the cumbersome 9-argument function signatures with a unified `AuditContext` dataclass.
* Consolidated Error Reporting: Introduced `AuditReport` to collect failures across all checks. In `--ci-mode`, it bundles these failures into a single, consolidated GitHub `REQUEST_CHANGES` review to prevent shadowing and PR comment spam.
* Automated Label Management: Added `--audit-label` parsing to dynamically swap queue/pass/fail labels via the GitHub API during CI runs.
Miscellaneous workflow enhancements:
* Added `--integration` switch for the "Daily Driver" workflow. It auto-detects the target base branch, sets standard release flags, skips conflict simulation, and enforces `--always-fetch`.
* Updated QA Tracker creation/update logic to set Redmine Custom Field IDs directly rather than relying solely on description text.
* Replaced `--release-merge` with `--final-merge` for clarity.
* Introduced `--dry-run` to safely preview GitHub API calls, Redmine updates, and Git operations without altering remote state.
* Added `--examples` flag detailing advanced CLI usage.
* Implemented a local HTML tab-launcher to bypass Firefox race conditions when opening multiple browser tabs via the command line.
Assisted-by: Gemini Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
Patrick Donnelly [Thu, 30 Apr 2026 18:36:30 +0000 (11:36 -0700)]
script/ptl-tool: introduce interactive backport parity and conflict verification
This patch significantly expands `ptl-tool.py` to automate and improve the
backport review process. It adds robust interactive checks to verify that all
commits from an original PR are correctly represented in a backport PR.
Key additions:
* Commit Parity Verification: Analyzes the local Git DAG to ensure all
cherry-picked commits map properly to the original main PRs, generating a
visual map of the commits.
* Conflict Simulation: Creates temporary, detached worktrees to dry-run the
cherry-pick sequence, verifying conflict resolutions dynamically.
* Automated GitHub Reviews: Enables maintainers to open an editor, preview
markdown drafts, and post `REQUEST_CHANGES` reviews detailing missing commits
or backport deviations directly to the pull request.
* Interactive Diffing: Provides file-specific 3-pane patch comparisons
(range-diffs, original patch, backport patch) within the terminal editor during
conflict investigations.
* New CLI Flags: Introduces `--audit`, `--always-fetch`,
`--skip-conflict-check`, and `--release-merge` for greater control over the
script's behavior.
Assisted-by: Gemini Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
Patrick Donnelly [Thu, 30 Apr 2026 18:35:25 +0000 (11:35 -0700)]
script/ptl-tool: use Authorization header
Replaces basic authentication with the Authorization: Bearer <token>
header, obviating the need for the PTL_TOOL_GITHUB_USER environment
variable and adhering to modern GitHub API authentication standards.
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>