Hi
I have a test scenario where I start my Connext application (v. 5.2), publish some messages between one subscriber and one publisher (within the same participant). Publisher and subscriber application are running on different computers in my local network.
My QoS values for the subscriber and publisher were set for strict reliability and with a DestinationOrder of ReceptionTimestamp given below:
qosDw = dds::core::QosProvider::Default().datawriter_qos(rti::core::builtin_profiles::qos_lib_exp::generic_strict_reliable_large_data());
qosDw << dds::core::policy::ResourceLimits()
<< dds::core::policy::Lifespan(dds::core::Duration(lifespan,0))
<< dds::core::policy::History::KeepAll()
<< dds::core::policy::DestinationOrder::ReceptionTimestamp();
qosDr = dds::core::QosProvider::Default().datareader_qos(rti::core::builtin_profiles::qos_lib_exp::generic_strict_reliable_large_data());
qosDr << dds::core::policy::ResourceLimits()
<< dds::core::policy::History::KeepAll()
<< dds::core::policy::DestinationOrder::ReceptionTimestamp();
The time of each system does not affect sending and receiving of data and everything is fine with the above QoSs but when I switched the destination_order to SourceTimestamp, and change the times of each system, The system which its time is less than other system, cannot receive data. However the other system (with the greater time) can receive and send data. I think the subscriber on the system which its time is less than the other one, ignore the received samples due to its incorrect time. Indeed, it's practically impossible for me to sync all times in all hosts in my network. What should I do for solving this problem? Am I doing something wrong? Are my QoSs correct?
By the way, consider this fact that this problem does not exist if both publisher ans subscriber applications run on one system.
Thanks in advance for your help.
Bonjefir
Any Answer? Am I doing something wrong? Are my QoSs right?
Hi,
Sorry for the delay. I think that the issue is related to the DDS_DestinationOrderQosPolicyKind configuration that you are using. When a DDSDataReader sets DDS_DestinationOrderQosPolicyKind to DDS_BY_SOURCE_TIMESTAMP_DESTINATIONORDER_QOS, the DDSDataReader will accept a sample only if the source timestamp is no farther in the future from the reception timestamp than this tolerance (the default value of the source_timestamp_tolerance is 30 seconds). Otherwise, the sample is rejected. You can find more information in the Connext DDS User’s Manual:
https://community.rti.com/static/documentation/connext-dds/5.2.0/doc/manuals/connext_dds/html_files/RTI_ConnextDDS_CoreLibraries_UsersManual/Content/UsersManual/DESTINATION_ORDER_QosPolicy.htm
Therefore, using BY_SOURCE_TIMESTAMP_DESTINATIONORDER_QOS you would drop the samples in the reader side of the machine with less time, because they come from the future (further than 30 seconds, that is the default value of the source_timestamp_tolerance). If you need to use this configuration in your QoS, you should be sure that the time of the publisher machine has a time equal to the subscriber machine (or at least within the source_timestamp_tolerance).
Regards,
Sandra