jhelovuo / RustDDS

Rust implementation of Data Distribution Service

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

64kb size limit, probably due to broken fragmentation again

steux opened this issue · comments

Hi,
Sorry to come back on this issue, but fragmentation is broken again in the latest master.
To test this, you can use this:
cargo run -- -r foobar to launch a reader
cargo run -- -w foobar -s 65000 works correctly. The reader gets the message.
cargo run -- -w foobar -s 66000 fails. The reader doesn't get any message. Well, sometimes it is... Once every 10 minutes randomly...
I think for the lower message size, it works due to reemission (which is systematic. Ack are never accepted), which is done in UDP and is thus limited to 64kb. It's probably the whole fragmentation thing that was broken again at another place than the one I fixed last time. This time, I'm going deeper into your code, but frankly, I get lost...
Regards.

It seems that ACKNACK processing was trying to send DATA no matter the size of data, which of course fails like your test program shows.

This should be now fixed in the latest master. ACKNACK either sends DATA or sets up to send DATAFRAGs.

There is something else fishy in Reliable mode transmission, because it seems that the Reader lags behind Writer some 1-2 messages, if the writing starts before Reader & Writer are matched by Discovery. But this seems to be unrelated to message size.