On Fri, Sep 18, 2020 at 6:16 PM Mark Thomas <ma...@apache.org> wrote:
> On 18/09/2020 14:07, Martin Grigorov wrote: > > <snip/> > > > What is the difference > > between org.apache.coyote.http2.StreamStateMachine.State#CLOSED_RX > > and org.apache.coyote.http2.StreamStateMachine.State#CLOSED_TX ? > > Compare the parameters used to construct the enums. > > > I read some parts of https://tools.ietf.org/html/rfc7540 but I don't see > > anything related to two types of CLOSED state. > > Section 5.1. Definition of the closed state (page 20) explains the > difference between the two. > Still I do not understand what RX and TX stand for. But this is not important. The following patch fixes the issue for me/Vegeta: @@ -1570,12 +1571,15 @@ class Http2UpgradeHandler extends AbstractStream implements InternalHttpUpgradeH @Override public void reset(int streamId, long errorCode) throws Http2Exception { - Stream stream = getStream(streamId, true); - boolean active = stream.isActive(); - stream.checkState(FrameType.RST); - stream.receiveReset(errorCode); - if (active) { - activeRemoteStreamCount.decrementAndGet(); + boolean unknownIsError = Http2Error.CANCEL.getCode() != errorCode; + Stream stream = getStream(streamId, unknownIsError); + if (stream != null) { + boolean active = stream.isActive(); + stream.checkState(FrameType.RST); + stream.receiveReset(errorCode); + if (active) { + activeRemoteStreamCount.decrementAndGet(); + } } } I.e. do not throw an error if the remote peer is trying to cancel an already closed stream. With this change and Vegeta's -max-workers=100 I can get 12 K reqs/sec. With more workers it starts failing with: "status_codes": { "0": 1000, "200": 1 }, "errors": [ "Get \"https://localhost:18080/testbed/plaintext\": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)", "Get \"https://localhost:18080/testbed/plaintext\": context deadline exceeded", "Get \"https://localhost:18080/testbed/plaintext\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)" ] i.e. out of 1001 requests only one succeeds and the others fail with timeout. I will try to debug this one too and run a profiler too. > > Mark > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >