crimson/common: let errorator's handlers to conditionally forward errors
The use case is like the following one:
```diff
diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc
index
a96f1b8dd2b..
055add2e407 100644
--- a/src/crimson/osd/replicated_recovery_backend.cc
+++ b/src/crimson/osd/replicated_recovery_backend.cc
@@ -516,10 +516,14 @@ ReplicatedRecoveryBackend::read_object_for_push_op(
recovered_to = push_op->data_included.range_end();
}
return seastar::make_ready_future<uint64_t>(recovered_to);
- }, PGBackend::read_errorator::all_same_way([](auto e) {
+ }, PGBackend::read_errorator::all_same_way([](auto e, auto&& e_raw) -> PGBackend::read_errorator::future<uint64_t> {
logger().debug("build_push_op: read exception");
- return seastar::make_exception_future<uint64_t>(e);
- }));
+ if (42) {
+ return std::move(e_raw);
+ } else {
+ return seastar::make_exception_future<uint64_t>(e);
+ }
+ })).handle_error_interruptible(PGBackend::read_errorator::discard_all{});
}
RecoveryBackend::interruptible_future<>
```
Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>