To determine which multicast addresses will be used to send the data, the middleware evaluates a set of filters that are configured for the DDSDataWriter. Each filter "guards" a channel (a set of multicast addresses). Each time a multi-channel DDSDataWriter writes data, the filters are applied. If a filter evaluates to true, the data is sent over that filter's associated channel (set of multicast addresses). We refer to this type of filter as a Channel Guard filter.
Multi-channel data flow
For more information on Multi-channel DataWriters, refer to the User's Manual.DDS_PresentationQosPolicy::access_scope is set to DDS_INSTANCE_PRESENTATION_QOS and the filters in DDS_MultiChannelQosPolicy are keyed-only based.
If any of the guard filters are based on non-key fields, RTI Connext only guarantees reception of the most recent data from the MultiChannel DataWriter.DDS_ResourceLimitsQosPolicy::max_samples and/or DDS_DataWriterResourceLimitsQosPolicy::max_batches.
The protocol parameters described in DDS_DataWriterProtocolQosPolicy are applied per channel, with the following exceptions:
DDS_RtpsReliableWriterProtocol_t::low_watermark and DDS_RtpsReliableWriterProtocol_t::high_watermark: The low watermark and high watermark control the queue levels (in number of samples) that determine when to switch between regular and fast heartbeat rates. With MultiChannel DataWriters, high_watermark and low_watermark refer to the DataWriter's queue (not the reliability channel queue). Therefore, periodic heartbeating cannot be controlled on a per-channel basis.
Important: With MultiChannel DataWriters, low_watermark and high_watermark refer to application samples even if batching is enabled. This behavior differs from the one without MultiChannel DataWriters (where low_watermark and high_watermark refer to batches).
DDS_RtpsReliableWriterProtocol_t::heartbeats_per_max_samples: This field defines the number of heartbeats per send queue. For MultiChannel DataWriters, the value is applied per channel. However, the send queue size that is used to calculate the a piggyback heartbeat rate is defined per DataWriter (see DDS_ResourceLimitsQosPolicy::max_samples)
Important: With MultiChannel DataWriters, heartbeats_per_max_samples refers to samples even if batching is enabled. This behavior differs from the one without MultiChannels DataWriters (where heartbeats_per_max_samples refers to batches).
With batching and MultiChannel DataWriters, the size of the DataWriter's send queue should be configured using DDS_ResourceLimitsQosPolicy::max_samples instead of max_batches DDS_DataWriterResourceLimitsQosPolicy::max_batches in order to take advantage of heartbeats_per_max_samples.