Given the observed behavior, I am in support of removing this property as well. In addition, the fact that this property is on the listening side and not the posting side indicates this is a flow rate limiter. It is not attempting to throttle the transfer rate. Therefore, the appropriate - and arguably more desirable - approach here is to let the data flow handle the rate throttle. As you've suggested, ControlRate and possible back pressure that results is a great solution.
The inclusion of a use case in the processor documentation is a great idea and will assist users who may feel they lost functionality. As Lucas mentions, this change should be clearly documented in the migration guide when it is included in a release. It's not always a great idea to change some base processors that are very heavily utilized. However, the benefits here are significant especially when possible duplication of data may occur. +1 on recommended changes including documentation. On Thu, Mar 13, 2025 at 3:45 PM Lucas Ottersbach <ottersb...@apache.org> wrote: > > Thanks for opening the discussion Michael. > > Separating the concerns of HTTP and rate limiting sounds reasonable to me. > Especially when considering the limitations of the current implementation > you've outlined. > +1 from me on this issue. > > While I'm in favour, we should ensure this change is documented properly in > the migration guide. Otherwise, users might experience undesired loads due > to the limit being migrated away automatically but the corresponding > ControlRate processor missing. > > Best regards, > Lucas > > Michael Moser <moser...@gmail.com> schrieb am Do., 13. März 2025, 20:08: > > > Team, > > > > tl;dr I would like to remove the ListenHTTP "Max Data to Receive per > > Second" capability because it has problems. Thoughts? > > > > I've been experimenting with the ListenHTTP "Max Data to Receive per > > Second" feature and I've found some concerning results. > > If I set "Max Data to Receive per Second" to a low value such as "500 KB" > > and send a 5 MB file using InvokeHTTP, then ListenHTTP receives the file > > after 10 seconds. Great! > > But if the size of the file would take longer than the InvokeHTTP "Socket > > Read Timeout" (default 15 seconds), for example sending a 20 MB file (which > > would take 40 seconds), > > then after 15 seconds InvokeHTTP experiences a SocketTimeoutException and > > routes the file to Failure. After 40 seconds elapses, ListenHTTP completes > > and receives the 20 MB file! If the InvokeHTTP Failure relationship is > > retried, then the receiving system gets duplicate files. > > > > At larger "Max Data to Receive per Second" values such as "10 MB", > > SocketTimeoutExceptions are harder to reproduce but I can still make it > > happen by heavily loading ListenHTTP. > > > > As an alternative to this property, if a ListenHTTP is followed by > > ControlRate with tight back pressure in between, then a limited data rate > > appears to work much better. > > When InvokeHTTP is the client, and ListenHTTP experiences backpressure > > and does things like send a 503 response or deny connections or close > > connections, > > InvokeHTTP experiences various errors. This results in files going to > > either Retry or Failure relationships. > > When those are retried, then the number of files that InvokeHTTP wants to > > send exactly equal the number of files that ListenHTTP receives. Also > > great! > > > > So, I propose removing the ListenHTTP "Max Data to Receive per Second" > > property, with proper migration of properties. And documenting a UseCase > > on ListenHTTP to explain > > the recommended approach (backpressure) to rate limiting. > > > > Thanks for your thoughts, > > -- Mike > >