Jump to content
OpenSplice DDS Forum
Sign in to follow this  
armando.paz

delivery delay

Recommended Posts

Hi All !

 

was experimenting with one publisher and some subscribers for a topic. The publisher just sends a periodic update for an instance. The rate of sending is one update per second. The QoS for the topic is configured to Reliable and History is defined to KeepAll.

 

The point is that when I kill one of the subscriber processes, the other subscribers stop receiving updates stop getting the regular updates for a period (around 5 seconds) and then resume their receiving a burst of samples before returning to the regular rate of receiving one sample a second. No samples are lost.

 

Thought that maybe there is some configuration item that can be touched so that the reception behaves differently, and that the other subscribers are not affected when one of them gets killed. Remember when working with TAO that there was some configuration that defined the use of one thread per connection ... anything related in Opensplice ? Or some timing parameter that controls this ?

 

btw ... using the community edition V6.7.

 

Regards.

Armando.

Share this post


Link to post
Share on other sites

In my experiments , I met the write method will block for a seconds due to reliable QoS when subscriber and reader shut down un-naturely  .

 

And I can see error code , time out .

 

I don't know if my experiment is like yours ? 

Share this post


Link to post
Share on other sites

Hi,

 

actually there is no real error ... so no error code to show. 

There was one DataWriter producing samples, and three DataReaders consuming, all in different processes. When one of the readers was killed, could observe that the other readers paused their reception of samples. No sample was lost.

Just wasn't expecting that other subscribers could be affected by the failure of one DataReader. But after your comment, and rereading the spec it seems that this is valid behavior ... and the blocking seems occurs at the writer.

 

Well ... anyway will investigate a little further this scenario.

 

Thanks,

Armando.

Share this post


Link to post
Share on other sites

Hi,

 

actually there is no real error ... so no error code to show. 

There was one DataWriter producing samples, and three DataReaders consuming, all in different processes. When one of the readers was killed, could observe that the other readers paused their reception of samples. No sample was lost.

Just wasn't expecting that other subscribers could be affected by the failure of one DataReader. But after your comment, and rereading the spec it seems that this is valid behavior ... and the blocking seems occurs at the writer.

 

Well ... anyway will investigate a little further this scenario.

 

Thanks,

Armando.

 

Yes , the blocking happened at the writer side .

 

Below is my guess : 

 

The reliable QoS will guarantee each sample sended to every reader . 

Therefore,  if you shut down one reader while the right now sample is be transporting  to it , the DDS thread at writer will block . 

Because the writer thread is waiting ack. 

If your writer don't produce sample in high frequency , it's not important issue .

 

Maybe you can try ThreadPool option in xml configuration file or change reliable block time .

 

 

Besides , when you use History Keep All , don't forget Resource limit QoS to control cache size .

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×