ZettaScale Knowledge Base ZettaScale Knowledge Base

  • Home
  • DDS Products
    • DDS Overview and Concepts
    • OpenSplice DDS
      • OpenSplice DDS
        • OpenSplice FAQ
        • Why OpenSplice DDS?
        • Installation
          • OpenSplice Licensing FAQ
        • Best Practice and Possible Errors
        • API and IDL
        • Configuration
        • Networking
          • DDSI
          • RT Networking
        • Durability Service
        • DDS Security
        • Logging
        • Databases and DBMS
        • Release Notes
      • OpenSplice Tools
        • Overview
        • OpenSplice Launcher
        • OpenSplice Tuner
        • OpenSplice Tester
        • Record and Replay Manager
        • MMStat
    • Cyclone DDS
  • Zenoh
  • Contact Support
Home / DDS, OpenSplice DDS, DDS Overview and Concepts / Data Distribution Service (DDS) Built-in topics

Data Distribution Service (DDS) Built-in topics

DDS built-in topics are a special kind of topic that the Data Distribution Service uses to help applications discover each other. The middleware handles these topics automatically. An application can also access them to get information about the Domain. Read on to find out how to do this.
 
DDS middleware needs to keep track of a large amount of data during its operation. DDS applications and their entities can appear and disappear from the DDS Domain. These entities can be DomainPartiticpants, DataWriters , DataReaders and Topics. The DDS middleware needs to be able to track this.
 
Applications using DDS may want to know about these changes. This allows them to take appropriate action.
The DDS specification defines some topics that are built-in to the DDS implementation. DDS uses these built-in topics to help applications discover each other. Subscribing to the built-in topics gives applications access to information about the domain. This information includes:
  • topics registered in the domain
  • which data readers and writers connect and disconnect
  • the QoS settings of the entities in the domain
 
The build-in topics do not communicate all the QoS policy settings, only the ones that determine connectivity (e.g have RxO capabilities). OpenSplice also provides CM topics that communicate the remaining QoS Policies.

Table Of Contents
    • What are built-in topics?
      • Internal Built-in Topics
    • What information is contained in the built-in topics?
      • DCPSParticipant
        • ParticipantBuiltinTopicData Members table
      • DCPSTopic
        • TopicBuiltinTopicData members table
      • DCPSPublication
        • PublicationBuiltinTopicData Members Table
      • DCPSSubscription
        • SubscriptionBuiltinTopicData Members Table
      • How do I access the built-in topics?
      • Is there a built-in topics example?
      • Can I run without built-in topics?
        • How to disable built-in topics using the osplconf tool
      • Related

What are built-in topics?

Different DDS entities are found in separate built-in topics

The built-in topics are:

  • DCPSParticipant
  • DCPSTopic
  • DCPSPublication
  • DCPSSubscription

The DCPSParticipant topic is used to describe each instance of a Domain participant.

Each Topic entity is described by an instance of the DCPSTopic topic.

Information about Publishers and DataWriters comes in a joint built-in topic called DCPSPublication. This contains one instance for each DataWriter which embeds the relevant information from the Publisher that contains it. To get information about the writers in your system you should subscribe to the DCPSPublication  topic.

Subscribers and DataReaders also come in a joint built-in topic called DCPSSubscription. This contains one instance for each DataReader which also contains the information from the Subscriber that contains it.

Internal Built-in Topics

OpenSplice also has a number of other built-in topics which it uses internally, for example  DCPSDelivery, DCPSHeartbeat and potentially some others. These topics are proprietary and for internal use only.  These should not be used in applications as the API is subject to change between versions. Using these topics in applications may also interfere with the internal mechanisms that rely on them and prevent OpenSplice running correctly

What information is contained in the built-in topics?

DCPSParticipant

The DCPSParticipant topic uses the ParticipantBuiltinTopicData datatype to keep track of DomainParticipants in a Domain. Each ParticipantBuiltinTopic data sample represents a DomainParticipant.

If you create a new DomainParticipant in a domain than a new ParticipantBuiltinTopicData instance is created.

If a new DomainParticipant is created then a new ParticipantBuiltinTopicData instance is created. If the DomainParticipant is then deleted the ParticipantBuiltinTopicData instance is disposed. If a DomainParticipant modifies its UserDataQosPolicy then an updated ParticipantBuiltinTopicData sample is written.

ParticipantBuiltinTopicData Members table

The following table shows the information contained in the DCPSParticipant topic.

NameTypeDescription
keyBuiltinTopicKey_tGlobally unique identifier of the participant
user_dataUserDataQosPolicyUser-defined data attached to the participant via a QosPolicy

