CAF 0.17.6
|
Manages downstream communication for a stream_manager
.
More...
#include <downstream_manager.hpp>
Classes | |
struct | path_predicate |
Predicate object for paths. More... | |
struct | path_visitor |
Function object for iterating over all paths. More... | |
Public Types | |
enum | path_algorithm { all_of , any_of , none_of } |
Selects a check algorithms. | |
using | path_type = outbound_path |
Outbound path. | |
using | path_ptr = path_type * |
Pointer to an outbound path. | |
using | const_path_ptr = const path_type * |
Pointer to an immutable outbound path. | |
using | unique_path_ptr = std::unique_ptr< path_type > |
Unique pointer to an outbound path. | |
Public Member Functions | |
downstream_manager (stream_manager *parent) | |
scheduled_actor * | self () const noexcept |
stream_manager * | parent () const noexcept |
virtual bool | terminal () const noexcept |
Returns true if this manager belongs to a sink, i.e., terminates the stream and never has outbound paths. | |
template<class F > | |
void | for_each_path (F f) |
Applies f to each path. | |
std::vector< stream_slot > | path_slots () |
Returns all used slots. | |
std::vector< stream_slot > | open_path_slots () |
Returns all open slots, i.e., slots assigned to outbound paths with closing == false . | |
template<class Predicate > | |
bool | all_paths (Predicate predicate) const noexcept |
Checks whether predicate holds true for all paths. | |
template<class Predicate > | |
bool | any_path (Predicate predicate) const noexcept |
Checks whether predicate holds true for any path. | |
template<class Predicate > | |
bool | no_path (Predicate predicate) const noexcept |
Checks whether predicate holds true for no path. | |
virtual size_t | num_paths () const noexcept |
Returns the current number of paths. | |
path_ptr | add_path (stream_slot slot, strong_actor_ptr target) |
Adds a pending path to target to the manager. | |
virtual bool | remove_path (stream_slot slot, error reason, bool silent) noexcept |
Removes a path from the manager. | |
virtual path_ptr | path (stream_slot slot) noexcept |
Returns the path associated to slot or nullptr . | |
const_path_ptr | path (stream_slot slot) const noexcept |
Returns the path associated to slot or nullptr . | |
bool | clean () const noexcept |
Returns true if there is no data pending and all batches are acknowledged batch on all paths. | |
bool | clean (stream_slot slot) const noexcept |
Returns true if slot is unknown or if there is no data pending and all batches are acknowledged on slot . | |
virtual void | close () |
Removes all paths gracefully. | |
virtual void | close (stream_slot slot) |
Removes path slot gracefully by sending pending batches before removing it. | |
virtual void | abort (error reason) |
Removes all paths with an error message. | |
bool | empty () const noexcept |
Returns num_paths() == 0 . | |
size_t | min_credit () const |
Returns the minimum amount of credit on all output paths. | |
size_t | max_credit () const |
Returns the maximum amount of credit on all output paths. | |
size_t | total_credit () const |
Returns the total amount of credit on all output paths, i.e., the sum of all individual credits. | |
virtual void | emit_batches () |
Sends batches to sinks. | |
virtual void | force_emit_batches () |
Sends batches to sinks regardless of whether or not the batches reach the desired batch size. | |
virtual size_t | capacity () const noexcept |
Queries the currently available capacity for the output buffer. | |
virtual size_t | buffered () const noexcept |
Queries the size of the output buffer. | |
virtual size_t | buffered (stream_slot slot) const noexcept |
Queries an estimate of the size of the output buffer for slot . | |
virtual int32_t | max_capacity () const noexcept |
Computes the maximum available downstream capacity. | |
bool | stalled () const noexcept |
Queries whether the manager cannot make any progress, because its buffer is full and no more credit is available. | |
virtual void | clear_paths () |
Silently removes all paths. | |
Protected Member Functions | |
virtual bool | insert_path (unique_path_ptr ptr) |
Inserts ptr to the implementation-specific container. | |
virtual void | for_each_path_impl (path_visitor &f) |
Applies f to each path. | |
virtual bool | check_paths_impl (path_algorithm algo, path_predicate &pred) const noexcept |
Dispatches the predicate to std::all_of , std::any_of , or std::none_of . | |
virtual void | about_to_erase (path_ptr ptr, bool silent, error *reason) |
Emits a regular (reason == nullptr ) or irregular (reason != nullptr ) shutdown if silent == false . | |
template<class Predicate > | |
bool | check_paths (path_algorithm algorithm, Predicate predicate) const noexcept |
Delegates to check_paths_impl . | |
Protected Attributes | |
stream_manager * | parent_ |
Manages downstream communication for a stream_manager
.
The downstream manager owns the outbound_path
objects, has a buffer for storing pending output and is responsible for the dispatching policy (broadcasting, for example). The default implementation terminates the stream and never accepts any pahts.
Removes all paths with an error message.
Reimplemented in caf::fused_downstream_manager< T, Ts >.
|
protectedvirtual |
Emits a regular (reason == nullptr
) or irregular (reason != nullptr
) shutdown if silent == false
.
*reason
if reason == nullptr
path_ptr caf::downstream_manager::add_path | ( | stream_slot | slot, |
strong_actor_ptr | target | ||
) |
Adds a pending path to target
to the manager.
nullptr
otherwise. Queries the size of the output buffer.
Reimplemented in caf::buffered_downstream_manager< T >, and caf::fused_downstream_manager< T, Ts >.
Queries the currently available capacity for the output buffer.
Reimplemented in caf::buffered_downstream_manager< T >, and caf::fused_downstream_manager< T, Ts >.
|
protectedvirtualnoexcept |
Dispatches the predicate to std::all_of
, std::any_of
, or std::none_of
.
Reimplemented in caf::downstream_manager_base, and caf::fused_downstream_manager< T, Ts >.
|
noexcept |
Returns true
if slot
is unknown or if there is no data pending and all batches are acknowledged on slot
.
The default implementation returns false
for all paths, even if clean()
return true
.
Silently removes all paths.
Reimplemented in caf::downstream_manager_base, and caf::fused_downstream_manager< T, Ts >.
Removes all paths gracefully.
Reimplemented in caf::fused_downstream_manager< T, Ts >, and caf::fused_downstream_manager< T, Ts >.
|
virtual |
Removes path slot
gracefully by sending pending batches before removing it.
Effectively calls path(slot)->closing = true
.
Reimplemented in caf::fused_downstream_manager< T, Ts >.
Sends batches to sinks.
Reimplemented in caf::fused_downstream_manager< T, Ts >.
|
protectedvirtual |
Applies f
to each path.
Reimplemented in caf::downstream_manager_base, and caf::fused_downstream_manager< T, Ts >.
Sends batches to sinks regardless of whether or not the batches reach the desired batch size.
Reimplemented in caf::fused_downstream_manager< T, Ts >.
|
protectedvirtual |
Inserts ptr
to the implementation-specific container.
Reimplemented in caf::downstream_manager_base, and caf::fused_downstream_manager< T, Ts >.
Returns the current number of paths.
Reimplemented in caf::downstream_manager_base, and caf::fused_downstream_manager< T, Ts >.
|
virtualnoexcept |
Returns the path associated to slot
or nullptr
.
Reimplemented in caf::fused_downstream_manager< T, Ts >, and caf::downstream_manager_base.
|
virtualnoexcept |
Removes a path from the manager.
Reimplemented in caf::fused_downstream_manager< T, Ts >, and caf::downstream_manager_base.
Returns true
if this manager belongs to a sink, i.e., terminates the stream and never has outbound paths.
Reimplemented in caf::buffered_downstream_manager< T >, and caf::fused_downstream_manager< T, Ts >.