neorados: Update exerciser/demo to use C++20 coroutines#48129
neorados: Update exerciser/demo to use C++20 coroutines#48129adamemerson wants to merge 6 commits intoceph:mainfrom
Conversation
c89bc3b to
7fe5019
Compare
|
jenkins test make check |
|
isn't the neorados code currently used with the RGW? |
it does support both as part of asio's Asynchronous Model, specifically through our handling of the CompletionToken template type |
7fe5019 to
c8321ec
Compare
|
This looks mostly reasonable, I think? I'm not as familiar with how much background failure RBD has. https://pulpito.ceph.com/aemerson-2022-09-20_03:59:09-rbd-wip-coro-test-distro-default-smithi/ |
|
do we have teuthology tests running |
No, not yet. |
c8321ec to
6f92249
Compare
6f92249 to
789f411
Compare
yikes, from those do these failures look familiar @idryomov? |
|
@adamemerson i've been watching other runs of the rbd suite like https://pulpito.ceph.com/dis-2022-10-05_10:59:41-rbd-wip-dis-testing-distro-default-smithi/ and haven't seen any of those cli_generic.sh failures. you might try a rebase and rerun to see if they persist? |
789f411 to
9c7e5ab
Compare
|
looks much better! for the one test_librbd.sh failure, it got stuck on TestLibRBD.ConcurentOperations and never finished. not sure what's going on there, but maybe that's related to https://tracker.ceph.com/issues/53440? cc @idryomov |
|
@idryomov a friendly ping to review the rbd suite results |
|
jenkins test api |
|
@adamemerson any status update? |
@idryomov Says he will include it in his next test run of RBD PRs. |
|
@adamemerson i know that you've been carrying these commits in your wip-coro-after-reef branch. now that reef has forked, i think we should start by getting just this PR reviewed/tested/merged. i don't want to ask other components to review everything in #49737. but merging this PR could unblock all of the rgw-specific in your feature branch. what do you think? |
|
i also see that the rbd suite is looking very green for reef, so that should make it easier to validate the results |
That sounds fine to me, I think. |
| namespace fmt { | ||
| template <> | ||
| struct formatter<neorados::Object> : ostream_formatter {}; | ||
|
|
||
| template <> | ||
| struct formatter<neorados::IOContext> : ostream_formatter {}; | ||
|
|
||
| template <> | ||
| struct formatter<neorados::Op> : ostream_formatter {}; | ||
| } // namespace fmt |
There was a problem hiding this comment.
this appears to be the cause of centos9 build failures in shaman:
src/neorados/RADOS.cc:38:
src/include/neorados/RADOS.hpp:1024:56: error: expected class-name before ‘{’ token
1024 | struct formatter<neorados::Object> : ostream_formatter {};
| ^
src/include/neorados/RADOS.hpp:1027:59: error: expected class-name before ‘{’ token
1027 | struct formatter<neorados::IOContext> : ostream_formatter {};
| ^
src/include/neorados/RADOS.hpp:1030:52: error: expected class-name before ‘{’ token
1030 | struct formatter<neorados::Op> : ostream_formatter {};
| ^
edit: same for the jammy build
|
passed the rgw suite in https://pulpito.ceph.com/cbodley-2023-03-11_01:08:10-rgw-wip-coro-test-distro-default-smithi/ the rbd suite in https://pulpito.ceph.com/cbodley-2023-03-11_01:12:31-rbd-wip-coro-test-distro-default-smithi/ showed a number of failures in cli_generic.sh, rbd_mirror_stress.sh and rbd_mirror_ha.sh |
Previously we had versions of all the calls that took an int64_t and optional key and namespace. This didn't really offer much benefit and doubled the maintenance burden for changing anything. As such just make the IOContext constructor non-explicit, and make all its mutators return the same IOContext so people can supply them builder-style if they want to. Also don't wrap things in 'optional' when the underlying library doesn't. The callers just end up having to wrap and unwrap with value-or repeatedly. Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
This form of completion handling is compatible with C++20 Completions and generally more flexible stuff. Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
The lock will continue to be held over the 'dispatch' with C++20 coroutines. Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
Apparently in some cases we were using references to objects on the caller stack that happen to no longer exist if the caller's stack goes away. C++20 Coroutines tickled this bug. Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
Use `min` rather than `max` when deciding how much we need to read in `read()`. Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
Just as a demonstration to see how well they work and how to put things together with them. Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
a3133df to
3bc8694
Compare
|
the 'ceph API tests' check fails to build with clang without the boost 1.81 changes: |
the --rerun was queued for so long that shaman had deleted its packages. i scheduled a new rbd suite on yesterday's builds |
@adamemerson do we need to pull in the boost 1.81 commits from #49737? |
|
https://pulpito.ceph.com/cbodley-2023-03-22_18:12:21-rbd-wip-coro-test-distro-default-smithi/ shows the same cli_generic.sh, rbd_mirror_stress.sh and rbd_mirror_ha.sh failures as the previous run; they might be caused by this pr, but i wouldn't know how to debug further |
|
This pull request has been automatically marked as stale because it has not had any activity for 60 days. It will be closed if no further activity occurs for another 30 days. |
Just to work the bugs out and give some demo code.
Contribution Guidelines
To sign and title your commits, please refer to Submitting Patches to Ceph.
If you are submitting a fix for a stable branch (e.g. "pacific"), please refer to Submitting Patches to Ceph - Backports for the proper workflow.
Checklist
Show available Jenkins commands
jenkins retest this pleasejenkins test classic perfjenkins test crimson perfjenkins test signedjenkins test make checkjenkins test make check arm64jenkins test submodulesjenkins test dashboardjenkins test dashboard cephadmjenkins test apijenkins test docsjenkins render docsjenkins test ceph-volume alljenkins test ceph-volume toxjenkins test windows