-
Feature Request
-
Resolution: Unresolved
-
Major
-
None
-
None
-
False
-
None
-
False
-
-
MaxOneThreadPerSender has max_buffer_size, acting as a message queue when the delivery thread is running: when 0, the queue is unbounded. When N >0, then messages are dropped when the queue size is >= N.
An unbounded queue can lead to OOMEs: when the sender is constantly faster than the receiver, the queue will grow. Note that flow control will not kick in, as the message already passed UFC/MFC.
Dropping messages OTOH is slowing things down and causes retransmission. In addition, stacks without retransmission protocols (UNICAST3, NAKACK2) [1] will lose messages.
An additional option is to block when the queue is full: this will slow down the sending of credits to the senders, therefore throttling the senders. Add an option block_on_full_queue to MaxOneThreadPerSender: when true, threads trying to add messages will block instead of dropping messages when the queue is full (N > 0; when N==0, the queue will still be unbounded).