RTI Connext Modern C++ API  Version 5.3.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
dds::core::policy::Partition Class Reference

Set of strings that introduces a logical partition among the topics visible by a dds::pub::Publisher and a dds::sub::Subscriber. More...

#include <dds/core/policy/CorePolicy.hpp>

Public Member Functions

 TPartition ()
 Creates a policy with the default partition.
 
 TPartition (const std::string &partition)
 Creates a policy with a single partition with the specified name.
 
 TPartition (const dds::core::StringSeq &partitions)
 Creates a policy with the partitions specified in a vector.
 
TPartitionname (const dds::core::StringSeq &partitions)
 Sets the partition names specified in a vector.
 
const dds::core::StringSeq name () const
 Getter (see setter with the same name)
 

Detailed Description

Set of strings that introduces a logical partition among the topics visible by a dds::pub::Publisher and a dds::sub::Subscriber.

This QoS policy is used to set string identifiers that are used for matching DataReaders and DataWriters for the same Topic.

A dds::pub::DataWriter within a dds::pub::Publisher only communicates with a dds::sub::DataReader in a dds::sub::Subscriber if (in addition to matching the dds::topic::Topic and having compatible QoS) the dds::pub::Publisher and dds::sub::Subscriber have a common partition name string.

Entity:
dds::pub::Publisher, dds::sub::Subscriber
Properties:
RxO = NO
Changeable = YES

Usage

This policy allows the introduction of a logical partition concept inside the 'physical' partition induced by a domain.

Usually DataReaders and DataWriters are matched only by their topic (so that data are only sent by DataWriters to DataReaders for the same topic). The Partition QoS policy allows you to add one or more strings, "partitions", to a Publisher and/or Subscriber. If partitions are added, then a DataWriter and DataReader for the same topic are only considered matched if their Publishers and Subscribers have partitions in common (intersecting partitions).

Since the set of partitions for a publisher or subscriber can be dynamically changed, the Partition QoS policy is useful to control which DataWriters can send data to which DataReaders and vice versa – even if all of the DataWriters and DataReaders are for the same topic. This facility is useful for creating temporary separation groups among entities that would otherwise be connected to and exchange data each other.

Failure to match partitions is not considered an incompatible QoS and does not trigger any listeners or conditions. A change in this policy can potentially modify the "match" of existing DataReader and DataWriter entities. It may establish new "matches" that did not exist before, or break existing matches.

Partition strings are usually directly matched via string comparisons. However, partition strings can also contain wildcard symbols so that partitions can be matched via pattern matching. As long as the partitions or wildcard patterns of a Publisher intersect with the partitions or wildcard patterns of a Subscriber, their DataWriters and DataReaders of the same topic are able to match; otherwise they are not.

These partition name patterns are regular expressions as defined by the POSIX fnmatch API (1003.2-1992 section B.6). Either dds::pub::Publisher or dds::sub::Subscriber may include regular expressions in partition names, but no two names that both contain wildcards will ever be considered to match. This means that although regular expressions may be used both at publisher as well as subscriber side, RTI Connext will not try to match two regular expressions (between publishers and subscribers).

Each publisher and subscriber must belong to at least one logical partition. A regular expression is not considered to be a logical partition. If a publisher or subscriber has not specify a logical partition, it is assumed to be in the default partition. The default partition is defined to be an empty string (""). Put another way:

  • An empty sequence of strings in this QoS policy is considered equivalent to a sequence containing only a single string, the empty string.
  • A string sequence that contains only regular expressions and no literal strings, it is treated as if it had an additional element, the empty string.

Partitions are different from creating dds::core::Entity objects in different domains in several ways.

  • First, entities belonging to different domains are completely isolated from each other; there is no traffic, meta-traffic or any other way for an application or RTI Connext itself to see entities in a domain it does not belong to.
  • Second, a dds::core::Entity can only belong to one domain whereas a dds::core::Entity can be in multiple partitions.
  • Finally, as far as RTI Connext is concerned, each unique data instance is identified by the tuple (DomainID, dds::topic::Topic, key). Therefore two dds::core::Entity objects in different domains cannot refer to the same data instance. On the other hand, the same data instance can be made available (published) or requested (subscribed) on one or more partitions.

Member Function Documentation

dds::core::policy::Partition::TPartition ( )
inline

Creates a policy with the default partition.

dds::core::policy::Partition::TPartition ( const std::string &  partition)
inlineexplicit

Creates a policy with a single partition with the specified name.

dds::core::policy::Partition::TPartition ( const dds::core::StringSeq partitions)
inlineexplicit

Creates a policy with the partitions specified in a vector.

TPartition& dds::core::policy::Partition::name ( const dds::core::StringSeq partitions)
inline

Sets the partition names specified in a vector.

Several restrictions apply to the partition names in this sequence. A violation of one of the following rules will result in a dds::core::InconsistentPolicyError when setting a dds::pub::Publisher's or dds::sub::Subscriber's QoS.

  • A partition name string cannot contain the reserved comma character (',').

[default] Empty sequence (zero-length sequence). Since no logical partition is specified, RTI Connext will assume the entity to be in default partition (empty string partition "").

[range] List of partition name with above restrictions

const dds::core::StringSeq dds::core::policy::Partition::name ( ) const
inline

Getter (see setter with the same name)


RTI Connext Modern C++ API Version 5.3.0 Copyright © Sun Jun 25 2017 Real-Time Innovations, Inc