RTI Connext .Net APIs  Version 5.2.0
 All Classes Namespaces Functions Variables Enumerations Properties Groups Pages
Flow Controllers

<<extension>> DDS::FlowController and associated elements More...

Classes

struct  DDS::FlowControllerTokenBucketProperty_t
 DDS::FlowController uses the popular token bucket approach for open loop network flow control. The flow control characteristics are determined by the token bucket properties. More...
 
class  DDS::FlowControllerProperty_t
 Determines the flow control characteristics of the DDS::FlowController. More...
 
class  DDS::FlowController
 <<interface>> A flow controller is the object responsible for shaping the network traffic by determining when attached asynchronous DDS::DataWriter instances are allowed to write data. More...
 

Enumerations

enum  DDS::FlowControllerSchedulingPolicy : UINT32
 Kinds of flow controller scheduling policy. More...
 

Properties

static System::String^  DDS::FlowController::DEFAULT_FLOW_CONTROLLER_NAME [get]
 [default] Special value of DDS::PublishModeQosPolicy::flow_controller_name that refers to the built-in default flow controller.
 
static System::String^  DDS::FlowController::FIXED_RATE_FLOW_CONTROLLER_NAME [get]
 Special value of DDS::PublishModeQosPolicy::flow_controller_name that refers to the built-in fixed-rate flow controller.
 
static System::String^  DDS::FlowController::ON_DEMAND_FLOW_CONTROLLER_NAME [get]
 Special value of DDS::PublishModeQosPolicy::flow_controller_name that refers to the built-in on-demand flow controller.
 

Detailed Description

<<extension>> DDS::FlowController and associated elements

DDS::FlowController provides the network traffic shaping capability to asynchronous DDS::DataWriter instances. For use cases and advantages of publishing asnychronously, please refer to DDS::PublishModeQosPolicy of DDS::DataWriterQos.

See Also
DDS::PublishModeQosPolicy
DDS::DataWriterQos::publish_mode
DDS::AsynchronousPublisherQosPolicy

Enumeration Type Documentation

Kinds of flow controller scheduling policy.

Samples written by an asynchronous DDS::DataWriter are not sent in the context of the DDS::TypedDataWriter::write call. Instead, the middleware puts the samples in a queue for future processing. The DDS::FlowController associated with each asynchronous DataWriter instance determines when the samples are actually sent.

Each DDS::FlowController maintains a separate FIFO queue for each unique destination (remote application). Samples written by asynchronous DDS::DataWriter instances associated with the flow controller, are placed in the queues that correspond to the intended destinations of the sample.

When tokens become available, a flow controller must decide which queue(s) to grant tokens first. This is determined by the flow controller's scheduling policy. Once a queue has been granted tokens, it is serviced by the asynchronous publishing thread. The queued up samples will be coalesced and sent to the corresponding destination. The number of samples sent depends on the data size and the number of tokens granted.

QoS:
DDS::FlowControllerProperty_t

Properties

System:: String^ DDS::FlowController::DEFAULT_FLOW_CONTROLLER_NAME
staticget

[default] Special value of DDS::PublishModeQosPolicy::flow_controller_name that refers to the built-in default flow controller.

RTI Connext provides several built-in DDS::FlowController for use with an asynchronous DDS::DataWriter. The user can choose to use the built-in flow controllers and optionally modify their properties or can create a custom flow controller.

By default, flow control is disabled. That is, the built-in ::DDS::DEFAULT_FLOW_CONTROLLER_NAME flow controller does not apply any flow control. Instead, it allows data to be sent asynchronously as soon as it is written by the DDS::DataWriter.

Essentially, this is equivalent to a user-created DDS::FlowController with the following DDS::FlowControllerProperty_t settings:

- DDS::FlowControllerProperty_t::scheduling_policy = ::DDS::FlowControllerSchedulingPolicy::EDF_FLOW_CONTROLLER_SCHED_POLICY

- DDS::FlowControllerProperty_t::token_bucket max_tokens = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket tokens_added_per_period = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket tokens_leaked_per_period = 0

