Jump to content
OpenSplice DDS Forum

Search the Community

Showing results for tags 'QoS'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • About OpenSplice DDS
    • News and Events
    • Site Feedback
  • Using OpenSplice DDS
    • General
    • Troubleshooting
  • Understanding OpenSplice DDS
    • OpenSplice DDS Slideshows
    • OpenSplice DDS Movies
  • Community
    • Project: SIMD
    • Project: CamelOS
    • Project: DDS Touchstone
    • Project: RESTful DDS
    • Mac OS X

Calendars

  • Community Calendar

Found 15 results

  1. I've noticed that when there's not enough bandwidth available for the samples that I'm sending (over a highly variable, low speed WAN) the subscriber starts to receive updates far slower than real time, up to five or ten seconds behind. I'm sending small updates at a high frequency and I'm guessing that the OS is queuing up the packets and since the payloads are small a great number of them can get queued up. I'm sending best effort so eventually packets will be get dropped but I'd really like to find a way to stay as close as possible to real time by automatically reducing the update rate when the time it takes for a sample to be received goes above some small threshold. It seems like something like this could be possible if the DataReader were to occasionally report the delta between a timestamp on a sample it gets and the current time. The DataWriter could then cut automatically cut back on its publication rate until near real time updates are received by the subscriber. I looked through the QoS settings and documentation but I couldn't find anything that looked like it would automatically adjust update rates. Is there anything built into OpenSplice to do this or is this something that's generally dealt with at the application level?
  2. I have a problem with setting up corectly the DDS system over the wireless (WiFi) network. The system has one publisher and one subscriber. The application generates large amounts of data (~60 Mbps) which is being published at the same rate. This is larger than the network can actually support (which is around 40Mbps, and it varies due to wireless nature). On the subscriber's side, we need to receive as much data as the network can handle. So, we assume that HISTORY QoS option would help by limiting the number of samples on the publisher side. The system is set up to support best effort QoS . We use the folowing settings for the topic QoS on the publisher and subscriber: reliable_topic_qos.reliability.kind = BEST_EFFORT_RELIABILITY_QOS; reliable_topic_qos.durability.kind = VOLATILE_DURABILITY_QOS; reliable_topic_qos.history.kind = KEEP_LAST_HISTORY_QOS; However, the subscriber experiences latency in data that increases over time. It seems that on the publisher side the data is being kept and it builds up over time regardless of HiSTORY KEEP_LAST option. We tried different combinations of QoS options and non of them works correctly, the increasing latency is always happening. Any help is highly appreciated, thank you.
  3. Hey ! I'm trying to made a communication between my android phone on android cafe 2.2.2 and opensplice 6.6.4 on my windows computer. With a basic qos volatile/reliable, I have this error log on ddsi2service with log level fine : SEDP_TOPIC (vendor 1.11): missing qos/parameters 3/803 for topic TopXXX The publisher is opensplice 6.6.4 and cafe is 2.2.2. I received (sometimes no) my topic only during 6~30 seconds and the previous log appear. In android java code, I have this on my reader listener : > public void onLivelinessChanged(LivelinessChangedEvent<DATA> event) { > LOGGER.info("onLivelinessChanged."); > System.out.println("onLivelinessChanged : alive = " + event.getStatus().getAliveCount() + ", not alive = " + event.getStatus().getNotAliveCount()); > } And the aliveCount pass from 1 to 0. Does someone have this kind of problem ? Thx.
  4. Hi, What are the recommended QoS settings for high packet loss networks? I am simulating packet loss with netem tool and it seems that more packets are lost then expected. I would like to receive all packets between two nodes, having all the time that is needed after last packet was published. The context of these tests is comparing OpenSplice to eProsima FastRTPS (and possilby other DDS/RTPS solutions) and evaluating them. Unfortunately, for OpenSplice, setting history to KEEP_ALL, durability to TRANSIENT and reliability to RELIABLE doesn't provide this behavior (setting is on both ends and on the topic). All other QoS settings are default. Problems starts usually above 30% loss, more often near 40%. I am assuming that with indefinite time all packets should be properly delivered even with 90% packet loss. Packets are sent every 300 ms and are small (16 bytes), for a duration of 3 minutes. It is the first packets that are never received (i.e. all until the number 50). Before sending starts, there are 5 seconds to connect. Time to receive first packet varies as expected, but what is unexpected is that it influences total loss rate. I can of course provide code (it's a github public project), but I am hoping for a theoretical answer first. Thank you! Adam P.S. For best effort settings with no history packet loss is also higher than expected (also a bunch of first packets are lost).
  5. Hey, I'm currently trying to load Qos xml file to load profile for DataReader and DataWriter. As I read on the forum and the api, the only one way is : ServiceEnvironment se = ServiceEnvironment.createInstance(<MyClass>.class.getClassLoader()); se.getSPI().newQosProvider("<MyQosFilePath>, "<MyProfileName>"); And the call of newQosProvider, I have an UnsupportedOperationException : java.lang.UnsupportedOperationException: Not implemented at com.prismtech.cafe.ddsi.core.int.newQosProvider(ServiceProviderInterfaceImpl.java:123) Is it normally ? I have read that loading qos file is implemented so maybe I use a wrong way. Thx.
  6. Reliability and History Relation

    Hi I want to know whether history QoS is related to reliability in low rate publishing or not. I have written a program that the interval between two publish is 200 us and set the reliability QoS for both data reader and data writer. But the connection is not reliable until I set the history QoS to KeepLast(10000). So I want to know whether these QoSs are related to each other or not. It's worth mentioning that my connection is reliable for high rate publishing and is independent of history QoS. Thanks in advance for your help. Bonjefir
  7. Hi, I want to know whether there is a function for getting all topics and their related QoSs in one specified domain. I can find all topic names with dbd tool easily but I want to do it directly in my code. Thanks in advance for your help. Bonjefir
  8. I am having one issue when deadline is missed for 2 or more different instances at same time. Example: One application is subscriber to a Topic (Msg) Other 3 applications are publishing Topics each with different key values. Let key values be sourceID =1, sourceID=2, sourceID=3 The deadline at subscriber for Topic is set to 2 seconds, Suppose Topics from publishers now stopped at same time for Id=1 and Id=3 and then a deadline missed has been called at subscriber. When I use the last_instance_handle, I get the handle to latest handle to either Id=1 or Id=3 but not for both I have tested with the following code: void ListenerDataListener::on_requested_deadline_missed(DDS::DataReader_ptr reader, const DDS::RequestedDeadlineMissedStatus &status)THROW_ORB_EXCEPTIONS { printf("\n=== [ListenerDataListener::on_requested_deadline_missed] : triggered\n"); printf("\n=== [ListenerDataListener::on_requested_deadline_missed] : stopping\n"); m_guardCond->set_trigger_value(true); Msg m1; m_MsgReader->get_key_value(m1,status.last_instance_handle); qDebug()<<"Missed Key:"<<m1.sourceID; }
  9. I am interested in using the Deadling QOS on the Data Reader side to alert me when a specific topic instance violates the deadline contract. I have been able to get a listener working with a deadline qos, and am correctly alerted when a deadline is missed. However, I am unable to determine which instance violated the contract. Does OpenSplice have a method to do this? Or does anyone know a way around it?
  10. Hi I have written a program with iso cpp API. My configuration and results are given below: Packet size: 7170 Byte Delay between two publish: 200 us But when I apply the "dds::core::policy::Durability::Transient()" to my Topic, Data Writer and Data Reader, my Receiving Rate decrease a lot surprisingly (around 11 times) !!! What is the problem? Thanks in a advance for your help. Bonjefir
  11. Hi, I have been using OpenSplice DDS for a while and it has been working nicely. However now I have noticed some unusual behaviour when I was using DurabilityService. I used the Durability example to test the functionality so I had to make some changes to the publisher code. I changed the publishing of messages so that all messages are published under the same instance(currently 1000 messages). Msg *instances[1]; InstanceHandle_t userHandle[1]; for (int x = 0; x < 1; x++) { cout << "x" << endl; for(int y = 0; y < 1000; y++){ instances[x] = new Msg(); instances[x]->id = x; snprintf(buf, MAX_MSG_LEN, "%d", y); userHandle[x] = DurabilityDataWriter->register_instance(*instances[x]); instances[x]->content = DDS::string_dup(buf); cout << instances[x]->content << endl; DurabilityDataWriter->write(*instances[x], userHandle[x]); } } Also I changed the QoS setting by adding these settings to DDSEntityManager::createTopic so that old messages are also remembered by the Durability service. topic_qos.durability_service.history_kind = KEEP_ALL_HISTORY_QOS; topic_qos.history.kind = KEEP_ALL_HISTORY_QOS; topic_qos.history.depth = 1000000; topic_qos.reliability.kind = RELIABLE_RELIABILITY_QOS; topic_qos.destination_order.kind = BY_SOURCE_TIMESTAMP_DESTINATIONORDER_QOS; When I run the example above by first starting the publisher node and then the subscriber node, first run works every time. But when I start another subscriber or I restart the old subscriber, it sometimes work and sometimes it does not. When the subscriber does not work, it just keeps waiting for the messages... Also, the more messages I sent, the more likely it is to fail. With just 10 messages subscriber almost always works, but with 1000 it sometimes work and sometimes it does not. But even with 1000 messages, the first subscriber is always able to get all messages. Do I have some wrong QoS settings or does someone know what might be the problem? -Antti
  12. Hi First I should mentioned that I'm using the last version of DDS community edition in my programs. I wrote a simple program to check some QoS of DDS entities. Everything look fine when both data writer and data reader nodes are in the network. The problem arises when my data reader joins after data writer (late-joining data reader). my late joining data reader behaves like a fresh data reader and don't receive historical data. Below I bring my configuration of my data reader for your information; the data writer configuration is the same. It's worth mentioning that this problem just occurs at the first time and after that my data reader works fine based on its QoS. So my question is that why my data reader doesn't receive historical data at the first time. DP_myDP = dds::domain::DomainParticipant(org::opensplice::domain::default_id()); QOS_myTopic = DP_myDP.default_topic_qos() << dds::core::policy::History::KeepAll() << dds::core::policy::Reliability::Reliable() << dds::core::policy::Durability::Transient(); TPC_myTopic = dds::topic::Topic<myIDL::payload>(DP_myDP,"Message",QOS_myTopic); QOS_mySub = DP_myDP.default_subscriber_qos() << dds::core::policy::Partition(partitionName); // Set the QoS associated with the Subscriber. SUB_mySub = dds::sub::Subscriber(DP_myDP,QOS_mySub); /** The dds::sub::qos::DataReaderQos are derived from the topic qos */ QOS_myDR = TPC_myTopic.qos(); // Set the QoS associated with the Data Reader. DR_myDR = dds::sub::DataReader<myIDL::payload>(SUB_mySub,TPC_myTopic,QOS_myDR); Thanks in advance for your help. Bonjefir
  13. entity_factory QoS

    Hi I want to set the entity factory QoS of my default domain to false. So I wrote the code below (isocpp); dds::domain::qos::DomainParticipantQos dpqos; dpqos << dds::core::policy::EntityFactory::ManuallyEnable(); dds::domain::DomainParticipant dp(org::opensplice::domain::default_id(),dpqos); dds::topic::qos::TopicQos topicQos = dp.default_topic_qos() << dds::core::policy::Durability::Transient() << dds::core::policy::Reliability::Reliable() << dds::core::policy::History::KeepAll(); dds::topic::Topic<myIDL::payload> topic(dp, "HelloWorldData_Msg", topicQos); std::string name = "HelloWorld example"; dds::sub::qos::SubscriberQos subQos = dp.default_subscriber_qos() << dds::core::policy::Partition(name) << dds::core::policy::EntityFactory(FALSE); dds::sub::Subscriber sub(dp, subQos); dds::sub::qos::DataReaderQos drqos = topic.qos(); dds::sub::DataReader<myIDL::payload> dr(sub, topic, drqos); //dp.enable(); //sub.enable(); dr.enable(); Surprisingly my code works without enabling subscriber! Can anyone say what's the correct way of setting entity factory QoS to false?
  14. I am interested in using the Deadling QOS on the Data Reader side to alert me when a specific topic instance violates the deadline contract. I have been able to get a listener working with a deadline qos, and am correctly alerted when a deadline is missed. However, I am unable to determine which instance violated the contract. Does OpenSplice have a method to do this? Or does anyone know a way around it? Alternatively, is there a way to set the Data Writer to change the InstanceStateKind from ALIVE_INSTANCE_STATE to NOT_ALIVE_NO_WRITERS_INSTANCE_STATE when the Deadline contract is violated? I was hoping to use virtual void on_requested_deadline_missed(DDS::DataReader_ptr reader, const DDS::RequestedDeadlineMissedStatus &status); in order to change the value of that field, but am not sure how to do so if I do not receive a handle to the specific instance.
  15. Subscriber QoS Policy

    Hello All, Please help me configure QoS to implement the following, I am having one publisher and many subscribers, from the subscriber side i want to receive the same content only one time. That is, publisher publishing content1,content2 Subscriber receiving content1,content2 and it will end. Again publisher publishing content3 Normally subscriber again starts receiving from content1,content2,content3 I want to configure subscriber who are all receiving the contents they should not be receiving the same content next time, that is from above example, the subscriber should be receive content3 alone in second run. How to configure the QoS to achieve this ?? Thanks -Viswa
×