Rishabh Dave [Wed, 2 Apr 2025 15:31:31 +0000 (21:01 +0530)]
mgr/vol: handle case where path goes missing for a clone
A thread is spawned to get the value of a certain extended attribute to
generate the progress statistics for the ongoing clone operations. In
case source and/or destination path for a clone operation goes missing,
this thread crashes. Instead of crashing, handle this case gracefully.
Fixes: https://tracker.ceph.com/issues/71019 Signed-off-by: Rishabh Dave <ridave@redhat.com>
Rishabh Dave [Wed, 2 Apr 2025 15:28:25 +0000 (20:58 +0530)]
mgr/vol: for "clone status" handle case where path goes missing
If source and/or destination path of the cloning operation goes missing
during it's ongoing or just before it becomes ongoing, "ceph fs clone
status" command can fail. Account for and handle such cases gracefully.
Fixes: https://tracker.ceph.com/issues/71019 Signed-off-by: Rishabh Dave <ridave@redhat.com>
cmake: Fix b2 build with postfixed compiler versions
Previously, the build process used `bootstrap.sh` to build the b2 tool,
which automatically selected the compiler based on the specified toolset.
This failed when the compiler executable had a version postfix (e.g.,
/usr/bin/clang++-19) without a symlink at the expected name, producing
errors like:
```
A C++11 capable compiler is required for building the B2 engine.
Toolset 'clang' does not appear to support C++11.
> clang++ -x c++ -std=c++11 -pthread check_clib.cpp check_cxx11.cpp
./tools/build/src/engine/build.sh: 120: clang++: not found
> clang++ -x c++ -std=c++11 check_clib.cpp check_cxx11.cpp
./tools/build/src/engine/build.sh: 120: clang++: not found
** Note, the C++11 capable compiler is _only_ required for building the B2
** engine. The B2 build system allows for using any C++ level and any other
** supported language and resource in your projects.
You can specify the toolset as the argument, i.e.:
./build.sh [options] gcc
```
The issue occurred because `bootstrap.sh` hardcodes the compiler name
based on the toolset (e.g., `clang++` for Clang) without supporting
postfixed versions.
This commit replaces the `bootstrap.sh` approach with an explicit build
command using Boost's `build.sh` script. We now:
1. Directly specify the full compiler path from CMake variables
2. Manually configure the build with `--cxx=...` and `--toolset=...`
3. Avoid reliance on symlinks or `bootstrap.sh`'s internal detection
This ensures the B2 engine is always built with the user-specified
compiler, even when installed with version postfixes.
Samuel Just [Tue, 15 Apr 2025 22:50:57 +0000 (15:50 -0700)]
crimson: use make_interruptible, coroutine, and RAII releaser for recover_object_with_throttle
791772f1c used with_throttle here in a way which caused
then_interruptible in PGRecovery::recover_object to be called outside of
an interruptible context.
Instead of using a wrapper taking a lambda, rephrase as an RAII releaser
suitable for use in a coroutine. This avoids needing to structure
with_throttle to deal correctly with both interruptible and
non-interruptible contexts.
Fixes: https://tracker.ceph.com/issues/70939 Signed-off-by: Samuel Just <sjust@redhat.com>
pybind: switch from pkgutil.find_loader() to importlib.util.find_spec()
Replace pkgutil.find_loader() with importlib.util.find_spec() throughout
Python bindings. This addresses the deprecation warning in Python 3.10
(scheduled for removal in 3.14) that appeared when generating librbd
Python bindings.
The importlib.util.find_spec() API has been available since Python 3.4
and is compatible with our minimum required Python version (3.9, since
commit 51f71fc1).
The warning resolved:
```
/home/kefu/dev/ceph/src/pybind/rbd/setup.py:8: DeprecationWarning: 'pkgutil.find_loader' is deprecated and slated for removal in Python 3.14; use importlib.util.find_spec() instead
if not pkgutil.find_loader('setuptools'):
```
J. Eric Ivancich [Wed, 16 Apr 2025 16:38:33 +0000 (12:38 -0400)]
rgw: prevent crash in `radosgw-admin bucket object shard ...`
This subcommand is used to ask radosgw-admin which bucket index shard
a given object in a given bucket would have its bucket index entry
on. The user is required to supply the number of shards (i.e., the
command doesn't look that up). If 0 is provided it would result in a
divide by zero runtime exception. Values less than or equal to zero
are now protected.
Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
Ville Ojamo [Fri, 18 Apr 2025 07:43:27 +0000 (14:43 +0700)]
doc/radosgw: Improve and more consistent formatting
Use inline code formatting consistently for command
line switches, data, hostnames, etc.
Correctly indent text and child lists in list items.
Remove a mid-sentence double spaces.
Capitalize "RGW" and "API" in text.
Remove unordered lists that are just regular text
everywhere else.
Use correct prompt # instead of $ for privileged
commands.
Use line continuation for multi-line example commands
instead of render them incorrectly as separate
single-line commands.
Use Title Case in few section header text that
missed it.
multisite.rst: Don't repeat "(RGW)" after "RADOS
Gateway" beyond the first instance in the same
paragraph.
multisite.rst: Change one "multisite" to "multi-site"
because all other instances use this spelling (EXCEPT
the title of the document??).
multisite.rst: Fix indentation of continuation lines in
prompted example commands.
Use pre-formatted block, as seen elsewhere in docs,
instead of strange unordered list plus inline code for
syntax example.
Add space before backslash for multi-line command
continuation.
Signed-off-by: Ville Ojamo <14869000+bluikko@users.noreply.github.com>
Max Kellermann [Tue, 29 Oct 2024 21:52:10 +0000 (22:52 +0100)]
mds/{LocalLockC,SimpleLock}: un-inline methods using `MutationRef`
Commit e8bc28407117 added a forward declaration for `MutationRef` but
that doesn't work as long as the header constructs and destructs
instances, causing errors such as:
build/debug/boost/include/boost/smart_ptr/intrusive_ptr.hpp: In instantiation of ‘boost::intrusive_ptr<T>::~intrusive_ptr() [with T = MutationImpl]’:
src/mds/SimpleLock.h:424:5: required from here
424 | ceph_assert(!get_xlock_by());
| ~~~~~~~~~~~~^~
build/debug/boost/include/boost/smart_ptr/intrusive_ptr.hpp:100:44: error: ‘intrusive_ptr_release’ was not declared in this scope; did you mean ‘ceph::common::intrusive_ptr_release’?
100 | if( px != 0 ) intrusive_ptr_release( px );
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~
| ceph::common::intrusive_ptr_release
This never occurred previously because `Mutation.h` happened to be
already included by somebody else.
Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
Issue: Pool field was blank on editing namespace form and user needs to type out pool
Reason: `image` field is no longer supported in form yet edit function trying to fetch it and failing on that, hence no following updates for pool
Fix: Removed stale `image` field
Additional changes:
- included unit tests for edit to capture such errors
- enhanced unit tests to sue ActivatedRouteStub and `router.url`
- pre populating pool form on create with first rbd pool in the list
Max Kellermann [Thu, 17 Apr 2025 15:04:26 +0000 (17:04 +0200)]
mds/Mutation: un-inline print() to resolve circular dependency
Mutation.h and SimpleLock.h have a circular dependency and we have to
resolve it using forward-declarations. To make that possible, move
print() to Mutation.cc.
Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
Fix stray example command block leftover from rebase in
cloud-transition.rst.
Remove extra character > in cloud-sync-module.rst.
Add missing formatting char ` in cloud-sync-module.rst.
Remove extra empty line between example commands that
resulted in a line with just a "#" prompt.
Signed-off-by: Ville Ojamo <14869000+bluikko@users.noreply.github.com>