Age | Commit message (Collapse) | Author |
|
Again to avoid intermittent issues.
|
|
|
|
|
|
This happens from time to time on Windows and is partially
due to how the test is written.
|
|
|
|
This is to make up for very slow or low resource environments,
like the FreeBSD CI environment currently.
|
|
This is mostly to ensure that the GOAWAY frame is properly
received on Windows in some tests, but should be benefitial
also in production in particular when clients are slower.
|
|
The local network is much slower so the tests take longer there.
|
|
This causes the test to get stuck because both the client and
server end up waiting in Transport:send for the other side to
read data from the socket.
|
|
We could get stuck in passive mode under certain conditions
(fast and non-busy machine and perhaps other environment factors).
|
|
|
|
|
|
|
|
|
|
|
|
To avoid intermittent test failures. We only want to make
sure the function eventually returns so we don't need to
use timeouts in the test itself, or check exactly what was
read.
|
|
The experiment was successful in Gun, let's see if it helps
with Cowboy as well.
|
|
Fixes HPACK edge cases (error conditions).
|
|
Introduce a currently undocumented option to allow disabling
cowboy_http when using a clear listener.
|
|
We now allow spaces in cookie names.
|
|
|
|
|
|
|
|
|
|
Allow 10000 frames every 10 seconds instead of just 1000,
as the limit was too quickly reached in some deployments.
|
|
|
|
|
|
|
|
|
|
This resulted in a badarith error due to the current flow being
set to infinity when the body has been fully read. A test case
has been added reproducing the issue.
|
|
|
|
The flow control is now only set to infinity when we are
skipping the request body of the stream that is being
terminated. This fixes a bug where it was set to infinity
while reading a subsequent request's body, leading to a
crash.
The timeout is no longer reset on stream termination.
Timeout handling is already done when receiving data
from the socket and doing a reset on stream termination
was leading to the wrong timeout being set or the right
timeout being reset needlessly.
|
|
|
|
|
|
This reduces the number of times we need to ask for more packets,
and as a result we get a fairly large boost in performance,
especially with HTTP/1.1.
Unfortunately this makes Cowboy require at least Erlang/OTP 21.3+
because the ssl application did not have active,N. For simplicity
the version required will be Erlang/OTP 22+.
In addition this change improves hibernate handling in
cowboy_websocket. Hibernate will now work for HTTP/2 transport
as well, and stray or unrelated messages will no longer cancel
hibernate (the process will handle the message and go back into
hibernation).
Thanks go to Stressgrid for benchmarking an early version of this
commit: https://stressgrid.com/blog/cowboy_performance_part_2/
|
|
When sending a complete response it is far more efficient
to send the headers and the body in one Transport:send/2
call instead of two or more, at least for small responses.
This is the HTTP/2 counterpart to what was done for HTTP/1.1
many years ago in bfab8d4b22d858e7cffa97d04210a62fae56681c.
In HTTP/2's case however the implementation is a little
more difficult due to flow control. On the other hand the
optimization will apply not only for headers/body but also
for the body of multiple separate responses, which may need
to be sent all at the same time when we receive a WINDOW_UPDATE
frame.
When a body is sent using sendfile however a separate call
is still made.
|
|
It has been deprecated in OTP and the new way is available
on all supported OTP versions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This allows changing the normal exit reason of Websocket
processes, providing a way to signal other processes of
why the exit occurred.
|
|
We now stop reading from the socket unless asked to,
when we reach the request body. The option
initial_stream_flow_size controls how much data
we read without being asked, as an optimization.
We may also have received additional data along
with the request headers.
This commit also reworks the timeout handling for HTTP/1.1
because the stray timeout message was easily reproducible
after implementing the flow control. The issue should be
gone for good this time.
|
|
|