Alan M. Carroll created TS-3087:
-----------------------------------
Summary: Flow control can stall at low water mark values
Key: TS-3087
URL: https://issues.apache.org/jira/browse/TS-3087
Project: Traffic Server
Issue Type: Bug
Components: Core
Reporter: Alan M. Carroll
If the flow control high water mark is set to be smaller than the TCP socket
buffer size, flow control can stall out. The root cause is that the
UnixNetVConnection will generate the WRITE_READY event before writing to the
socket. If the amount of data in the buffers is larger than the water mark
(throttling the connection) and small enough to all be written at once to the
socket then the buffer will empty but no event will be generated to unthrottle
the connection.
To fix this, I added the ability to force an event on the write buffer becoming
empty for a NetVConnection. The flow control logic sets this in the cases where
this can happen and therefore gets an event in which it can detect the buffer
is empty and unthrottle.
To see this, simply set the flow control water marks to a small value such as
25000 and fetch a medium sized (~200K) object. Most of the time the request
will stall. It will stall more often if cache is disabled (because the CacheVC
generates a lot of events).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)