:tocdepth: 2 ############# Release Notes ############# This is the pending release and all the recent releases of OpenDDS. This file is generated by :ghfile:`docs/sphinx_extensions/newsd.py` from the rst files in :ghfile:`docs/news.d`. See :ref:`docs-news` for details. .. _v3_35_0: ******* v3.35.0 ******* This version is currently still in development, so this list might change. Nothing news-worthy yet... .. _v3_34_0: ******* v3.34.0 ******* Released 2026-05-21 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - RtpsRelay - Additional parameters can be changed at runtime. See :ref:`RtpsRelayControl ` for details. (:ghpr:`5130`, :ghpr:`5111`) - A list of partitions can be specified to be denied by the RtpsRelay instance using the new RelayDeniedPartitions topic. (:ghpr:`5135`) - A new option ``-DeniedPartitionsTimeout`` is added to specify the denial duration. - Added a '--profiling' flag to the configure script to enable common flags used during profiling (gcc / clang) (:ghpr:`5169`) - This enables some optimization ('-O3') but also includes debuging info ('-ggdb') and protects frame pointers ('-fno-omit-frame-pointer') in order to help in generating clean stack traces for profilers and other utilities which examine the call stack. - Added callbacks for when an OpenDDS thread starts and finishes to control thread behavior. (:ghpr:`5171`) - For example on Linux, using :manpage:`pthread_setaffinity_np` to set which CPU core the thread runs on. - See ``set_thread_status_listener`` in :ghfile:`dds/DCPS/Service_Participant.h` and ``ThreadStatusListener`` in :ghfile:`dds/DCPS/ThreadStatusManager.h` for details. - As an optimization, all IDL mappings will now try to avoid zero-initializing memory of sequences of primitive types (ints, floats, etc) while deserializing a sample. (:ghpr:`5173`) - IDL-to-C++11 will require additional opt-in using :ref:`opendds_idl-opendds-no_init_before_deserialize`. - Added ``DCPSEventDispatcherThreads`` and transport ``event_dispatcher_threads`` runtime-configuration options to control ``EventDispatcher`` thread counts. (:ghpr:`5208`) Setting transport ``event_dispatcher_threads=0`` reuses the global dispatcher instead of creating a transport-local dispatcher. - Added :cfg:prop:`[transport@tcp]send_buffer_size` and (:ghpr:`5215`) :cfg:prop:`[transport@tcp]rcv_buffer_size`. By default, the TCP transport now leaves socket buffer sizing to the platform unless these are set to positive values. Platform Support and Dependencies ================================= - ACE/TAO - Updated ACE 6/TAO 2 from 6.5.23 to `6.5.24 `__. - Updated ACE 8/TAO 4 from 8.0.5 to `8.0.6 `__. - CMake - When building OpenDDS with CMake, the default ACE_TAO version is now ACE 8 / TAO 4. (:ghpr:`5093`, :ghpr:`5029`) - Replace CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE with CMAKE_VS_PLATFORM_NAME to fit cross-compile scenario on Windows. (:ghpr:`5157`) Removals ======== - RtpsRelay - RtpsRelay option ``-LogParticipantStatistics`` is removed as it is unused (:ghpr:`5109`) Fixes ===== - Increase netlink receive buffer size. (:ghpr:`5142`) - Recommended netlink receive `buffer size `__ is 32kB. Buffer size smaller than 8kB may lead to unexpected truncation of received data. - As a network performance improvement: Free up Reactor threads for network reads by moving the majority of maintenance and response tasks and jobs off Reactor threads and onto matching EventDispatcher threads. (:ghpr:`5160`) - ``ThreadStatusManager`` now contains multiple slots for storing thread statuses, each has its own lock. (:ghpr:`5172`) Only threads assigned to the same slot contend with each other for the slot's lock. - Fixed a null pointer dereference which could occur when deserializing ``DynamicData`` samples from a participant being removed. (:ghpr:`5176`) - Fix issues related to transport instance lookup and shared local addresses between transport instances which were sometimes causing incorrect locator values to be used in participant and endpoint announcements and causing connectivity issues. These issues primarily impact configurations which make use of discovery and transport configuration templates. (:ghpr:`5189`) .. _v3_33_0: ******* v3.33.0 ******* Released 2025-08-01 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - IDL Maps are now supported by ``opendds_idl``. (:ghpr:`4999`) - We would like to thank `tmayoff `__ for contributing much of the work needed for this. - Usage example: .. code-block:: omg-idl @nested struct Item { string desc_name; uint32 count; }; @topic struct Inventory { map items; }; - They map to C++ ``std::map`` in both the classic IDL-to-C++ and IDL-to-C++11 mappings. - See :ref:`introduction--idl-compliance` for known limitations. - RtpsRelay - Output from :option:`RtpsRelay -LogRelayStatistics` / :option:`RtpsRelay -PublishRelayStatistics` includes extended RtpsRelay statistics (:ghpr:`4972`, :ghpr:`5006`) - Output from :option:`RtpsRelay -LogRelayStatistics` / :option:`RtpsRelay -PublishRelayStatistics` includes internal OpenDDS statistics (:ghpr:`5000`, :ghpr:`5006`, :ghpr:`4990`, :ghpr:`5023`) - RtpsRelay no longer needs to store and replay SPDP messages (:ghpr:`5017`, :ghpr:`5020`) - The OpenDDSInternalThread built-in topic has additional detail fields which may be populated by internal threads. (:ghpr:`5026`) - The RtpsRelay's event handling threads make use of this feature. - RtpsRelay expiration/deactivation is now done by separate timer events instead of during input handling (:ghpr:`5032`) - :option:`RtpsRelay -DrainInterval` can drain clients to implement a controlled shutdown (:ghpr:`5063`) - Added :cfg:prop:`[rtps_discovery]IgnoredSpdpUserTags`. (:ghpr:`5046`) - When DDS Security is configured to require authentication and an incoming SPDP message has a different Identity CA, authentication is not attempted. (:ghpr:`5046`) Platform Support and Dependencies ================================= - ACE/TAO - Updated ACE 6/TAO 2 from 6.5.21 to `6.5.22 `__. - Updated ACE 8/TAO 4 from 8.0.3 to `8.0.4 `__. - CMake - :cmake:func:`opendds_target_sources` now has a `FOLDER` argument which sets the CMake FOLDER property on generated targets. (:ghpr:`5009`) - Fixed accidental use of RapidJSON's ``CMakeLists.txt`` file when building OpenDDS with CMake. (:ghpr:`5054`) This caused issues such as forcing the ``CMAKE_CXX_STANDARD`` to C++11 and breaking the ACE C++ standard detection code. - Fixed configure issue with Xerces from vcpkg when building OpenDDS with CMake. (:ghpr:`5054`) - The configure script detects the C++ standard supported by the Android NDK compiler (:ghpr:`5057`, :ghpr:`5052`) Fixes ===== - Reset heartbeat fallback when the sequence number advances. (:ghpr:`5048`) .. _v3_32_0: ******* v3.32.0 ******* Released 2025-05-06 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - Added :option:`RtpsRelay -LogUtilizationChanges` to RtpsRelay options (:ghpr:`4890`) - Added :option:`opendds_idl --append-typeobjects` to opendds_idl options. It can be used to write XTypes Type Objects to a separate output file in addition to normal code generation. (:ghpr:`4898`) - Added :option:`RtpsRelay -SynchronousOutput` option to RtpsRelay. (:ghpr:`4928`) - The TypeLookupService now has support for strongly connected components (recursive types). (:ghpr:`4940`) Platform Support and Dependencies ================================= - ACE/TAO - Updated ACE 8/TAO 4 from 8.0.2 to `8.0.3 `__. - CMake - :cmake:func:`opendds_target_sources` - Added support for using the same IDL files in different targets with different options. (:ghpr:`4962`) - It will not automatically generate an export header when all IDL files are scoped ``PRIVATE`` unless :cmake:func:`opendds_target_sources(ALWAYS_GENERATE_LIB_EXPORT_HEADER)` is set to ``TRUE``. (:ghpr:`4962`) - It will not export symbols in code generated from ``PRIVATE`` IDL files. (:ghpr:`4962`) - Added support for the `codegen `__ target (CMake 3.31 or later) to build and run IDL compilers on targets with IDL. (:ghpr:`4962`) - :cmake:func:`opendds_target_sources(USE_EXPORT)` will now pass on its arguments to :cmake:func:`opendds_export_header(EXISTING)`. (:ghpr:`4964`) - Fixes and improvements for :cmake:func:`opendds_export_header`: (:ghpr:`4954`) - ``opendds_export_header`` now allows specifying an existing export header and gives control over what names are used. - ``opendds_export_header`` and :cmake:func:`opendds_target_sources` now set symbol visibility to hidden using `CXX_VISIBILITY_PRESET `__ and `VISIBILITY_INLINES_HIDDEN `__ on platforms where this applies. - Fixed Visual Studio failing because of inconsistent linkage of exported symbols when linking between a DLL and a static library. - Fixed :ghissue:`issue with building iShapes demo with CMake <4849>`. (:ghpr:`4884`) - Improved C++ standard detection in CMake. (:ghpr:`4884`) - Added :cmake:func:`opendds_bigobj` to set ``/bigobj`` on targets that need it on Windows. (:ghpr:`4954`) - When using CMake 4, fixed relative path issues when working within a symlinked directory, including a warning about `CMP0177 `__. (:ghpr:`4959`) - Fixed :ghissue:`issue with CMake being unable to find RapidJSON <4905>` after installing OpenDDS. (:ghpr:`4973`) - Fixed reconfigured cross-compiled builds trying to use ``TRUE`` as the path to host tools. (:ghpr:`4986`) - Building OpenDDS with CMake - The :ref:`shapes-demo` will now be built when :ref:`cmake-building` and :cmake:var:`OPENDDS_QT` is set to ``TRUE``. (:ghpr:`4884`) - Improved support for using Xerces 3.3.0 when building OpenDDS using CMake. (:ghpr:`4926`) - GoogleTest will no longer be installed if it was built as part of the OpenDDS tests. (:ghpr:`4973`) - Added :cmake:var:`OPENDDS_INSTALL_RAPIDJSON` to disable installing RapidJSON automatically. (:ghpr:`4973`) - :cmake:var:`OPENDDS_ACE` and :cmake:var:`OPENDDS_TAO` can now be overrode after OpenDDS is installed. (:ghpr:`4973`) - Fixed :cmake:var:`OPENDDS_COMPILE_WARNINGS=ERROR `, which didn't work before. (:ghpr:`4986`) - Updated GoogleTest to be compatible with CMake 4. (:ghpr:`4959`) - OpenDDS's use of ``std::optional`` or an emulation is determined by the configuration file (:ghpr:`4976`) - See ``OPENDDS_CONFIG_STD_OPTIONAL`` in ``dds/OpenDDSConfig.h`` - Default is to use ``std::optional`` on compilers that support it - See configure script's ``--no-std-optional`` or CMake's :cmake:var:`OPENDDS_STD_OPTIONAL` - New configure script option: ``--[no-]static-runtime`` (:ghpr:`4977`, :ghpr:`4983`) Fixes ===== - Added ``RTPS_HARVEST_THREAD_STATUS`` property to select the participant that harvests thread status. (:ghpr:`4887`) - This addresses erroneous results from multiple participants harvesting thread status. - See :ref:`built_in_topics--openddsinternalthread-topic` for usage. - Signal the thread monitor in RtpsRelay listeners to avoid thread monitor timeouts. (:ghpr:`4900`) - Introduced a time separation when processed expired discovered participants with RtpsDiscovery. (:ghpr:`4908`) - See :cfg:prop:`[rtps_discovery]MinimumCleanupSeparation`. Documentation ============= - Fixed minor typo in documentation of :ref:`ace6tao2` option of :cmake:var:`OPENDDS_ACE_TAO_KIND`. (:ghpr:`4884`) .. _v3_31_0: ******* v3.31.0 ******* Released 2025-01-29 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - Improve ``--boottime`` timers to not use a file descriptor per timer. (:ghpr:`4835`, :ghpr:`4871`) Platform Support and Dependencies ================================= - ACE/TAO - Updated ACE 8/TAO 4 from 8.0.1 to `8.0.2 `__. - CMake - Fixed an issue :ghissue:`where OpenDDS won't build ACE/TAO with Visual Studio 2015 <4842>`. (:ghpr:`4843`) Fixes ===== - Updated ThreadStatusManager for iterative event handling (:ghpr:`4830`) - Fix periodic timers with ``--boottime`` so that the initial delay is honored. (:ghpr:`4835`, :ghpr:`4871`) Notes ===== - Releases will now use a :ghissue:`new git tagging and branching strategy <4761>`. - Previously releases were tagged as either ``DDS-X.Y`` or ``DDS-X.Y.Z``. Release tags from now on will also be tagged as ``vX.Y.Z``. Any future OpenDDS 3 releases will be tagged both ways, while OpenDDS 4 releases will only be tagged in the new way. - New branches can now be used for following specific release series. For example `v3` will always be updated to the latest 3 release and ``v3.31`` will be used for any future 3.31 releases. .. _v3_30_0: ******* v3.30.0 ******* Released 2024-10-11 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - Added :option:`RtpsRelay -AdmissionMaxParticipantsRange` to RtpsRelay options (:ghpr:`4774`) - This option provides another mechanism for detecting load on each RtpsRelay instance - Improved RelayThreadMonitor error reporting (:ghpr:`4778`) - All threads that have missed the deadline are reported before the process dies. These log messages include the timestamp of the most recent update for each thread that has missed the deadline. - Embedded a :ghfile:`GDB extension ` in ``libOpenDDS_Dcps`` to help make debugging OpenDDS in GDB a bit easier. (:ghpr:`4791`, :ghpr:`4727`) - Use a configurable thread pool for the RtpsRelay event handlers (:ghpr:`4808`) - See :option:`RtpsRelay -HandlerThreads` Platform Support and Dependencies ================================= - ACE/TAO - Updated ACE 8/TAO 4 from 8.0.0 to `8.0.1 `__. - CMake - Fixed issues using OpenDDS as a subproject with ``add_subdirectory``. (:ghpr:`4795`) Fixes ===== - Fixed cross-compiled builds using Java (:ghpr:`4763`) - Fixed a memory leak in the address caches used by the RTPS/UDP transport. (:ghpr:`4772`) - Corrected implementation of :option:`RtpsRelay -AdmissionControlQueueSize` and :option:`RtpsRelay -AdmissionControlQueueDuration` (:ghpr:`4783`) - Fix cleanup of pending associations in the RTPS/UDP transport. (:ghpr:`4785`) - Change the tag type separator in ``opendds_idl`` to allow underscores in identifiers. (:ghpr:`4800`) - Change "reallocating primary receive buffer" to transport debug logging level 3 (:ghpr:`4810`) Documentation ============= - Documented the :cfg:prop:`bit_autopurge_nowriter_samples_delay` and :cfg:prop:`bit_autopurge_disposed_samples_delay` configuration properties. (:ghpr:`4816`) .. _v3_29_1: ******* v3.29.1 ******* Released 2024-07-31 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Fixes ===== - Fixed code generation for fixed-size structs in Java that caused compilation errors. (:ghpr:`4752`) .. _v3_29_0: ******* v3.29.0 ******* Released 2024-07-26 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - Added support for the :ref:`xtypes--optional` IDL annotation for the IDL-to-C++11 mapping. ``@optional`` maps to either ``std::optional`` or a similar custom implementation in the generated code. (:ghpr:`4364`) - Implemented the ``create_sample``, ``create_sample_rc``, ``create_dynamic_sample``, and ``create_dynamic_sample_rc`` methods on ``TypeSupport`` to convert samples to and from ``DynamicData``. (:ghpr:`4373`) - Also documented the existing ``DynamicDataAdapter`` class for wrapping IDL-generated types in a ``DynamicData``. - See :ref:`xtypes-dynamicdata-and-idl-generated-types` for details. - Samples from DynamicDataReaders can be modified and passed to DynamicDataWriters. (:ghpr:`4609`) - Added config properties to give more control over what UDP ports RTPS uses: (:ghpr:`4655`) - For RTPS Discovery: - Added :cfg:val:`[rtps_discovery]SedpPortMode=probe`, which will use ports similar to how the RTPS specification defines them. This uses the existing port parameter properties for SPDP and a new one, :cfg:prop:`[rtps_discovery]DY`. - Added :cfg:prop:`[rtps_discovery]SpdpPortMode` as an alias to the now deprecated :cfg:prop:`[rtps_discovery]SpdpRequestRandomPort`. - Added :cfg:prop:`[rtps_discovery]SpdpMulticastAddress`, :cfg:prop:`[rtps_discovery]Ipv6SpdpMulticastAddress`, :cfg:prop:`[rtps_discovery]SedpMulticastAddress`, and :cfg:prop:`[rtps_discovery]Ipv6SedpMulticastAddress` to set the multicast addresses and ports separately on SPDP and SEDP. - See :ref:`here ` for the full overview of port usage. - For RTPS/UDP Transport: - Added :cfg:val:`[transport@rtps_udp]PortMode=probe`, which will use ports exactly as the RTPS specification defines them. This uses new port parameter properties: :cfg:prop:`[transport@rtps_udp]PB`, :cfg:prop:`[transport@rtps_udp]DG`, :cfg:prop:`[transport@rtps_udp]PG`, :cfg:prop:`[transport@rtps_udp]D2`, and :cfg:prop:`[transport@rtps_udp]D3`. - See :ref:`here ` for the full overview of port usage. - All ports calculated using port parameter properties now warn if they overflow the 16 bit integer. - :cfg:val:`[rtps_discovery]SedpPortMode=probe` and :cfg:val:`[transport@rtps_udp]PortMode=probe` might make :ref:`config template customizations ` unnecessary. - Added :ghfile:`dds/OpenDDSConfigWrapper.h` and :ghfile:`dds/OpenDDSConfigWrapper.idl`. (:ghpr:`4659`) - These files will provide defaults for various configuration macros. - These files should be included in preference to ``dds/OpenDDSConfig.h`` - Added a new data member, ``monotonic_timestamp`` to the ``InternalThreadBuiltInTopic`` IDL struct. (:ghpr:`4677`) - ``monotonic_timestamp`` is the time of the sample was written (time of last update of this instance) on the monotonic clock. - On systems that don't support a monotonic clock, this will be the same value as the corresponding ``SampleInfo``'s ``source_timestamp``. - The ParticipantLocation BIT instance is now published before participant discovery completes. (:ghpr:`4693`) - Applications can use ParticipantLocation to get notified that discovery is in progress. The spec-defined Participant BIT won't be published until participant discovery is complete. - The Info Destination submessage is now used if present in incoming SPDP messages (:ghpr:`4710`) - The ParticipantLocation BIT has a new data member: the SPDP user tag of the peer (0 if none present) (:ghpr:`4711`) - Also added the SPDP user tag to outbound messages which are directed to a specific destination - :cfg:prop:`[rtps_discovery]ResendPeriod` now accepts fractions of a second. (:ghpr:`4712`) - OpenDDS now sends pre-emptive (pre-association) acknacks in a form that RTI Connext understands. (:ghpr:`4735`) - Pre-association acknacks now fall off like heartbeats. (:ghpr:`4735`) Platform Support and Dependencies ================================= - ACE/TAO - Added support for building with `ACE 8.0.0 / TAO 4.0.0 `__. - Updated ACE 6/TAO 2 from 6.5.20 to `6.5.21 `__. - CMake - Allow using the ACE/TAO master branch which now requires C++17. (:ghpr:`4618`) - Building with CMake - Visual Studio now defaults to using at least C++11 with ACE 6/TAO 2 instead of C++03. (:ghpr:`4618`) - Fixed :ghissue:`configure error <4645>` when using :cmake:var:`OPENDDS_JUST_BUILD_HOST_TOOLS` with CMake <3.28. (:ghpr:`4646`) Removals ======== - Removed ``OPENDDS_IGNORE_OPENDDSCONFIG_H_FILE`` macro. (:ghpr:`4687`) - Users manually configuring a build will need to create ``dds/OpenDDSConfig.h`` which may be empty. Fixes ===== - When :cfg:prop:`DCPSThreadStatusInterval` is enabled, threads that run the ACE Reactor now use timers instead of a time-limited ``select()`` system call to update the ``InternalThreadBuiltInTopic``. (:ghpr:`4677`) - This allows the ``InternalThreadBuiltInTopic`` to be updated accurately on systems that suspend/resume and are configured for boottime timers. - :cfg:prop:`[rtps_discovery]MaxSpdpSequenceMsgResetChecks` is recognized again. (:ghpr:`4696`) - RtpsRelay: Recognize clients that are using different IP addresses for SPDP and SEDP. (:ghpr:`4718`) - Fixed memory leak of remote locators in the RTPS/UDP transport. (:ghpr:`4731`) Documentation ============= - Documented :option:`RtpsRelay -LogHttp`, :option:`RtpsRelay -AdmissionControlQueueSize`, and :option:`RtpsRelay -AdmissionControlQueueDuration`. (:ghpr:`4699`) - Documented :ref:`SPDP ` and :ref:`SEDP `. (:ghpr:`4699`) .. _v3_28_1: ******* v3.28.1 ******* Released 2024-05-02 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - Added :cmake:var:`OPENDDS_COMPILE_WARNINGS` and ``configure`` option ``--compile-warnings=[WARNING|ERROR]`` to enable additional compiler warnings and treating them as errors. (:ghpr:`4558`) - Add a ``configure`` script option for MPC options requiring a value. (:ghpr:`4574`) - For example, ``./configure --mpc:value_template build_flags+="-Wall -Werror"``. Platform Support and Dependencies ================================= - Building with CMake - Fixed CMake saying it's missing the ACE library when using :cmake:var:`OPENDDS_ACE_TAO_SRC` with an ACE/TAO outside of the build directory. (:ghpr:`4604`) Removals ======== - Values passed to the configure script via ``--mpcopts`` are no longer split on spaces. (:ghpr:`4574`) - For example, ``./configure --mpcopts="-value_template build_flags+=-Wall -Werror"`` must now be written as ``./configure --mpcopts=-value_template --mpcopts="build_flags+=-Wall -Werror"``. Fixes ===== - Fixed incorrect usage of OpenSSL in ``gov_gen`` application. (:ghpr:`4591`) - Fix bug where ``Service_Participant::type_object_encoding`` doesn't return configured value. (:ghpr:`4593`) - Do not send heartbeats during a fragmented send in ``rtps_udp``. (:ghpr:`4603`) Documentation ============= - Added :cfg:prop:`[transport@rtps_udp]send_buffer_size` and :cfg:prop:`[transport@rtps_udp]rcv_buffer_size`. (:ghpr:`4602`) .. _v3_28_0: ******* v3.28.0 ******* Released 2024-04-16 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - Added an XCDR2 value writer that can be used to serialize static and dynamic samples to XCDR2 encoding format. (:ghpr:`4421`) - Added utility to :ref:`flatten the index ` to a multi-dimensional array represented by dynamic data. (:ghpr:`4421`) - A new header, ``dds/OpenDDSConfig.h`` is generated by configure or CMake. (:ghpr:`4482`, :ghpr:`4498`) - Users manually configuring a build will need to create this file, which may be empty, or add ``#define OPENDDS_IGNORE_OPENDDSCONFIG_H_FILE`` to their ``ace/config.h`` file. - See :ghfile:`dds/OpenDDSConfig.h.in` for details. - ``ConfigStore`` - Converted the transport and discovery loading and ``domain`` section to use ``ConfigStore``. (:ghpr:`4488`, :ghpr:`4475`, :ghpr:`4469`, :ghpr:`4454`) - OpenDDS can now be configured with environment variables. (:ghpr:`4491`) - See :ref:`config-environment-variables` for details. - OpenDDS now supports multiple config files. (:ghpr:`4505`) - See :ref:`config-store-keys` for details. - The ConfigStore is available in Java. (:ghpr:`4515`) - The ``@value(x)`` annotation is now supported on IDL enumerators when using the IDL-to-C++11 mapping. (:ghpr:`4519`) - See :ref:`xtypes--anno-value` for details. - The IDL for the Shapes example was updated for interoperability. (:ghpr:`4528`) - Added :cfg:prop:`[rtps_discovery]SpdpUserTag`. (:ghpr:`4533`) - The data type for the OpenDDS-specific Built-in ParticipantLocation Topic now includes the lease duration. (:ghpr:`4545`) - See :ref:`built_in_topics--openddsparticipantlocation-topic` for details. - Allow compile-time configuration of CLOCK_BOOTTIME as the clock used for timers (:ghpr:`4568`) - If the platform supports it, this can be done using ``--boottime`` when building with the configure script or :cmake:var:`OPENDDS_BOOTTIME_TIMERS` when building with CMake. Platform Support and Dependencies ================================= - Building with CMake - Fixed :ghissue:`building with CMake and Apple Clang on macOS <4478>` without setting ``-DCMAKE_CXX_STANDARD=14`` or using ACE 6. (:ghpr:`4481`, :ghpr:`4487`) - Added support for C++03 and some support for building ACE/TAO with the same compiler and C++ standard as OpenDDS. (:ghpr:`4481`, :ghpr:`4487`) - Fixed :ghissue:`building release builds on Windows at the same time as ACE/TAO <4531>` (:ghpr:`4535`) - Fixed :ghissue:`ACE/TAO build not getting Xerces path <4375>` when using :cmake:var:`OPENDDS_XERCES3`. (:ghpr:`4572`) Fixes ===== - The ValueReader and ValueWriter interfaces now use ``ACE_CDR::Fixed`` as the type of IDL fixed values (:ghpr:`4466`) - CMake Config Package - Made :cmake:func:`opendds_target_sources(INCLUDE_BASE)` work correctly in more cases, specifically involving generating an export header. (:ghpr:`4489`) - Added :cmake:func:`opendds_target_sources(EXPORT_HEADER_DIR)` and :cmake:func:`opendds_export_header(DIR)` as part of these changes. - Fixed bug so ConfigStore entries generated by SEDP are cleaned up. (:ghpr:`4540`, :ghpr:`4485`) - Fixed bug where various RtpsDiscoveryConfig setters didn't set. (:ghpr:`4540`, :ghpr:`4485`) - Fixed bug where ``vread`` for unions used uninitialized memory. (:ghpr:`4544`) - Fixed bug where an RTPS Reader gets stuck when heartbeat advances. (:ghpr:`4548`) - XCDR2 KeyOnly serialization of union that has no key now has a delimiter for appendable and mutable extensibility. (:ghpr:`4554`) Documentation ============= - :ref:`config` (:ghpr:`4564`, :ghpr:`4570`, :ghpr:`4467`, :ghpr:`4588`) - Restructured configuration properties so they can be linked to directly. Also reviewed each property description to correct or add missing context as needed. - :ref:`introduction` (:ghpr:`4467`) - Added :ref:`plugins` to explain generally how discovery, transports, and security libraries must be initialized when statically linking these libraries. - Added summaries of important information needed to use the discovery and transport libraries. - :ref:`qos` (:ghpr:`4520`) - Added :ref:`qos-property`, :ref:`qos-data-representation`, and :ref:`qos-type-consistency-enforcement`. - Every policy now has a box that says if it's mutable, if it affects writer-reader association, and a link to the spec definition. Also removed large default value tables and put the default values in these boxes. - Added links to the QoS policies. - Added definitions for :term:`instance`, :term:`unregister`, and :term:`dispose` to the glossary. (:ghpr:`4520`) - :ref:`sec` - Added summary of important information needed to use the security library. (:ghpr:`4467`) - Moved :ref:`fnmatch-exprs` into an "annex" file so it can be common between security and partitions QoS. (:ghpr:`4520`) - ``ConfigStore`` - Add :ref:`configuration capabilities ` to DevGuide. (:ghpr:`4556`) .. _v3_27_0: ******* v3.27.0 ******* Released 2024-02-07 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - Complete interfaces for dealing with DynamicData and DynamicTypes. (:ghpr:`4320`, :ghpr:`4339`) - It is now possible to specify the :ref:`validity for individual publish/subscribe actions ` in DDS Security Permission documents. This is an OpenDDS extension. (:ghpr:`4344`) - Building with CMake - Added new options for :ref:`how to get ACE/TAO `. (:ghpr:`4346`) - CMake Config Package - Added :cmake:var:`OPENDDS_ACE_VERSION` and :cmake:var:`OPENDDS_TAO_VERSION`. (:ghpr:`4346`) - Add a warning that ``@optional`` is not supported. (:ghpr:`4355`) - Convert discovery configurations (``repository``, static discovery, ``rtps_discovery`` including templates) to key-value store. (:ghpr:`4360`, :ghpr:`4361`, :ghpr:`4426`, :ghpr:`4411`, :ghpr:`4276`, :ghpr:`4347`) - Convert ICE configuration to key-value store. (:ghpr:`4360`, :ghpr:`4361`, :ghpr:`4426`, :ghpr:`4411`, :ghpr:`4276`, :ghpr:`4347`) - Change ``transport_template`` and ``rtps_discovery`` template processing to not generate new keys. (:ghpr:`4360`, :ghpr:`4361`, :ghpr:`4426`, :ghpr:`4411`, :ghpr:`4276`, :ghpr:`4347`) Platform Support and Dependencies ================================= - Improved support for configure script detection of clang on Linux (:ghpr:`4449`) - When using Visual C++, OpenDDS can now be configured using ``--std=c++NN`` (NN = 17 or 20). (:ghpr:`4452`) Fixes ===== - Updated the :ref:`read ` and :ref:`write ` semantics of DynamicData for union, expandable collections (sequence and string), and optional member of an aggregated type. (:ghpr:`4278`) - Fixed memory leak where instances were not cleaned up with :ref:`exclusive ownership `. (:ghpr:`4343`) - Removed the special handling for sequence members with length code of 5,6, or 7. (:ghpr:`4376`) - Reading data from a dynamic data object for a primitive type now must use ``MEMBER_ID_INVALID`` id. (:ghpr:`4376`) - ``create_datawriter`` and ``create_datareader`` check if the topic belongs to the same participant as the publisher/subscriber. (:ghpr:`4398`) - Fixed uninitialized ``durability_service`` in Topic QoS when using QoS-XML. (:ghpr:`4424`) - Fixed a bug where compiling IDL with ``-Lc++11 -Gequality`` produced code outside of a namespace that didn't compile. (:ghpr:`4450`) - ``SedpLocalAddress`` now defaults to :cfg:prop:`DCPSDefaultAddress` to behave like ``SpdpLocalAddress`` and ``local_address``. (:ghpr:`4451`) Notes ===== - ``TheParticipantFactory*`` will now return a null pointer when :ref:`DCPSConfigFile` doesn't exist. (:ghpr:`4372`) .. _v3_26_1: ******* v3.26.1 ******* Released 2023-11-14 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Fixes ===== - Building with CMake - Fixed :ghissue:`4328`, where each run of CMake effectively always appended the MPC features to ``default.features`` in ACE. (:ghpr:`4330`) - Fixed a corner case in RTPS ParameterList parsing (:ghpr:`4336`) - Reject some types of invalid RTPS DataFrag submessages (:ghpr:`4348`) .. _v3_26_0: ******* v3.26.0 ******* Released 2023-10-23 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - OpenDDS can now be built using CMake for most common scenarios. (:ghpr:`4203`, :ghpr:`4314`) - This is still considered somewhat experimental as it doesn't support :ref:`everything that an MPC-built OpenDDS currently can `. - See :ref:`cmake-building` for details. - Convert transport configurations (``rtps_udp``, ``multicast``, ``shmem``, ``tcp``, ``udp``) uses key-value store. (:ghpr:`4162`, :ghpr:`4270`, :ghpr:`4272`, :ghpr:`4241`, :ghpr:`4242`, :ghpr:`4243`, :ghpr:`4249`, :ghpr:`4255`) - CMake Config Package - Added :cmake:func:`opendds_install_interface_files` to help install IDL files and the files generated from them. (:ghpr:`4203`, :ghpr:`4314`) - Added :cmake:var:`OPENDDS_HOST_TOOLS` and :cmake:var:`OPENDDS_ACE_TAO_HOST_TOOLS` to allow cross compiling applications with both MPC and CMake-built OpenDDS. (:ghpr:`4203`, :ghpr:`4314`) - :cmake:func:`opendds_target_sources`: - Added :cmake:func:`opendds_target_sources(INCLUDE_BASE)` to preserve the directory structure of the IDL files for compiling the resulting generated files and installing everything using :cmake:func:`opendds_install_interface_files`. (:ghpr:`4203`, :ghpr:`4314`) - Added :cmake:func:`opendds_target_sources(USE_VERSIONED_NAMESPACE)` as a shortcut to the ``-Wb,versioning_*`` IDL compiler options. (:ghpr:`4203`, :ghpr:`4314`) - Support sending DynamicDataAdapter sample via DynamicDataWriter (:ghpr:`4226`) - Added export macro to ConditionImpl (:ghpr:`4295`) Deprecations ============ - Deprecated :cmake:var:`OPENDDS_FILENAME_ONLY_INCLUDES` in favor of :cmake:func:`opendds_target_sources(INCLUDE_BASE)`. (:ghpr:`4203`, :ghpr:`4314`) Fixes ===== - Improved the :ref:`subject name ` parsing to better conform to the DDS Security spec. (:ghpr:`4201`) - The order of attributes in subject names is now significant when comparing them. - Remove from TypeLookupService when remote endpoint is removed from SEDP (:ghpr:`4216`) - WaitSet is now notified when DataWriter liveliness is lost. (:ghpr:`4223`) - ICE doesn't use IPv4-mapped IPv6 addresses anymore. (:ghpr:`4230`) - Efficiency: Remove per-element locking in JobQueue (:ghpr:`4253`) - RtpsRelay: fixed bug in record_activity's use of remove in GuidAddrSet (:ghpr:`4254`) - Fix warnings in typeobject_generator when using TAO 3 (:ghpr:`4262`) - Fix null pointer when participant is absent when updating locators (:ghpr:`4265`) - Initialize variables in TypeObject to silence warnings (:ghpr:`4292`) - RtpsRelay: Use ACE_Message_Block's locking strategy for cached SPDP to fix tsan warning (:ghpr:`4293`) - Fix tsan warning in ReactorTask (:ghpr:`4298`) Documentation ============= - Removed documentation for ``-Grapidjson`` option of ``opendds_idl`` that was removed in 3.20.0 (:ghpr:`4231`) - Remove reference to mailing lists (:ghpr:`4234`) - Restructured parts of :ref:`dds_security` page and expanded documentation of some XML security document elements. (:ghpr:`4281`) - OS-specific instructions will now be automatically selected based on the browser's user agent. (:ghpr:`4281`) - OMG specification section references are now links to that section in the specification PDF. (:ghpr:`4281`) - Move build and install instructions to DevGuide (:ghpr:`4294`) - Incorporate the quick start guides, FAQ, and shapes demo into the DevGuide. (:ghpr:`4297`) Notes ===== - Using Perl 5.38.0 might prevent TAO from building properly, see `here `__ for details. .. _v3_25_0: ******* v3.25.0 ******* Released 2023-07-20 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - The Observer interface now has support for dispose and unregister. (:ghpr:`4137`) - OpenDDS now stores configuration information in a key-value store. (:ghpr:`4138`, :ghpr:`4134`, :ghpr:`4151`) - Configuration values can be set via API, config file, or command line. - Currently applies to the `common` section and common transport configuration. - Added ``encode_to_string``, ``encode_to_bytes``, ``decode_from_string``, and ``decode_from_bytes`` to ``TypeSupport``. (:ghpr:`4144`, :ghpr:`4122`, :ghpr:`4133`, :ghpr:`4135`) - These methods convert samples to and from other formats. - Currently only ``OpenDDS::DCPS::JSON_DATA_REPRESENTATION`` is supported. - Add ``-Gequality`` option to opendds_idl to generate ``==`` and ``!=`` for structs and unions. (:ghpr:`4154`) - The members of the struct or union must have a type that could appear in a DDS topic and be supported by opendds_idl. - The motivation for this change was to make the generated code more useful as many users go on to define these operators. - CMake Config Package - Added :ref:`executable targets `. (:ghpr:`4160`) - :cmake:var:`OPENDDS_CMAKE_VERBOSE` output has been expanded, but now accepts a list of categories to control how much is logged. (:ghpr:`4160`) - Added :cmake:func:`opendds_export_header` to generate an export header. (:ghpr:`4160`) - :cmake:func:`opendds_target_sources`: - Added :cmake:func:`opendds_target_sources(GENERATE_SERVER_SKELETONS)` to allow ``tao_idl`` to generate code for CORBA servers. (:ghpr:`4140`) - Added :cmake:func:`opendds_target_sources(AUTO_LINK)` as a fine-grained version of :cmake:var:`OPENDDS_AUTO_LINK_DCPS`. (:ghpr:`4140`) - Added :cmake:func:`opendds_target_sources(SKIP_TAO_IDL)` to disable ``tao_idl``. (:ghpr:`4140`) - Added :cmake:func:`opendds_target_sources(SKIP_OPENDDS_IDL)` to disable ``opendds_idl``. (:ghpr:`4140`) - Added :cmake:func:`opendds_target_sources(USE_EXPORT)` to allow overriding the generated export header with an existing one. (:ghpr:`4160`) - Libraries and features can be passed to ``find_package(OpenDDS COMPONENTS)`` to change what is required. (:ghpr:`4160`, :ghpr:`4140`) - See :ref:`cmake-components` for details. Security ======== - Fixed null pointer exception caused by RTPS Parameters with incorrect zero size. (:ghpr:`4197`) Fixes ===== - CMake Config Package - Made linking dependencies and macro definitions closer match using MPC with OpenDDS and TAO. (:ghpr:`4140`) - Fixed issues with passing ``OPENDDS_IDL_OPTIONS -SI`` to ``opendds_target_sources``. (:ghpr:`4140`) - Fixed issue deserializing bounded sequences with JSON (:ghpr:`4150`) - The deserialization will fail if the JSON input contains more elements than the bounded sequence can hold. - Updated the RtpsRelay's tracking of client IP addresses so they are removed when no longer used. (:ghpr:`4202`) - The RtpsRelay configuration option -MaxAddrSetSize was renamed to -MaxIpsPerClient Documentation ============= - Moved various markdown files into the Sphinx documentation so that they are now included along with the Developer's Guide: (:ghpr:`4139`) - ``INSTALL.md`` is now :doc:`/devguide/building/index`. - ``docs/dependencies.md`` is now :doc:`/devguide/building/dependencies`. - ``docs/cmake.md`` is now :doc:`/devguide/building/cmake`. - ``docs/android.md`` is now :doc:`/devguide/building/android`. - ``docs/ios.md`` is now :doc:`/devguide/building/ios`. - Restructured how the documentation is presented to cleanly separate the Developer's Guide and internal documentation. (:ghpr:`4139`) - Added a :doc:`proper main page `. (:ghpr:`4139`) - Added :doc:`/glossary`. (:ghpr:`4139`) - In addition to :ghfile:`NEWS.md`, started adding release notes to :doc:`/news`. (:ghpr:`4125`) Notes ===== - CMake Config Package - ``OPENDDS_TARGET_SOURCES`` is now called ``opendds_target_sources``. (:ghpr:`4140`) - CMake macros and functions names are case insensitive, so this should have no effect on CMake code. .. _v3_24_2: ******* v3.24.2 ******* Released 2023-06-30 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Security ======== - Fixed a vulnerability in the rtps_udp transport where an acknowledgement sequence number beyond the maximum expected by the writer leads to an assert and incorrect state. (:ghpr:`4155`) - Thanks to Seulbae Kim (@squizz617) for discovering this. Fixes ===== - Fixed leaked shared memory by the shared memory transport. (:ghpr:`4171`) - For a 100% fix, a new ACE version including https://github.com/DOCGroup/ACE_TAO/pull/2077 must be used. - Fixed bug introduced by :ghpr:`4120` (:ghpr:`4180`, :ghpr:`4184`) - The fix introduced in #4120 causes the TransportClient to silently drop messages when the client's guid is not initialized. This causes issues for TransportClients that send messages to the transport before association. One such example is a DataWriter with liveliness configured. The DataWriter will send liveliness messages to the transport (which will be dropped) and hang waiting for them to be delivered. - The solution was set the guid for a TransportClient before calling any method that uses the guid. Notes ===== - :ghpr:`4180` required changes in InfoRepoDiscovery's IDL, so InfoRepo compatibility with older versions has been broken. .. _v3_24_1: ******* v3.24.1 ******* Released 2023-04-22 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Fixes ===== - Fixed compile warnings in TypeSupport that can happen with GCC and ``-O2`` or higher (:ghpr:`4117`) - Fixed compile error in TypeSupport for IDL that contains a typedef of a typedef (:ghpr:`4117`) - Fixed bug in the tcp transport where readers and writers can fail to associate (:ghpr:`4120`) - Fixed issue in some headers that could leak ``#pragma pack (push, 8)`` into user code on Visual Studio (:ghpr:`4123`) - Fixed theoretical infinite loop in rtps_udp transport code (:ghpr:`4124`) Documentation ============= - Removed invalid links and references in README and the Developer's Guide and fixed other minor issues (:ghpr:`4115`, :ghpr:`4116`, :ghpr:`4121`, :ghpr:`4126`) - Changed theme used by the Sphinx documentation to make the Developer's Guide easier to navigate (:ghpr:`4127`) - Added copy buttons to embedded code and code-like examples (:ghpr:`4127`) .. _v3_24_0: ******* v3.24.0 ******* Released 2023-04-11 Download :ghrelease:`this release on GitHub `. Read `the documentation for this release on Read the Docs `__. Additions ========= - The OpenDDS Developer's Guide is now available at https://opendds.readthedocs.io/ (:ghpr:`4100`, :ghpr:`4101`, :ghpr:`4102`, :ghpr:`4103`, :ghpr:`4104`, :ghpr:`4105`, :ghpr:`4051`, :ghpr:`4092`, :ghpr:`4094`, :ghpr:`4095`) - The Sphinx/reStructuredText source for this new format is now located in the repo at :ghfile:`docs/devguide` - DOCGroup ACE6/TAO2 is now the default ACE/TAO for OpenDDS, OCI ACE/TAO is no longer supported (:ghpr:`4069`) - Dynamic content subscription (:ghpr:`3988`) - This allows ``DynamicDataReader``\s to use ``QueryCondition`` and ``ContentFilteredTopic`` and allows ``DynamicDataWriter``\s to do filtering on behalf of matched ``DataReader``\s that use ``ContentFilteredTopic``. - ``DynamicData`` - Can now read and write enum members as strings (:ghpr:`4022`) - ``DynamicDataImpl`` now uses lazy initialization to reduce memory usage (:ghpr:`4024`) - ``get_int64_value`` and ``get_uint64_value`` can now cast from different types (:ghpr:`4078`) - Added aliases for IDL types from XTypes spec such as ``DDS::UInt32`` (:ghpr:`3394`) - See :ghfile:`dds/DdsDcpsCore.idl` for all of them. - Added PublicationMatchedStatus Current Count To RtpsRelay Statistics (:ghpr:`4006`) - Allow reassembly of overlapping fragment ranges in RTPS (:ghpr:`4035`, :ghpr:`4047`) - Added hardening features to RtpsRelay (:ghpr:`4045`) - These are configured with the new options ``-MaxAddrSetSize`` and ``-RejectedAddressDuration``. - Can now cross-compile on macOS (:ghpr:`4048`) - Added ``OPENDDS_AUTO_LINK_DCPS`` and ``OPENDDS_USE_CORRECT_INCLUDE_SCOPE`` global options to the CMake package (:ghpr:`4071`) - Expanded support for using C++ keywords in IDL (:ghpr:`4073`) - IDL file and generated TypeSupport.idl can now be in different directories (:ghpr:`4077`) - Improved support for anonymous types in unions branches (:ghpr:`4078`) Fixes ===== - Fixed ``rtps_relay_address_change`` deadlocks (:ghpr:`3989`) - Fixed RtpsUdpTransport data race from ``relay_stun_mutex_`` (:ghpr:`3990`) - Fixed invalid socket handles in RtpsUdpTransport (:ghpr:`4002`) - Fixed index increment in ``GuidPartitionTable::prepare_relay_partitions`` (:ghpr:`4005`) - Improved reliability of the shared memory transport (:ghpr:`4028`) - Fixed a bug in content filtering with enum comparisons on serialized samples (:ghpr:`4038`) - Secure writers and readers in same participant can now associate (:ghpr:`4041`) - Fixed transport config and transport instance derived from template conflicting (:ghpr:`4058`) - Fixed issue with using ``-o`` in ``tao_idl``/``opendds_idl`` options in ``OPENDDS_TARGET_SOURCES`` and those directories are now automatically included (:ghpr:`4071`) - XTypes (:ghpr:`4078`) .. _3-24-0-typeobject-fix: - ``TypeObject``\s struct and union members used to be sorted by member ID, but they are now sorted by declaration order as the XTypes spec calls for. By default member IDs increment starting at 0, and in that case the ``TypeObject``\s will be the same. If ``@autoid(hash)``, ``--default-autoid hash``, or ``@id(ID)`` are being used then the order could be different. This could cause some reader/writer matching incompatibility with older versions of OpenDDS: - Topics with final and appendable structs will no longer match. - If ``DISALLOW_TYPE_COERCION`` QoS is being used, then all topics where the order differ will not longer match. Note that this is true for any time the type hash changes. - Pass the :option:`opendds_idl --old-typeobject-member-order` to use the non-standard order. - The size of XCDR2 member parameters in mutable structs and unions is now correctly interpreted when the "length code" is 5, 6, or 7. - This is an optimization that OpenDDS doesn't serialize samples with, so this could only be an issue when dealing with samples from other DDS implementations. - ``DynamicDataImpl`` (``DynamicData`` made by ``DynamicDataFactory`` that can be passed to ``DynamicDataWriter``): - ``get_member_id_at_index`` now returns ids for members that haven't been initialized yet. - Fixed incorrect serialization of keyed unions for instance registration, disposal, and unregistration samples. - Fixed errors from serializing some cases of arrays and sequences. Notes ===== - Release files will only be uploaded to GitHub from now on - ``OpenDDS::DCPS::RepoId`` has been removed, if needed use ``OpenDDS::DCPS::GUID_t`` instead (:ghpr:`3972`) ************** Older Releases ************** Older releases can be found in :ghfile:`NEWS.md`