8. Release Notes¶
8.1. Supported Platforms¶
RTI® Recording Service is supported on the platforms listed in Table 8.1.
It can also be deployed as a C++ library linked into your application. This is true for all platforms in Table 8.1.
Platform | Operating System |
---|---|
Linux | All Linux platforms in the RTI Connext DDS Core Libraries Release Notes with the same version number, except NI Linux 3 on Arm® v7 and Wind River® Linux 7 on x64. |
macOS® | All macOS platforms in the RTI Connext DDS Core Libraries Release Notes with the same version number. |
QNX® | All QNX Neutrino® 7.0 platforms in the RTI Connext DDS Core Libraries Release Notes with the same version number. |
Windows® | All Windows® platforms in the RTI Connext DDS Core Libraries Release Notes with the same version number. |
Recording Service is also supported on the platforms in Table 8.2; these are target platforms for which RTI offers custom support. If you are interested in these platforms, please contact your local RTI representative or email sales@rti.com.
Platform | Operating System |
---|---|
Linux | Yocto Project 2.5 on Arm v7 |
8.2. Compatibility¶
For backward compatibility information between Recording Service 6.0.1 and previous releases, please see the Migration Guide on the RTI Community portal.
8.3. What’s New in 6.0.1¶
8.3.1. New platforms¶
Recording Service, Replay Service, and Converter now include support for these platforms:
- macOS 10.14 (x64)
- Ubuntu 16.04 LTS (Arm v8 x64)
- QNX 7.0 (x64 and Arm v8 x64)
- Red Hat® Enterprise Linux 8 (x64)
- Windows 10 (x86, x64) with Visual Studio® 2019
- Windows Server 2016 (x86, x64) with Visual Studio 2019
- Yocto Project 2.5 (Arm v7) (custom target platform)
For more information on these platforms, see the RTI Connext DDS Core Libraries Platform Notes for this release.
8.3.2. Removed platforms¶
These platforms are no longer supported:
- macOS 10.11
- Windows 7
- Windows Server 2008 R2
8.3.3. New <topic_name> tag to specify DDS topic name¶
In the previous version, the <topic>
tag used the name
attribute to
refer to both its own name and the DDS topic to be recorded, replayed,
or converted. This can be problematic when the topic name contains special
characters that cannot be used in an XML attribute. It can also be problematic
when the name uses a character or string also used by Recording Service,
Replay Service, or Converter for other purposes. For example, the ::
string is the separator for administration and monitoring names within
the tool.
The new <topic_name>
tag, which is not required but encouraged, will be
used to obtain the DDS topic name if present, instead of using the <topic>
tag’s name
attribute. You can fall back to the previous behavior by not
specifying <topic_name>
, in which case the name
attribute will be
used instead.
8.3.4. Replay fidelity improved with large data¶
Replay Service’s performance has been improved when working with large data. Reading the samples to be replayed has been decoupled from the process of writing the samples to DDS. This change provides better fidelity by reducing the delay in writing.
8.3.5. Improved performance when creating legacy database stream readers¶
This release provides better performance when creating legacy database stream
readers in Replay Service or Converter (that is, when using
Replay Service or Converter with the <legacy>
storage plugin).
8.3.6. Support for remotely triggered flush of user-data to disk¶
This release incorporates a new operation mode in Recording Service, called buffering mode. It also includes a new remote administration operation, flush.
Buffering mode allows you to start Recording Service in a listening-only mode, where the service just buffers data but doesn’t actually write it to disk automatically.
By using the new remote flush operation, you can remotely control exactly when the data is written to permanent storage. Upon receiving this remote command, the service will command all the Topics and Topic Groups to store all the buffered data.
For more information about these features, see the User’s Manual, section 3.1.4, Controlling Recording Service’s Operation Mode.
8.4. What’s Fixed in 6.0.1¶
8.4.1. Legacy deserialized database table couldn’t be replayed or converted if it contained compact byte sequences or arrays¶
Replaying or converting a legacy (version 5.3.1 or older) database stored in deserialized format failed if the database was recorded with octet/char sequences/arrays stored as blobs (that is, in compact mode). For example:
struct LargeByteSeqType {
sequence<octet, 65530> large_byte_seq;
...;
};
If the database stored large_byte_seq
as a BLOB column, then
Replay Service or Converter failed and complained with the following
message:
exception:[DRT_DynamicType_expand_sequence_v3@3379]:Sequence length
greater than built-in max
This problem has been resolved.
[RTI Issue ID RECORD-957]
8.4.2. Segmentation fault in Replay Service or Converter if recorded topics had “::” in their names¶
This issue happened when a DDS topic contained ::
as part of its name.
Replay Service or Converter would hit a segmentation fault when trying to process
that topic’s table. This issue has been resolved.
[RTI Issue ID RECORD-959]
8.4.3. Detection of termination in Converter fixed¶
When running Converter, it was possible that some topics weren’t converted before the application terminated. This was due to a poor termination detection schema. This problem has been resolved.
[RTI Issue ID RECORD-970]
8.4.4. QoS Topic Filters were not supported¶
Recording Service entities previously ignored QoS Topic Filters. This problem has been resolved. The entities listed below will obtain the QoS within the selected profile having a matching topic filter based on the actual name of the Topic they are associated with.
- Topic (both Recording Service and Replay Service)
- TopicGroup’s (both Recording Service and Replay Service)
- Remote Administration Replier
- Monitoring DataWriters
For example, consider the following QoS profile, which uses topic filters.
<qos_library name="QosLib">
<qos_profile name="QosProfile"">
<datawriter_qos>...</datawriter_qos>
<datawriter_qos topic_filter="MyTopic">
...
</datawriter_qos>
<datareader_qos topic_filter="MyTopic">
...
</datareader_qos>
<datawriter_qos topic_filter="rti/service/admin/command_reply">
...
</datawriter_qos>
<datareader_qos topic_filter="rti/service/admin/command_request">
...
</datareader_qos>
<datawriter_qos topic_filter="rti/service/monitoring/periodic">
...
</datawriter_qos>
</qos_profile>
</qos_library>
And the following Recording Service configuration:
<recording_service name="MyRecorder">
<administration>
<writer_qos base_name="QosLib::QosProfile" />
<reader_qos base_name="QosLib::QosProfile" />
</administration>
<monitoring>
<writer_qos base_name="QosLib::QosProfile" />
</monitoring>
....
<topic>
<topic_name>MyTopic>
<reader_qos base_name="QosLib::QosProfile" />
</topic_route>
<topic_group>
<reader_qos base_name="QosLib::QosProfile" />
</topic_group >
...
</recording_service>
The corresponding DDS entities below will be created with the QoS that matches the topic filter based on the topic name:
DDS Entity | QoS from QosLib::QosProfile | Topic filter |
---|---|---|
Topic’s DataReader | reader QoS | MyTopic |
TopicGroup’s DataReader for topic name=MyTopic | reader QoS | MyTopic |
TopicGroup’s DataReader for topic name=Other | reader QoS | NULL |
Administration Replier’s DataReader | reader QoS | rti/service/admin/command_request |
Administration Replier’s DataWriter | writer QoS | rti/service/admin/command_reply |
Monitoring Periodic DataWriter | writer QoS | rti/service/monitoring/periodic |
Monitoring Config and Event DataWriter | writer QoS | NULL |
[RTI Issue ID RECORD-1008]
8.4.5. Execution directories overwritten incorrectly¶
Using the <execution_dir_expression>
tag (under <fileset>
) with the
autonumeric format (for example, %auto:0-9%
) did not always give the
expected results. Recording Service always began writing in the first
directory (0), instead of looking for the first unused directory within
the specified range (0-9).
This problem has been resolved. Now Recording Service will start writing
in the first available execution directory, unless the
<overwrite_policy_kind>
tag (under sqlite>
) is set to DO_NOT_TOUCH
.
[RTI Issue ID RECORD-1010]
8.4.6. Segmentation fault in Recording Service if <time_limit> didn’t have all its child properties¶
When using Recording Service’s <time_limit>
tag, if any of the child
tags were missing, the service would crash. For example, the following XML
code is missing the <days> tag, which caused Recording Service to crash.
<fileset>
<workspace_dir>output_dir</workspace_dir>
<execution_dir_expression></execution_dir_expression>
<filename_expression>file_rollover_%auto:0-9%.dat
</filename_expression>
<rollover>
<enabled>true</enabled>
<time_limit>
<hours>0</hours>
<minutes>0</minutes>
<seconds>5</seconds>
</time_limit>
</rollover>
</fileset>
This problem has been resolved.
[RTI Issue ID RECORD-1030]
8.4.7. Possible race condition in Replay Service when looping enabled and pause/resume issued¶
Sending remote pause/resume commands to Replay Service may have caused a race condition if looping was enabled. When this condition occurred, Replay Service stopped sending samples because of a corruption in the internal timers. This problem has been resolved.
[RTI Issue ID RECORD-1036]
8.4.8. Possible segmentation fault when replaying or converting legacy database with compressed octet/char sequences¶
Replaying or converting a legacy database with a table containing a sequence of bytes (chars or octets) stored as a blob (that is, compressed mode) may have caused a segmentation fault. The error occurred when the application tried to set the value of the sequence in the Dynamic Data object. This problem has been resolved.
[RTI Issue ID RECORD-1037]
8.4.9. Missing shutdown messages¶
Recording Service did not show any messages when shutting down. This problem has been resolved. Now Recording Service shows the following message when it begins its shutdown process:
Stopping RTI Recording Service
Once Recording Service has stopped, it will show the next message:
RTI Recording Service stopped
[RTI Issue ID RECORD-1054]
8.4.10. XML attribute values were overwritten if element set with variable¶
If an XML element used a variable to specify its value, any contained attributes were incorrectly overwritten with the value of that variable.
For example, consider this XML:
<file_size_limit unit="MEGABYTES">$(MAX_SIZE)</file_size_limit>
The unit
attribute was overwritten with the value of the MAX_SIZE
environment variable. So if MAX_SIZE = 100, the result was:
<file_size_limit unit="100">100</file_size_limit>
This incorrect behavior applied to any XML element. This problem has been resolved.
[RTI Issue ID RECORD-1061]
8.4.11. Segmentation fault when no valid configuration file found¶
If Recording Service could not find a valid configuration file to load, this caused a segmentation fault. This may have occurred when:
- The default
RTI_RECORDING_SERVICE.xml
file could not be found. This can happen if it has accidentally been renamed or the Recording Service executable has been moved. - The default user configuration
USER_RECORDING_SERVICE.xml
could not be found in the current working directory. - No other means to obtain the XML configuration were provided, such as
using the
-cfgFile
command-line option, or specifying the configuration file or strings property if using Recording Service as a library.
This problem has been resolved. Now you will see an error message but no segmentation fault.
[RTI Issue ID RECORD-1078]
8.4.12. Possible segmentation fault when converting legacy database to CDR_AUTO format¶
When converting a legacy (pre-6.0.0) database to the new database format, if the exported sample format used was XCDR_AUTO, there may have been cases, depending on the types and actual samples exported, where Converter threw a segmentation fault when shutting down. This problem has been resolved.
[RTI Issue ID RECORD-1115]
8.5. Previous Releases¶
8.5.1. What’s New in 6.0.0¶
Recording Service, Replay Service, and Converter are completely new in this release. They have been entirely rewritten, with these goals in mind:
- Improving performance
- Simplifying configuration
- Becoming more consistent with other infrastructure services
- Supporting new use cases
There are a few limitations compared to the prior version:
- Does not support Recording Console, however, RTI Admin Console provides some of the functionality.
- Does not yet support replaying in the original partition.
- Does not include a remote shell application, but that is provided as an example.
8.5.1.1. Avoiding gaps in Replay when using time ranges¶
Replay Service used to extend the start timestamp to include relevant discovery data in the time range. While this allowed for the discovery of topics whose discovery events may have been out of the specified time range, it could also cause gaps when the discovery data and target data to be replayed were separated in time. To avoid these gaps, Replay Service no longer internally modifies the start timestamp defined by the user. All discovery data prior to the defined start timestamp will be discovered instantaneously.
8.5.2. What’s Fixed in 6.0.0¶
8.5.2.1. Pluggable storage for Converter discarded plugin properties specified in XML¶
When using the pluggable storage APIs with Converter, the properties passed to the plugin in the input_storage or output_storage tags (as shown below) were discarded. This problem has been resolved. Now the properties are passed to the plugin.
<input_storage>
<plugin plugin_name="StorageLib::StoragePlugin">
<property>
<value>
<element>
<name>MyProperty</name>
<value>MyPropertyValue</value>
</element>
</value>
</property>
</plugin>
</input_storage>
[RTI Issue ID RECNEXTGEN-412]
8.6. Known Issues¶
8.6.1. Recording Service may fail when current working directory in c:\Program Files¶
Recording Service will try to write to its database in the current working directory. If it does not have permissions to write there, it will fail with a confusing error:
[/recording_services/RecorderService|START|/storage|CREATE]
create_connection:!SQLite - failed to open database file; sqlite
returned error: out of memory
[SQLite return code = 7]
[File = metadata]
This happens most commonly when running the application from within
c:\\Program Files
on Windows systems. You can work around this by running
Recording Service from a command prompt in a directory where you have
write permissions.
8.6.2. Segmentation fault after discovering application that uses UserData QoS Policy¶
If Recording Service discovers an application that has at least one entity (DomainParticipant, DataReader, or DataWriter) that uses the UserData QoS Policy, the behavior is undefined and will likely result in a segmentation fault.
[RTI Issue ID RECORD-1125]