/* * Copyright 2022-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #include #include #include "replica/exceptions.hh" namespace replica { exception_variant try_encode_replica_exception(std::exception_ptr eptr) { try { std::rethrow_exception(std::move(eptr)); } catch (rate_limit_exception&) { return rate_limit_exception(); } catch (const stale_topology_exception& e) { return e; } catch (abort_requested_exception&) { return abort_requested_exception(); } catch (const critical_disk_utilization_exception& e) { return e; } catch (...) { return no_exception{}; } } std::exception_ptr exception_variant::into_exception_ptr() noexcept { return std::visit([] (Ex&& ex) { if constexpr (std::is_same_v) { return std::make_exception_ptr(std::runtime_error("unknown exception")); } else { return std::make_exception_ptr(std::move(ex)); } }, std::move(reason)); } }