DCPSTopic

The DCPSTopic topic communicates the existence of topics by the use of the TopicBuiltinTopicData datatype. A TopicBuiltinTopicData sample in a domain is a representation of a Topic in that Domain.  When a new Topic is added to the domain a new TopicBuiltinTopic data instance is created.

This instance will not be disposed when a Topic is deleted by its participant because a topic lifecycle is tied to the lifecycle of the Domain rather than the lifecycle of the participant. Due to the nature of DDS the lifecycle of topics (and their samples) are not related to publishers and subscribers. Topics (and built-in topics) are immortal in DDS because applications that use them can join or leave at any moment in time. Topics will remain in the system even when all the applications that introduce them disappear. They will disappear if the entire Domain is brought down.

If a Topic modifies one or more of its QoSPolicy values a new TopicBuiltinTopicData sample will be written.

Information published in the DCPSTopicTopic is critical to the data distribution service, therefore it cannot be disabled by means of the Domain/BuiltinTopics element in the configuration file. See below for information on how this can be done.

TopicBuiltinTopicData members table

The following table shows the information contained in the TopicBuiltinTopicData topic.

NameTypeDescription
key BuiltinTopicKey_t Global unique identifier of the Topic
name String Name of the Topic
type_nameString Type name of the Topic (i.e. the fully scoped IDL name)
durability DurabilityQosPolicy QosPolicy attached to the Topic
durability_serviceDurabilityServiceQosPolicyQosPolicy attached to the Topic
deadline DeadlineQosPolicy QosPolicy attached to the Topic
latency_budgetLatencyBudgetQosPolicyQosPolicy attached to the Topic
liveliness LivelinessQosPolicy QosPolicy attached to the Topic
reliability ReliabilityQosPolicy QosPolicy attached to the Topic
transport_priorityTransportPriorityQosPolicyQosPolicy attached to the Topic
lifespan LifespanQosPolicy QosPolicy attached to the Topic
destination_orderDestinationOrderQosPolicy QosPolicy attached to the Topic
history HistoryQosPolicy QosPolicy attached to the Topic
resource_limits ResourceLimitsQosPolicyQosPolicy attached to the Topic
ownership OwnershipQosPolicy QosPolicy attached to the Topic
topic_data TopicDataQosPolicy QosPolicy attached to the Topic

DCPSPublication

The DCPSPublication topic keeps track of the existance of data writers. It does this using the PublicationBuiltinTopicData datatype. Every PublicationBuiltinTopicData sample in a Domain is a representation of a DataWriter.

If you create a new DataWriter you create a new PublicationBuiltinTopicData instance. If you delete a DataWriter then the PublicationBuiltinTopicData instance is disposed. If a DataWriter (or the publisher to which it belongs) modifies a QoSPolicy that applies to the entities connected to it an updated PublicationBuiltinTopicData sample is written. The PublicationBuiltinTopicData is also updated when the writer looses or regains its liveliness.

When you invoke the get_matched_publication_data operation on the DataReader, you actually get the PublicationBuiltinTopicData samples that describe the Writers to which your DataReader has connected.

PublicationBuiltinTopicData Members Table

NameTypeDescription
keyBuiltinTopicKey_tGlobal unique identifier of the DataWriter
participant_keyBuiltinTopicKey_tGlobal unique identifier of the Participant to which the DataWriter
belongs
topic_nameStringName of the Topic used by the DataWriter
type_nameStringType name of the Topic used by the DataWriter
durabilityDurabilityQosPolicyQosPolicy attached to the DataWriter
deadlineDeadlineQosPolicyQosPolicy attached to the DataWriter
latency_budgetLatencyBudgetQosPolicyQosPolicy attached to the DataWriter
livelinessLivelinessQosPolicyQosPolicy attached to the DataWriter
reliabilityReliabilityQosPolicyQosPolicy attached to the DataWriter
lifespanLifespanQosPolicyQosPolicy attached to the DataWriter
destination_orderDestinationOrderQosPolicyQosPolicy attached to the DataWriter
user_dataUserDataQosPolicyQosPolicy attached to the DataWriter
ownershipOwnershipQosPolicyQosPolicy attached to the DataWriter
ownership_strengthOwnershipStrengthQosPolicyQosPolicy attached to the DataWriter
presentationPresentationQosPolicyQosPolicy attached to the Publisher to
which the DataWriter belongs
partitionPartitionQosPolicyQosPolicy attached to the Publisher to
which the DataWriter belongs
topic_dataTopicDataQosPolicyQosPolicy attached to the Topic used by
the DataWriter
group_dataGroupDataQosPolicyQosPolicy attached to the Topic used by
the DataWriter

