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 / OpenSplice General User Questions

OpenSplice General User Questions

This article contains some more generalised, submitted OpenSplice questions that may prove useful to others.

See the OpenSplice documentation for more information.

Table Of Contents
    • Does OpenSplice support real-time variants of the Java virtual machine?
    • Does OpenSplice support the use of concurrent domains within the same application, and is there a limit to the number of them?
    • What is the difference between a Partition and a Domain?
    •  Does OpenSplice use metadata?
    • How to detect a Node being removed from the reliable protocol.
    • How can I list all the Topics in a Domain?
    • I need to write a topic sample (volatile, reliable) to the cloud and then immediately exit my application. Is there a way to ensure that the topic sample was actually sent and received by the targeted reader before I exit my application?
    • How does OpenSplice DDS deal with timezones? If we are using the source timestamp in our QoS settings and our machines are in different time zones would this cause problems?
    • Will OpenSplice function without Discovery?
    • A new DataReader has just been created, but appears to miss the first sample sent.
    • Related


Does OpenSplice support real-time variants of the Java virtual machine?

Does OpenSplice support real-time variants of the Java virtual machine?
Yes OpenSplice is compatible with the real-time variants of Java, most notably RTSJ.
General architectural aspects
  • OpenSplice has a C implementation and provides a runtime shared-library for applications.
  • For Java applications we use JNI to provide access to this shared-library from a Java context.
  • The overall approach is to keep the JNI interface as thin as possible.
Data Writers perform synchronous DDS-writes directly from the Java context with the following advantage
  • Minimal overhead by Java (JNI) API – These are direct JNI-calls to the (C) shared OpenSplice library that performs all the actions.
  • No JAVA object-creation QoS control, the latency-budget allows for just-in-time bulk-transfer.
  • High efficiency. The Transport-priority allows the application to identify the urgency of the data transfer.
  • Minimised impact of low-priority traffic. The partition selection allows for efficient information-partitioning and multicast-mapping.
Data Readers have direct in-memory reader cache access with the following advantage
  • Minimal overhead by Java (JNI) API Support for Object preallocation by the application.
  • Minimal object-creation by OpenSplice using OMG-DDS waitsets; Java-thread blocks at C-level (like a unix select).
    Full application control on priority using OMG-DDS listeners; Automatic JVM-attachment to native listener thread.
  • Direct coupling of application code to native thread.
There is no standard API for native thread-priority control. RTJS thread-control is still to be implemented.

Does OpenSplice support the use of concurrent domains within the same application, and is there a limit to the number of them?

Yes OpenSplice supports the use of concurrent domains. It allows a single application to create multiple Domain Participants.
The OpenSplice middleware does not impose a limitation on the number of concurrent domains. The only limitation to the number of domains is the availability of  resources (processing, memory & networking) that are available for the middleware. Each domain is an OpenSplice instance with its own services/daemons.

What is the difference between a Partition and a Domain?

In the DDS-standard, there are different means for data-partitioning, one is the concept of a ‘Domain’ and the other is a ‘Partition’.

Domains completely separate DDS-instantiations meaning that information (Topics/types/instances/samples) can have a completely different meaning between domains even if their names suggest otherwise.

In OpenSplice DDS, a Domain is characterised by a shared memory segment that holds

  • All the data of that domain in a node.
  • A set of applications that have created Domain Participants for that domain
  • A set of pluggable services that aid in realising the required and configured functionality that is needed in that domain (with services such as for networking, durability, SOAP-connector, DBMS-connector, etc.).

A DDS ‘Partition’ is a more granular, dynamic and therefore powerful concept in DDS in that any Publisher and/or Subscriber is always related / connected to one or more DDS-partitions.

A DDS-Partition is a QoS policy of Publishers and Subscribers and all readers/writers that belong to a publisher/subscriber share information that is written in those partitions.

Partitions can be created on-the-fly, are characterised by a ‘name’ and subscribers and publishers (but typically subscribers) can even use wildcards in the partition-name to allow connection to dynamic sets of partitions.


 Does OpenSplice use metadata?

Yes, the OMG-DDS specification has a clearly defined set of metadata to which OpenSplice conforms, this metadata contains information about the type definitions and QoS used in the system. It is also used for built-in-topics that describe DDS entities such as participants/publishers/subscribers/writers/readers and topics.


How to detect a Node being removed from the reliable protocol.

An error message similar to Node 0x23488dbd (address x.x.x.x) not responding or no heartbeats received, removing it from the reliable protocol may be seen in the ospl log files.

This is a sign of a major issue in your system, typically caused by:

  • Networking/Topology issue, in which case there should also be accompanying log-messages stating no heartbeats were received.
  • Reactivity of the receiving node is impaired, default settings imply that even after 100 retries during 3 seconds, no acknowledges  were received by the sending node.
In either case, a loss of reliability is basically an unrecoverable error which is best prevented rather than reacted upon by restarting a system part. If it is not a networking/topology issue, but a reactivity issue, it is likely due to long CPU overload periods (or too tightly configured reliable channel settings). Where a ‘relaxed configuration’ or increased networking-thread priorities could help prevent the channel from being ‘closed’.
To detect and take action on specific log messages, a report-plugin can be specified in the OpenSplice configuration file. This is basically a shared library with a user-defined method that is called on each log report, in addition to the default mechanism that stores the reports in ospl-info.log and ospl-error.log. A report plugin can be used, for example, to reformat and forward log reports to a different backend (i.e. Syslog or Windows Event Log), but also to interpret the contents of a message and when it matches certain conditions, trigger an action such as sending a notification and/or terminating the application. More information on report plugins and the methods it should contain is available in the OpenSplice Deployment Manual.
However, it makes most sense to first identify the cause of the issue before spending effort to recover from such a basic unrecoverable error, as that also implies that the system needs to be designed to cope with partial system-restarts. An initial assumption would be prolonged 100% CPU periods that could cause a reactivity issue to occur.

How can I list all the Topics in a Domain?

You can use Builtin Topics to do this. You need to read all the instances of the “DCPSTopic” topic. Once you have done this you need to invoke participant::get_builtin_subscriber(), then invoke invoke subscriber::lookup_datareader(“DCPSTopic”) and finally just read all samples. The names of the topics are in the “name” field of the DCPSTopic samples.


I need to write a topic sample (volatile, reliable) to the cloud and then immediately exit my application. Is there a way to ensure that the topic sample was actually sent and received by the targeted reader before I exit my application?

Synchronous write is a good option here, you’ll need to set the synchronous option in the ReliabilityQos for the writer and reader to true. Please see ReliabilityQosPolicy in your API language reference guide.


How does OpenSplice DDS deal with timezones? If we are using the source timestamp in our QoS settings and our machines are in different time zones would this cause problems?

The timestamp uses UTC time so the different time zones should have no effect.


Will OpenSplice function without Discovery?

OpenSplice will function with Discovery enabled=”true” but also with enabled=”false”. If enabled=”false”, all data will always be sent to the network and anybody who is interested will receive the data. If enable=”true”, data will be sent to the network if at least one other node is present.

A new DataReader has just been created, but appears to miss the first sample sent.

When you are creating a new datareader there is a small amount of administrative time needed to setup the new object, the create_datareader call  does not block until the data reader is completely established. If you are trying to receive samples immediately after calling the create methods then samples maybe lost during this administrative time period. To prevent this we would recommend adding a waitset call for a few seconds to allow the DataReader to set up before receiving the expected samples.


Related

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