real-logic / artio

Artio - Resilient High-Performance FIX and FIXP Gateway
Apache License 2.0
300 stars 121 forks source link

Artio silently stops processing incoming messages when one can't fit in the receiver buffer #498

Closed fredfp closed 10 months ago

fredfp commented 11 months ago

When Artio receives a message that is larger than the receiver buffer, it waits for the full message to become available, while at the same time it stops reading any further data because the receiver buffer is full.

This leads to TCP backpressure and, later, the session gets disconnected because of heartbeat time-out: Artio ends up sending a TestRequest, for which it will never be able to receive an answer as it stopped processing/reading incoming messages.

Althought this can be worked aroung by increasing the receiver buffer size using -Dfix.core.receiver_buffer_size=..., Artio doesn't handle such situation gracefully (it doesn't even detect that condition) and this is what this issue is about.