DCPSSubscription

The DCPSSubscription topic uses the SubscriptionBuiltinTopicData datatype to communicate the existence of datareaders. Each SubscriptionBuiltinTopicData sample in a Domain represents a datareader in that Domain.

1When a new DataReader is enabled a new SubscriptionBuiltinTopicData instance is created. When the DataReader is deleted then the SubscriptionBuiltinTopicData is disposed. If the DataReader (or the Subscriber to which it belongs) modifies a QoSPolicy that applies to the entries connected to it then the SubscriptionBuiltinTopicData sample is updated.

SubscriptionBuiltinTopicData Members Table

NameType Description
keyBuiltinTopicKey_tGlobal unique identifier of the DataReader
participant_keyBuiltinTopicKey_tGlobal unique identifier of the Participant to
which the DataReader belongs
topic_nameStringName of the Topic used by the DataReader
type_nameStringType name of the Topic used by the
DataReader
durabilityDurabilityQosPolicyQosPolicy attached to the DataReader
deadlineDeadlineQosPolicyQosPolicy attached to the DataReader
latency_budgetLatencyBudgetQosPolicyQosPolicy attached to the DataReader
livelinessLivelinessQosPolicyQosPolicy attached to the DataReader
reliabilityReliabilityQosPolicyQosPolicy attached to the DataReader
ownershipLifespanQosPolicyQosPolicy attached to the DataReader
destination_orderDestinationOrderQosPolicyQosPolicy attached to the DataReader
user_dataUserDataQosPolicyQosPolicy attached to the DataReader
time_based_filterTimeBasedFilterQosPolicyQosPolicy attached to the DataReader
presentationPresentationQosPolicyQosPolicy attached to the Subscriber to
which the DataReader belongs
partitionPartitionQosPolicyQosPolicy attached to the Subscriber to
which the DataReader belongs
topic_dataTopicDataQosPolicyQosPolicy attached to the Topic used by the
DataReader
group_dataGroupDataQosPolicyQosPolicy attached to the Subscriber to
which the DataReader belongs

How do I access the built-in topics?

Built-in topics get created when a DomainParticipant is initialized. They keep track of discovery information about other DDS participants, Topics, Data Readers and Data Writers.

The built-in Subscriber contains the corresponding DataReader objects. In Java5 get the built-in subscriber you can call the DomainParticipant’s get_builtin_subscriber() operation, which will provide you with a built-in Subscriber. In ISOCPP2, to get the built-in Subscriber you can pass a DomainParticipant to the dds::sub::builtin_subscriber(...) method.

Alternatively, to find the DataReaders without the built-in Subscriber, use the lookup_datareader(...) method in Java5, passing the name of the built-in topic as the parameter

Is there a built-in topics example?

There is a built-in topics example which you can find inside the OpenSplice distribution. It is in the examples/dcps/BuiltinTopics directory. The readme file will show you how to build and run the example. The example shows how built-in topics can be used to monitor the number of nodes participating in a domain.

Can I run without built-in topics?

There may be times when you want to disable the use of built-in topics, for example to reduce network load. Some features of OpenSplice may not work if you do this.

You can disable built-in topics in the xml configuration file by using the //OpenSplice/Domain/BuiltinTopics  section. By default BuiltinTopics are enabled so they are not shown in the xml file.

<Domain>
….
<BuiltinTopics enabled=”true”/>
</Domain>

It is always best to edit the xml file using the OpenSplice configuration tool as this will check to see it the xml file is valid before saving it.

How to disable built-in topics using the osplconf tool

Start the opslconf tool using the command osplconf from a command prompt where the opensplice environment is configured. This will bring up the GUI.

Click File > Open and choose the xml file you are using

On the Domain tab right click where it says Domain and choose Add >BuiltinTopics

How to disable built-in topics using the opslconf tool

The Builtin Topics should appear at the bottom of the domain tab. It is enabled by default.

To change it to disabled click on it. You should see enabled value true in the right hand pane.

How to disable built-in topics using the osplconf tool

Click on the value and you will get a drop down list and you can choose false.

Save the file using File > Save.

See section 12.2.17 BuiltinTopics in the deployment guide for more information on this configuration option.

In general it is good to realize that discovery by means of builtin topics is part of the standard ddsi discovery, and so it only makes sense to turn this off when using the native networking service. The native network service does not depend necessarily on discovery by means of builtin topics in order establish successful communication.

Related

dds DDSOpenSplice DDSDDS Overview and Concepts
twitter logo linkedin logo
News and Events
Copyright © 2022 ZettaScale Technology Ltd. All Rights Reserved