- DDS::FlowControllerProperty_t::token_bucket period = 1 second

- DDS::FlowControllerProperty_t::token_bucket bytes_per_token = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

See Also
DDS::Publisher::create_datawriter
DDS::DomainParticipant::lookup_flowcontroller
DDS::FlowController::set_property
DDS::PublishModeQosPolicy
DDS::AsynchronousPublisherQosPolicy
System:: String^ DDS::FlowController::FIXED_RATE_FLOW_CONTROLLER_NAME
staticget

Special value of DDS::PublishModeQosPolicy::flow_controller_name that refers to the built-in fixed-rate flow controller.

RTI Connext provides several builtin DDS::FlowController for use with an asynchronous DDS::DataWriter. The user can choose to use the built-in flow controllers and optionally modify their properties or can create a custom flow controller.

The built-in ::DDS::FIXED_RATE_FLOW_CONTROLLER_NAME flow controller shapes the network traffic by allowing data to be sent only once every second. Any accumulated samples destined for the same destination are coalesced into as few network packets as possible.

Essentially, this is equivalent to a user-created DDS::FlowController with the following DDS::FlowControllerProperty_t settings:

- DDS::FlowControllerProperty_t::scheduling_policy = ::DDS::FlowControllerSchedulingPolicy::EDF_FLOW_CONTROLLER_SCHED_POLICY

- DDS::FlowControllerProperty_t::token_bucket max_tokens = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket tokens_added_per_period = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket tokens_leaked_per_period = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket period = 1 second

- DDS::FlowControllerProperty_t::token_bucket bytes_per_token = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

See Also
DDS::Publisher::create_datawriter
DDS::DomainParticipant::lookup_flowcontroller
DDS::FlowController::set_property
DDS::PublishModeQosPolicy
DDS::AsynchronousPublisherQosPolicy
System:: String^ DDS::FlowController::ON_DEMAND_FLOW_CONTROLLER_NAME
staticget

Special value of DDS::PublishModeQosPolicy::flow_controller_name that refers to the built-in on-demand flow controller.

RTI Connext provides several builtin DDS::FlowController for use with an asynchronous DDS::DataWriter. The user can choose to use the built-in flow controllers and optionally modify their properties or can create a custom flow controller.

The built-in ::DDS::ON_DEMAND_FLOW_CONTROLLER_NAME allows data to be sent only when the user calls DDS::FlowController::trigger_flow. With each trigger, all accumulated data since the previous trigger is sent (across all DDS::Publisher or DDS::DataWriter instances). In other words, the network traffic shape is fully controlled by the user. Any accumulated samples destined for the same destination are coalesced into as few network packets as possible.

This external trigger source is ideal for users who want to implement some form of closed-loop flow control or who want to only put data on the wire every so many samples (e.g. with the number of samples based on ::DDS::Transport_Property_t::gather_send_buffer_count_max).

Essentially, this is equivalent to a user-created DDS::FlowController with the following DDS::FlowControllerProperty_t settings:

- DDS::FlowControllerProperty_t::scheduling_policy = ::DDS::FlowControllerSchedulingPolicy::EDF_FLOW_CONTROLLER_SCHED_POLICY

- DDS::FlowControllerProperty_t::token_bucket max_tokens = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket tokens_added_per_period = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket tokens_leaked_per_period = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

- DDS::FlowControllerProperty_t::token_bucket period = DDS::Duration_t::DURATION_INFINITE

- DDS::FlowControllerProperty_t::token_bucket bytes_per_token = DDS::ResourceLimitsQosPolicy::LENGTH_UNLIMITED

See Also
DDS::Publisher::create_datawriter
DDS::DomainParticipant::lookup_flowcontroller
DDS::FlowController::trigger_flow
DDS::FlowController::set_property
DDS::PublishModeQosPolicy
DDS::AsynchronousPublisherQosPolicy

RTI Connext .Net APIs Version 5.2.0 Copyright © Sun Jun 21 2015 Real-Time Innovations, Inc