ros2/rmw_cyclonedds

iceoryx subscriber - TOO_MANY_CHUNKS_HELD_IN_PARALLEL error when flooding a receiver with messages

tobiasstarkwayve opened this issue · 0 comments

Bug report

Required Info:

  • Operating System:
    • Ubuntu 20.04.1
  • Installation type:
    • from source
  • Version or commit hash:
    • 1.3.4
  • DDS implementation:
    • Cyclone DDS 0.9.1 (w/ iceoryx 2.0.3)
  • Client library (if applicable):
    • rclcpp

Steps to reproduce issue

Build the two example programs in the attached archive
bug_reproducer_cpp.tar.gz

These reproducers are just one sender that sends as fast as it can and one receiver that slowly processes those messages (and will therefore quickly get overloaded). However, the limited KEEP_LAST capacity should mean that most of the incoming messages should just get dropped

Run RouDi, then both bug_reproducer and bug_reproducer_rcv together with the provided cyclonedds.xml (which enables shared-memory communication and nothing else

Expected behavior

Nothing to see, or maybe errors on the sender side that the receiver was unable to receive messages

Actual behavior

An unending stream of

DDS reader with topic rt/reproducer_topic : iceoryx subscriber - TOO_MANY_CHUNKS_HELD_IN_PARALLEL - could not take sample

on the receiver side.

Additional information

If I understand it correctly, the error message states that the receiver is holding on to too many samples (>256, I believe). Which is strange, considering that the KEEP_LAST policy should limit the reader to at most 10 samples, we should never even get near 256.

Is it possible that the iceoryx samples don't get freed properly if they are dropped from the input queue?