/* * Copyright (C) 2022-present ScyllaDB */ /* * SPDX-License-Identifier: (LicenseRef-ScyllaDB-Source-Available-1.0 and Apache-2.0) */ #pragma once #include "exceptions.hh" #include #include "utils/exception_container.hh" #include "utils/result.hh" namespace exceptions { // Allows to pass a coordinator exception as a value. With coordinator_result, // it is possible to handle exceptions and inspect their type/value without // resorting to costly rethrows. On the other hand, using them is more // cumbersome than just using exceptions and exception futures. // // Not all exceptions are passed in this way, therefore the container // does not allow all types of coordinator exceptions. On the other hand, // an exception being listed here does not mean it is _always_ passed // in an exception_container - it can be thrown in a regular fashion // as well. // // It is advised to use this mechanism mainly for exceptions which can // happen frequently, e.g. signalling timeouts, overloads or rate limits. using coordinator_exception_container = utils::exception_container< mutation_write_timeout_exception, read_timeout_exception, read_failure_exception, rate_limit_exception, overloaded_exception, read_failure_exception_with_timeout >; template using coordinator_result = bo::result; }