Samuel Just [Sat, 5 Apr 2025 01:57:33 +0000 (18:57 -0700)]
crimson: fix DynamicPerfStats usage in ClientRequest
ClientRequest::get_connection() return l_conn, which will be
null by the time PG::add_client_request_lat is called in
ClientRequest::do_process. Modify get_connection() to
return a Connection& from whichever of l_conn or r_conn
isn't null.
Samuel Just [Thu, 3 Apr 2025 03:42:11 +0000 (03:42 +0000)]
crimson: remove CommonClientRequest, move do_recover_missing to PG
do_recover_missing was the only thing left, and inheriting from a class
to get a static method is somewhat confusing. Simply move
do_recover_missing to PG.
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>