So far the OpenSplice DDS durability service was not able to handle the so-called "split-brain syndrome". A split-brain syndrome can be described as the situation in which two different nodes (possibly) have a different perception on (part of) the set of historical data. This split-brain occurs when two nodes or two sets of nodes (i.e. two systems) that are participating in the same DDS domain have been running separately for some time and suddenly get connected to each other. Equally this syndrome arises when nodes re-connect after being disconnected for some time. Applications on these nodes may have been publishing information for the same topic in the same partition without this information reaching the other party. Therefore their perception on the set of data will be different. Because of the new emerging environments in which OpenSplice DDS is deployed, the durability service has been extended with additional functionality to support the alignment of historical data when two nodes get connected. Of course, the basic use case of a newly started node joining an existing system is supported, but in contradiction to that situation there is no universal truth in determining who has the best (or the right) information when two already running nodes (re)connect. When this situation occurs, the durability service now provides the possibility to configure its behaviour in this situation in the form of so-called merge policies. The following options are supported:
The RunTime System Monitor (RTSM) is a commandline tool that allows monitoring of metrics and statistics provided by OpenSplice. It can show delta's on for example reader-statistics and reset them. The tool is currently in a beta-stage and is only delivered with Linux-based builds. The tool can be driven through an interactive menu, or by passing options/commands through the command line or a file.
The tool contains explanation of the available options, which can
be displayed by calling 'rtsm -h'. If you have a domain running
with the name "OpenSpliceWithStats", where statistics for readers
are enabled, you can issue the following command:
> rtsm -domain OpenSpliceWithStats -count 5 -readerSort -exit
It will first set the domain to "OpenSpliceWithStats". It will set
the number of iterations to show statistics to 5, and then run a
readerSort. When finished it will exit.
The same can be achieved in the interactive mode by calling:
> rtsm
Then type '4
Then type '17
Then type the domain-name: 'OpenSpliceWithStats
Then type '13
Then type the count: '5
Then type '0
Then type '1
Then, when finished, type '0
Interactive and commandline-mode can also be combined.
When rebuilding the CORBA Java interface, PERC may be used instead of the Sun JDK. Source the percenv.sh script and set SPLICE_JDK=perc before running the OpenSplice release.com. This will also cause the example build and run scripts to use PERC.
The durability service now has the capability to discover namespaces from other nodes at runtime. This can significantly reduce configuration effort in large-scale systems, while also enabling OpenSplice to run in more dynamic environments.
For C#, there is now a signed and versioned Assembly called dcpssacsAssembly.dll, created from the the dcpssacs.dll module, which is added to the Global Assembly cache. In this release, as part of the installation, this is added to the global assembly cache.
See the OpenSplice Documentation Set for detailed information.
Implementation available for the coherent access PRESENTATION QoS policy for INSTANCE (existing)
and TOPIC (new) access_scopes
See the OpenSplice Documentation Set for detailed information.
This functionality allows an application to dispose of all of the instances
for a particular topic without the overhead of using an individual
dispose call for each instance individually. Its effect is equivalent to
invoking a separate dispose operation for each individual instance
on the DataWriter that owns it
See the OpenSplice Documentation Set for detailed information.
Added Windows 7 32 bit support with Microsoft Visual Studio 2008.
OpenFusion Real Time ORB Java Edition is now tested with OpenSplice DDS. Additional examples have been provided to allow users to get started quickly. In a future release documentation updates will be made to the manuals.
With Linux or Unix platforms, it is possible to specify the symbolic name of a networking interface to be used, like eth0, eth1, wlan0 etc. In this release this concept is now supported on Windows using "friendly names", which are unique symbolic names tied to each interface.
OpenSplice DDS V5.x is compiled with JDK1.6, but can run on a Java 5 JRE as the compile flag -source 1.5 is set
OpenSplice DDS can be configured to use zlib compression www.zlib.net to compress network packets. See the OpenSplice Documentation set for further information.
OpenSplice DDS can be configured to use an external reporting library. See the OpenSplice Documentation set for further information. This functionality is not available on the embedded platforms (VxWorks or Integrity)
A DomainId consists of a string that represents either a URI to the location of the configuration file (e.g. 'file:///projects/DDS/ospl.xml') or the Domain name as specified in the configuration file. The actual value returned is dependent of the value used when creating the DomainParticipant, also see the DomainParticipantFactory create_participant operation. If a DomainParticipant is created using the Domain name then it will also return the Domain name and visa-versa when created using a URI then the URI will be returned by this operation. The configuration file, identified by the URI, specifies all configuration details of the Domain
In the V4 series OpenSplice DDS used system wide environment variables. With OpenSplice DDS V5.1, these are not set. Note: Users will require OpenSplice DDS PowerTools 2.3 to cope with this change.
The existing topology-discovery mechanism of OpenSplice's Networking Service is extended with a dynamic capability to discover and maintain all relevant nodes in large-scale (WAN) systems. In such large-scale systems, static-unicast node pre-definition is not practical nor sufficient and dynamic-multicast based discovery is typically not supported or even allowed. The new dynamic discovery is based on overlaying the physical network with a notion of 'Roles' and 'Scopes' that represent 'area-of-interest regions' within the WAN domain such that only nodes within the defined scope-of-interest will be automatically discovered and their state maintained. In this way, the scalability of the dynamic DDS-system is ensured whilst minimizing the impact on the overhead of the required discovery process.
For more information see the NetworkService elements Role, Discovery, Scope and ProbeList in the Deployment Guide.
| Report ID. | Description |
|---|---|
| dds2362 |
Deadlock possible with shutdown of splice daemon Clean up code in the splice daemon could become locked due to a race condition. Solution: Re-factored the clean up process to eliminate the race condition. |
|
5097/ dds729 |
Splice daemon may consume 100% CPU. When using multiple domains on Windows, services and application processes sometimes requested access to a domain from the wrong splice daemon. This caused unpredictable behaviour in both services and user applications. Solution: As there is only one splice daemon per domain the domain name has been made part of the name of the pipe making the pipe name unique. Furthermore, an illegal request from the Tuner tool to the splice daemon pipe on initialisation has been removed. |
|
7162/ dds2164 |
OSPL takes a long time to stop. Update on previous fix to allow handling of 0.0 instead of just 0 for time argument. Solution: Corrected parameter handling. |
|
7319/ dds2285 |
Using dispose_all_data can cause the splice daemon to crash When a remote node calls a dispose on a local topic instance that does not exist then splice daemon will crash Solution: Check to ensure local topic instance exists and if not then queue the dispose request until it does. |
| Report ID. | Description |
|---|---|
|
7444/ dds2384 |
Incorrect memory allocation causing ospl deamon to stop immediately after starting The implementation of the code to externally monitor OSPL instances on local/remote node used strlen incorrectly causing memory corruption. This can have the effect of causing the ospl daemon to stop immediately after starting. Solution: Remove the use of strlen and use MAX_HOST_NAME_LENGTH variable |
| dds2180 |
Windows cannot start and stop 2 separate spliceds with separate domains An error occurred starting 2 separate spliceds and domains on the same windows machine. This was because the _ospl_servicePipeName parameter is not unique: When the second spliced is started is uses the same pipe name (and as the max instances param is set to 8) CreateNamedPipe fails because it has exceeded the max instances. Solution: As there is only one splice daemon per domain the domain name has been made part of the name of the pipe making the pipe name unique. |
| Report ID. | Description |
|---|---|
|
7444/ dds2367 |
Problems with OSPL Log Report Plugin The initialize and finalize methods of the report plugin were being called twice. This was because the report plugin registration and unregister had been implemented in 2 different places but were actually only needed in 1 place. This also caused the report method of the report plugin to be called after the finalize method had been called. Solution: Changed implementation to only call report plugin register and unregister once. |
| Report ID. | Description |
|---|---|
|
6494 dds1506 |
Datareaderlistener is still being triggered while the datareader
and all related objects have already been freed When a datareader is being deleted at the same time it is being triggered asynchronously via on_data_available() then the application may crash. This is caused by an incorrect check that validates whether or not a listener thread should be terminated. Solution: The error in the checking algorithm has been repaired. |
| dds1629 |
More helpful error message when using Tuner When using the Tuner, an error message "Supplied URI is not available" would be returned, but this could occur if the URI is not available or the shared memory segment could not be mapped. Solution: The error message has been updated. |
| dds2054 |
Gracefully shutdown OpenSplice on machine shutdown If a machine is shutdown during the operation of OpenSplice, it is possible that OpenSplice will not adequately clean up all temporary resource files. This can be particularly an issue on Windows because the shared memory is represented by a mapping to a physical file and can cause problems restarting the domain. Solution: On Windows, "ospl start" has been improved to check for and remove resource files that do not relate to running processes, prior to starting the domain. In future releases this will be improved to remove OpenSplice processes that may be running but are associated with invalid resources file. |
|
7051 dds2071 |
-n option added to idlpp to override the suffix for the ORB header file include -n <include-suffix> Overrides the suffix that is used to identify the ORB dependent header file (specifying the data model) that needs to be included. Normally the name of this include file is derived from the IDL file name and followed by an ORB dependent suffix (e.g. 'C.h' for ACE-TAO based ORBs). This option is only supported in Corba cohabitation mode for C++. In all other cases it is simply ignored. Example usage: -e .stub.hpp (For a file named 'foo.idl' this will include 'foo.stub.hpp' instead of 'fooC.h', which is the default expectation for ACE-TAO.) |
| dds2081 |
Issues with compliance of tooling over different platforms The tooling delivered with OpenSpliceDDS (like mmstat) did not have the same command-line options on all supported platforms. Solution: The options have been made consistent for all supported platforms. |
|
7068 dds2083 |
Memory leak for arrays When an array was freed, and thus the references contained within that array, the size was incorrectly determined, which caused a memory leak as not all references were freed. Solution: So now when the collection is an array, the size is determined by the maximum size field of its type, which is always set, since an array is always fixed length. |
| dds2128 |
Wireshark plug-in not compliant anymore The Wireshark plug-in is no longer showing correct information with the updates in the network format. Solution: Updated the Wireshark plug-in to correctly interpret the newest networking format. |
|
7162 dds2164 |
OpenSplice takes a long time to stop when using the ospl -f option OpenSplice at least takes multiple seconds to terminate when sending a TERM signal. Solution: Setting the configuration of the already existing ServiceTerminatePeriod to "0.0" will now be interpreted by all OpenSplice services as immediate request to terminate without cleaning up. As a result, all services terminate immediately and do not clean-up anything, except for the shared memory segment that is still destroyed. |
| dds2228 |
Registering a type compiled with idlpp -j option causes JVM crash Calling register_type on TypeSupport classes that have been generated using the "-j" option made the application crash. This was caused by the fact that an internal algorithm did not substitute the name of the type with the by idlpp generated type name. Solution: Extended the internal algorithm to substitute the name. |
| dds2247 |
Code generated by idlpp (C++) for multidimensional array does
not compile The IDL pre-processor did not generate correct code to copy the contents of multidimensional arrays. Solution: Updated idlpp to correctly handle multidimensional arrays. |
|
7272 dds2254 |
Error message not displayed The error message "Description : shmat failed for 1 with errno 22 ()" is unclear. Solution: Updated the error message to show the string representation of the error between parentheses or show "Unknown error" otherwise. |
| dds2274 |
Network communication on Windows does not work in case of multiple network partitions When multiple network partitions were configured for the networking service, communication on Windows did not occur due to a bug in the algorithm that matches partition-topic combinations to a multicast address. Solution: The error in the matching algorithm has been repaired. |
| dds2276 |
Network partition-name conversion to hash results in always the same hash The networking service calculates a hash value for every configured network-partition. Due to an error in the hash algorithm the same hash was calculated for all network-partitions. Solution: The error in the hashing algorithm has been repaired. |
| dds2278 |
Not able to view all DDS nodes When discovery for networking is enabled, the data that is published before the other node has been detected is not forwarded by the networking service even though it does see the information. Solution: During the start-up of the networking service, it will now initially assume there is a remote node available and send the data over the network, before actually starting to rely on discovery. |
|
7319 dds2285 |
Using dispose_all_data can cause the splice daemon to crash Sometimes internal transaction messages were accidently stored as actual application samples after they were handled. Solution: The algorithm now checks whether a message is a transaction message and if so, will not store it anymore. |
|
7329 dds2294 |
IDL Sequences in C# Generated C# classes for a sequence of structures failed to write a sample. Solution: The marshallers for sequence of structures was incorrect and has now been fixed. |
|
7371 dds2304 |
Memory leak when continually registering and unregistering the same instance of a sample. Some piece of administration in shared memory was not freed. Solution: Made sure the administration is freed. |
|
7373 dds2305 |
mmstat does not display valid values for 64-bit architecture The mmstat tool was not able to display memory sizes above the 32-bit boundary, because a 32-bit type was used to store the size. Solution: Updated the type of the field to be 64-bit on 64-bit platforms. |
|
Bugzilla#34/ dds2309 |
Memory growth (leak) in ospl when sending messages with strings in sequences The memory used by ospl as reported by mmstat grows each time a message is sent when the message contains a sequence of strings or a sequence of structures that contain strings. The internal algorithm that generically frees data in shared memory uses the available meta-data to know how to free the data. Due to an error in the meta-data, the algorithm could omit freeing a structure, causing memory leakage. Solution: Fixed the error in the meta-data for sequences. |
| dds2313 |
Application may crash during execution when using sequences The internal algorithm that generically frees data in shared memory uses the available meta-data to know how to free the data. Due to an error in the meta-data, the algorithm could free a structure in the wrong way, causing the application to crash. Solution: Fixed the error in the meta-data for sequences. |
|
7444/ dds2335 |
Multiple instances with the same key Character array fields can be marked to be stored as strings internally (using the pragma cats). When a sample is written in Java, the internal string had rubbish attached to the end of the string. This was caused by the algorithm that copies samples from heap into shared memory since it did not add a '\0' terminator to the string in case the source is a character array causing the middleware to interpret the string up to the first '\0' in memory after the start of the string. Solution: Extended the copy algorithm to add a '\0' terminator at the end of the string. |
| Report ID. | Description |
|---|---|
|
7444/ dds2367 |
Problems with OSPL Log Report Plugin The initialize and finalize methods of the report plugin were being called twice. This was because the report plugin registration and unregister had been implemented in 2 different places but were actually only needed in 1 place. This also caused the report method of the report plugin to be called after the finalize method had been called. Solution: Changed implementation to only call report plugin register and unregister once. |
| Report ID. | Description |
|---|---|
|
7157/ dds2158 |
Bad parameter passing in reportPlugin initialize. The report plug-in function definitions and calls did not comply with API defined in deployment guide Solution: The function definitions have been compliant with the deployment guide. |
|
7270/ dds2251 |
Unable to publish an InternalFlight. Java application crashes during the writing of a sample. The issue was that a size marker used in creating the Java meta data was of type "short", which is too small. Solution: A bug has been fixed in the Java implementation of OpenSplice which restricted the size of the meta model of an IDL component (as signified by a #pragma keylist) to 2^16 : 65536. This has been rectified and the maximum size of an IDL component's meta model is now 2^32 : 4294967296. |
| Report ID. | Description |
|---|---|
|
7247/ dds2229 |
The spliced process goes to 100% load When running on a 64-bit platform, the spliced goes to 100% load in some situations when accessing a virtual memory address above the 32-bit range, because of a wrong cast being done in an internal algorithm. Solution: The wrong cast has been corrected. |
|
7250/ dds2237 |
OSPL unable to create a 4GB shared memory segment When specifying a database size over 2GB in the configuration file, OpenSplice could not be started. This was caused by two things:
Solution: The size is now an unsigned long long for 64-bit platform to solved the first issue. To solved the second issue, a default address of 0x140000000 has been configured for 64bit platforms, but the suitability of this value will vary depending on the size of the database that is required, and also with the process properties at the operating system level. If the address is not suitable, the error log file will describe this. On linux the "pmap" utility when ran with the "-x" option can be used to view the mapping addresses in use by a particular process. A mapping address value is suitable if the addresses that immediately follow it (up to the size of the required database) are not in use. Refer to the OpenSplice_Deployment guide for details of the OpenSplice/Domain/Database/Address attribute. |
| dds2243 |
Topic name for Read/Write access QoS policy interpreted as type name The XML configuration allows for topic access elements ('OpenSplice/Domain/TopicAccess') to be defined which determine whether reader and/or writers are allowed to be created for a specific topic expression (by means of the 'topic_expression' attribute). A bug existed in the implementation of this feature where the topic expression was compared to the type name instead of the topic name. In effect no proper access control could be defined for topics. Solution: The implementation has been changed so that it now compares the topic expression with the topic name instead of the type name. |
| Report ID. | Description |
|---|---|
|
6488 dds1513 |
OpenSplice can be configured to allow a single application to operate in multiple domains |
|
6457 dds1542 |
Generation of additional inappropriate files from idlpp If A.idl depends on B.idl, and A.idl defines a "pragma keylist", then we need to apply idlpp on B.idl too so that BSplDcps.h is generated. However idlpp will also generate BDcps.idl which only contains namespaces and no struct. Solution: idlpp amended to generate only the appropriate files. |
| dds1619 |
DDS shall provide a way to dispose all the instances of a topic in one call
and to notify the receivers in one notification See new features in 5.2 above. |
| dds1929 |
Dynamic namespaces for durability
Solution: OpenSplice DDS now supports more dynamic environments by introducing dynamic namespaces. With a dynamic namespaces, the durability service can determine at runtime if a previously unknown namespace discovered from another node needs to be maintained and\or aligned locally. For more information see the related documentation. |
| dds1958 |
Warning when opensplice is close to exceeding its amount of configured shared memory
Solution: OpenSplice DDS will now print a warning to the ospl-info.log file if the available, non fragmented shared memory is below 10% of the total available shared memory size. This warning will only be printed once. |
| dds2099 |
Process not terminating if several listeners attached to serveral entities Using a domain participant in combination with a listener caused a deadlock situation to occur within OpenSplice DDS in situations where the listener was processing events while the DomainParticipant was already being deleted. The deletion operation would claim a mutex and perform various clean functions including stopping the listener thread and then waiting for it to terminate. Meanwhile the listener thread could be processing some events and require the mutex lock in use by the participant delete function. Solution: Fix the delete function of the participant to release the mutex while waiting for the listener thread to exit and reclaim it once the exit function returned. |
|
7122 dds2131 |
Unclear error reports when osplconf updates the configuration Configuration not parsed properly. Solution: Fixed an error in an XPath expression that is used internally to parse part of the configuration and improved the warning messages that appear in the info-log file. |
| dds2145 |
Developers needed to add dcpssacs.dll to the PATH to use C#
Solution: For C#, there is now a signed and versioned Assembly called dcpssacsAssembly.dll, created from the the dcpssacs.dll module, which is added to the Global Assembly cache. In this release, as part of the installation, this is added to the Global Assembly cache. |
| dds2154 |
SPLICE_ORB environment variable not set In order to build the CORBA C++ example you require the SPLICE_ORB to be set. This is not done in release.com for Unix systems. Solution: Added the variable to release.com. |
| 7131/ dds2157 |
OpenSplice release.com loads jar files at the end of CLASSPATH Solution: script fixed. |
| 7157/ dds2158 |
Incorrect parameter passing in report plugin. Parameter passing in the Report Plugin intialise function was incorrect. Solution: Small code error fixed. |
| 7156/ dds2159 |
Missing report configuration in osplconf. osplconf tool was not up to date with the deployment guide and did not allow some of the configuration items to be set. Solution: Updated the configuration to match the deployment guide. |
| 7158/ dds2160 |
spliced crashes when adding a report plugin Solution: Small code error fixed. |
| dds2163 |
When using the pragma 'cats' in combination with multiple listed fields,
the IDLP Pre-processor would crash and not generate any code There was a bug within the IDL Pre-Processor idlpp which occured when the 'cats' pragma directive was being evaluated and incorrectly take 2 fields from a list. This caused a null pointer to be retrieved from the list in the next iteration, where a valid field was expected, and idl would crash when the pointer was dereferenced. Solution: The double take from the list has been removed. |
| dds2167 |
Example C#Visual Studio Solution and Project files should be valid for both VS2005 and VS2008 In 5.1, the C# example projects would only support Visual Studio 2008 Solution: Projects are now created with Visual Studio 2008. |
| dds2173 |
Coherent updates See new features in 5.2 above. |
| dds2188 |
Builtin topic default QoS incorrect in relation to reliability.max_blocking_time The specification specifies that the max_blocking_time of the reliability QoS should be 100ms. Currently it isset to 0ms. Solution: Updated code to set QoS to 100ms. |
|
7190/ dds2192 |
Instances are unregistered on the DataWriter when its liveliness expires All instances are unregistered on the DataWriter when its liveliness expires, but this is wrong behaviour. It causes write calls with an instance-handle to return PRECONDITION_NOT_MET after liveliness expires. Solution: A DataWriter no longer unregisters its instances when its liveliness expires. A DataReader does reset the ownership of an instance when liveliness of DataWriter expires in case of exclusive ownership. |
|
7186/ dds2204 |
Communication between different subnetworks not supported To be able to communicate between different subnetworks the DontRoute networking service configuration option needs to be set to false for all channels including discovery. Even though the networking service supports this configuration, the configurator tool did not offer this option for discovery. The same goes for other send/receive options that are available for channels. Solution: The configurator has been extended to support all send/receive options for networking discovery as for the channels. |
| Report ID. | Description |
|---|---|
| dds2078 |
Disabled factories default QoS settings not returned. Default Qos settings for factories are not returned if the factory is in a disabled state. If the caller did not initialize the Qos parameter (assuming get_default_qos would do that), then an uninitialized QoS would be returned. Solution: Removed the check for disabled factories, so that they are handled like enabled factories. |
|
7104 dds2108 |
make_hde will not copy host libs for linux cross compile If the host and target operating systems are the same, in this case Linux, but the target architectures are different the make_hde will not copy the host lib's. Solution: Changed the check in the make_hde script. |
| dds2133 |
PATH environment variable corrupted by checkconf script on Windows build
when using Visual Studio 2008 The ospli/bin/checkconf script, which is included by configure, is responsible for checking build requirements and prepares the environment for building OpenSplice. The part of the script that checks the Microsoft toolchain contains an error when Visual Studio 2008 is detected. It uses 'cygpath -d' (line: 186) to translate a path but this returns the windows representation of the path (including c:\). The result is then appended to the Unix PATH environment variable, which uses ':' as a field seperator. This corrupts the PATH variable which causes the build to fail. Solution: Script amended to handle windows paths correctly. |
| dds2165 |
Set default QoS behaviour not compliant with the OMG specification. The factory operations set_default_xxx_qos() (where xxx represents an entity type, i.e. topic, publisher, subscriber, datawriter and datareader) do not work according to the DDS spec when their corresponding XXX_QOS_DEFAULT label is passed as parameter. According to the DDS specification, the set_default_xxx_qos operation should in that case: "The special value XXX_QOS_DEFAULT may be passed to this operation to indicate that the default QoS should be reset back to the initial values the factory would use, that is the values that would be used if the set_default_xxx_qos operation had never been called." In OpenSplice DDS these operations either do nothing and return RETCODE_OK (e.g. set_default_publisher_qos), or return a RETCODE_BAD_PARAMETER (e.g. set_default_subscriber_qos). Solution: Updated the functionality to behave as per the specification. |
| dds2177 |
PartitionID changed to be byte swapped before being sent out over the network |
| Report ID. | Description |
|---|---|
|
7053 dds2046 |
When an application attach listeners, then it does not terminate and just hangs after the main thread finished. Java 'hangs' on exit when not all DDS entities have been deleted. Solution: A shutdown hook is now installed on the JVM. The shutdown hook is installed during the first successful call on the DomainParticipantFactory.get_instance() operation. This shutdown hook will ensure all contained entities of the DomainParticipantFactory are deleted before the final shutdown of the JVM commences. Before this fix the contained entities where deleted during/after the final shutdown of the JVM which caused various JVM resources to be accessed by OpenSplice while they were no longer available. |
|
7141 dds2143 |
Code generation with OSPL IDL pre-processor fails for specific key types The IDL pre-processor rejects usage of character arrays as key fields in IDL. This occurs even though the character array has been marked to be interpreted as a string internally by the middleware via a '#pragma cats' definition. The IDL pre-processor fails to recognize the '#pragma cats' definition during key field validation if it is located in a different module and/or in an included IDL file. Furthermore the IDL pre-processor incorrectly validates character arrays when they are used in combination with typedefs. Solution: The IDL pre-processor now is able to recognize the '#pragma cats' definition regardless of it's location and will also correctly resolve any used typedefs in determining whether or not a key field is a character array. |
|
7140 dds2144 |
TIMEOUT when writing a topic with synchronous reliability activated When activating the synchronous reliability on DataReaders and DataWriters, the write returns an error code 10 (TIMEOUT) even with large timeout (5 secs). Solution: A fix has been implemented to prevent synchronous writers from blocking on ACKs from non-matching readers (i.e. subscribed on other topics). This was because when the writer was created, *all* synchronous readers were injected into its administration. But as the non-matching readers never received messages from this writer, they would never acknowledge and the writer would wait infinitely (until timeout). |
| Report ID. | Description |
|---|---|
|
4838 dds505 |
Shared DataReaders needed for efficiency Applications need facilities that allow them to share one DataReader over multiple processes on the same node. This allows reducing the memory footprint on a node significantly in case a lot of applications are interested in the same data Solution:A new 'share' QoS policy has been introduced in the SubscriberQos and DataReaderQos that allow applications to share these entities. |
| dds1011 |
Not all .bat files in the 'bin' directory of the release use Windows line endings Some .bat files in the 'bin' directory of the Windows release use UNIX-style line endings. Solution:Changed the line-endings of the .bat files to Windows-style line-endings. |
|
6569 dds1541 |
OSPL does not generate default entry of switch of unions in C++ According to the IDL to C++ mapping, the IDL pre-processor should generate a default entry for in case no all the possible values of the switch are defined as cases and no default case is modelled in IDL. Because this is not done, compiling the generated code will show warnings. Solution:A default entry is now generated by the IDL pre-processor to make sure compiling the generated code does not show any warnings. |
|
6556 dds1551 |
User application conflict with cfg_parse operation OpenSplice has a 'cfg_parse' function that is also used a lot in other products. This leads to a name collision when OpenSplice is used in combination with these other products. Solution:The 'cfg_parse' function has been renamed to 'cfg_parse_ospl' to prevent collisions. |
| dds1552 |
Support for abstract domain identification in create_domain_participant OpenSplice V4 and before only support URI as domain ID Solution:A DomainId consists of a string that represents either a URI to the location of the configuration file (e.g. file:///projects/DDS/ospl.xml) or the Domain name as specified in the configuration file. The actual value returned is dependent of the value used when creating the DomainParticipant, also see the DomainParticipantFactory create_participant operation. If a DomainParticipant is created using the Domain name then it will also return the Domain name and visa-versa when created using a URI then the URI will be returned by this operation. The configuration file, identified by the URI, specifies all configuration details of the Domain. |
| dds1677 |
os_threadCreate failed because of wrong stack size If on the system the PTHREAD_STACK_MIN is smaller than OS_STACKSIZE_DEFAULT the call to pthread_attr_setstacksize in os_threadCreate (POSIX) will fail. Solution:PTHREAD_STACK_MIN is now used instead. |
|
6815 dds1829 |
Persistent data can get lost Due to the durability alignment strategy, persistent data can get 'lost'. The durability when not master for a name-space sets aside the locally stored persistent data set. Then it aligns with the master. When during this process, the host is reset (actively or power-fail), the persistent data-set may not be complete. Solution:The durability service now stores information about having a complete set or not on disk. If it detects on re-start that the set is not complete, the 'old' set is restored and injected instead to at least have a complete set of data. |
| dds1836 |
On VxWorks - ospl reports warning sched_getscheduler failed with error 3 in cmsoap service This occurs because the sched_getscheduler requires a task id in vxworks6. Solution:Properly handle the case when os_procAttrGetClass is called by adding a vxworks6.x specific version of os_procAttrGetClass that passes the current task id rather than process id to sched_getscheduler |
| dds1844 |
Addition of networking statistics A large number of statistics for the networking service have been added and these are now available in the OpenSplice Tuner. By default, statistics are switched off. The enable them, the following needs to be added to the configuration file under //OpenSplice/Domain: <Statistics> <Category name="networking" enabled="true"/> </Statistics> |
| dds1847 |
Support multiple installations of OpenSplice DDS on Windows platforms OpenSplice DDS uses system variables and thus installing a new version of OpenSplice will overwrite the variables for the previous installation. Solution:OpenSplice does not use system variables anymore. A release.bat script is available in the installation directory to configure your environment. |
|
6792 dds1865 |
The IDL pre-processor must report unsupported key types The IDL pre-processor does not report illegal key fields in a type when the attributes are there, but the type of the attributes is not supported as a key field. Besides that, it also still generated code, causing problems with this code only at run-time. Solution:The IDL pre-processor now reports unsupported key fields and does not generate any code in that situation. |
| dds1894 |
durability: Two nodes select each other as master, blocking alignment Due to an error in the algorithm that determines the master-ship of a durability service, multiple masters can appear, causing the alignment of non-volatile data to fail. Solution:The error in determination of the master has been repaired. |
| dds1899 |
Asymmetric NetworkPartition configuration Right now networkPartitions are characterized by an ID that's determined by the order in which they're defined in the config-file. This does NOT allow for asymmetric configuration. Solution:A name-hash is calculated to create an ID that allows asymmetric configuration of networkPartitions over nodes. |
|
6861 dds1903 |
Network partition expression more limited than described and needed The network partition.topic expression is more limited than described in the deployment manual regarding the usage of wild-cards ('*'). Solution:Wild-cards are now supported on all levels for network-partitions. |
| dds1914 |
Improve reporting of non-matching topics Currently when an application creates a topic that already exists in the system it will be compared against the existing one and the creation will fail if the definition is not equal. The error reports that are generated are not useful as they often do not report the topic name. It would be very helpful if users know which topic creation fails and what the cause is, preferable also report conflicting values. Solution:The type name of the topic is now reported when the user tries to create a topic with the same name but a different type. |
|
6879 dds1921 |
Illegal object reported followed by segmentation faults Applications sometimes report detecting an illegal object after which they crash. This is caused by an inconsistency in the kernel instance administration. Solution:The error in the internal administration of instances in the kernel has been corrected. |
| dds1926 |
Setting parameters of a query is too expensive Setting a parameter on a simple query (using only '=' i.c.w. AND) is too expensive and results in congestion on the memory manager. Solution:Instead of fully reconstructing a query, only the parameters are now changed for simple queries. |
| dds1932 |
State the paths of the ospl-info and ospl-error files immediately after running ospl start |
|
6904 dds1938 |
Set query parameters should reset the query cache Setting the query parameters should reset the query cache because the query when executed over the reader database might pass samples with the new arguments. This causes the reader not to trigger the application when new data arrives and also can lead to the situation in which an application cannot read any data from the reader, even though there is data. Solution:The cache is now re-evaluated when a query is modified and also when historical data is delivered. |
| dds1946 |
Corrupted caching instance pipeline The instance pipeline in the kernel is formed by caching destination instances at source instances. The design supports disconnecting sources but disconnecting destination instances is poorly implemented. This may lead to corrupted instance caches and in some cases temporary memory leakage. Solution:The pipeline implementation has been modified to allow disconnecting destination instances also. |
| dds1947 |
Default JDK is now Java 6 OpenSplice DDS V5 is compiled with JDK6, but is compatible with JDK5 as we use the -source 1.5 flag |
| dds1965 |
Persistent data-store completeness needs to be communicated to late-joining nodes When nodes are aligned simultaneously, it is possible for them to detect whether they did receive a consistent (complete) persistent data-set or not. In this scenario, these nodes can take action to prevent injection of incomplete persistent data the next time the node starts. However, for late joining nodes there is no way to detect if a currently available persistent set is complete/consistent. Therefore, if a system would be restarted, and a previous late joining node from a system where incomplete persistent data was injected would become master for this set, injection of incomplete data would happen. Solution:Late joining nodes get information about persistent data completeness of other nodes. |
| dds1986 |
Problem with persistent topic having exclusive ownership strength
Because exclusive persistent/transient samples were not stored
correctly, writers that no longer existed (for example from a
persistent store) could in some cases prevent new writers from
writing new data. |
|
6989 dds1988 |
Linux 64 bit crashes when using a shared memory address above the 4GB range When using a shared memory address which is not aligned on 8192 bytes, OpenSplice DDS would crash. Solution:Added functionality to print a warning in the info log when the configured shared memory address is not aligned on 8192 bytes on 64-bit platforms. DDS will also automatically select the next correctly aligned address and use that instead. |
| dds1998 |
Problem with unions in durability in debug mode Due to an invalid assertion, the durability service crashed in debug mode when using specific constructions within a union. Solution:The invalid assertion has been removed. |
| dds1999 |
Problem with durability when publishing a union with switch set to a value without corresponding case Due to an invalid assumption in the serialization routines, the durability service is not able to handle unions correctly when the switch is set to a value without a corresponding case. Solution:The serialization routines have been updated to handle these unions correctly. |
| dds2007 |
Durability crashes when tracing is enabled and needs to print '%' character The durability service crashes while tracing information when there's a % in the path, because 'fprintf' takes it as format. Solution:The information to print using 'fprintf' is done using a format with the string as argument instead of directly printing the string. |
| dds2013 |
idlpp doesn't allow typedef of interface Even though no code is generated for (typedefs of) interfaces by the IDL pre-processor, it should still allow these constructions to be modelled in IDL. Solution:The IDL pre-processor has been modified to ignore typedefs of interfaces as well. |
|
7012 dds2015 |
idlpp truncates case label in case of enumeration for java If the enumeration label inclusive it's scope is larger than 100 characters, the label truncated to 99 characters. Solution:The length of an enum label is now dynamically determined. |
| dds2022 |
cppgen for Windows can not handle multiple #includes unless
separated by more than a new-line In cpp (C Pre Processor) this occurs when you do not have a carriage return at the end of an included idl files and there is another idl file included after it. Solution:The cpp has been modified to handle this situation correctly. |
|
6974/7023 dds2025/dds2089 |
CTRL+C in Java has no effect, JVM must be shutdown using KILL -9 Solution:The exit handling in DDS has been tightened by installing a shutdown hook to ensure that all the DDS entities are cleaned up and therefore processes can terminate. |
|
6861 dds2029 |
u_queryNew accesses unset variable copy In the function u_queryNew the variable copy is accessed and used to dispose (q_dispose) while it's value has not been set. Solution:The variable is no longer disposed when it has not been set. |
| dds2043 |
Allow bigger value of InitialDiscoveryPeriod
The InitialDiscoveryPeriod max value allowed is 10s. More is
required by customers. |
| dds2045 |
PolySpace issues Static code analysis with PolySpace demonstrates some (potential) problems in the code-base. Solution:The detected problems in the code have been repaired. |
|
7062 dds2072 |
Deadlock in Opensplice callstack when calling write() and take()
at the same time Due to an error in the internal locking strategy in the OpenSplice kernel, an application can get into a deadlock when three threads are concurrently operating on the same set of objects. Solution:The error in the internal locking strategy has been repaired. |
| Report ID. | Description |
|---|---|
| dds845 |
DestinationOrderQosPolicy value is not listed in the language specific DCPSPublication topic The DDS 1.1 specification mistakenly forgot to mention the DestinationOrderQosPolicy in the DCPSPublication builtin topic, which should have been there since the policy is marked as being RxO. This omission was repaired in the DDS 1.2 specification. Although the DestinationOrderQospolicy is actually transmitted in the DCPSPublication builtin topic, it still misses in the language specific representation for C, C++ and Java. Solution: Added the C, C++ and Java representations for DestinationOrderQospolicy. |
| dds2220 |
The get_key_value() method implementation on the dataReader is missing The DataReader misses the specified get_key_value() method. Solution: Implemented the missing get_key_value() method on the dataReader. |
| Report ID. | Description |
|---|---|
|
GEN_7 dds1577 |
Report Plug-In facility See the release highlights section |
|
DDS_4 dds1578 |
Network level compression See the release highlights section |
|
DDS_29 dds1617 |
Create a persistent snapshot The durability service allows an application to request a snapshot of the values of instances of a topic. A snapshot consists of a copy of the current persistent data in a new file, the name of which is provided by the application. |
| dds1837 |
The C++ API does not support all Quality of Service The C++ API (sacpp & ccpp) did not support the following QoS;
Solution:QoS-ses are now implemented |
| Bugzilla#32 |
IDL array of arrays generates code that dosn't compile with standalone C++ mappingidlpp / cppgen bug fixed such that the following IDL now generates compilable code: typedef unsigned short Matrix[1024][1024];
|