To determine which multicast addresses will be used to send the data, the middleware evaluates a set of filters that are configured for the DDS::DataWriter. Each filter "guards" a channel (a set of multicast addresses). Each time a multi-channel DDS::DataWriter 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
Multi-channel evaluation
The DDS::MultiChannelQosPolicy is propagated along with discovery traffic. The value of this policy is available in DDS::PublicationBuiltinTopicData::locator_filter.
For more information on Multi-channel DataWriters, refer to the User's Manual.
If any of the guard filters are based on non-key fields, RTI Data Distribution Service only guarantees reception of the most recent data from the MultiChannel DataWriter.
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.