Commit Graph

1027 Commits

Author SHA1 Message Date
Simone Bordet 1d71cabef4 Fixed test that was failing due to TLS 1.3 backport to Java 8.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-11-17 13:39:28 +01:00
Joakim Erdfelt edaadff55b Updating to version 9.4.35-SNAPSHOT 2020-11-02 09:04:51 -06:00
Joakim Erdfelt e46af88704 Updating to version 9.4.34.v20201102 2020-11-02 08:03:51 -06:00
Olivier Lamy 47885f7ecb
Jetty 9.4.x h2spec-maven-plugin now check if docker is available (new version fixing issues with generated junit file) (#5497)
* skip h2spec if no docker available

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* active snapshot-repositories for jenkins build

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* h2spec plugin 1.0.1

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* new snapshot to debug jenkins

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* simplify build to ease debug

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* force snapshot download:

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* use h2spec release 1.0.2

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* remove commented sections

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* no need of this profile

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* profile not needed anymore

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>
2020-10-28 12:07:49 +10:00
Joakim Erdfelt e726eefb0b Updating to version 9.4.34-SNAPSHOT 2020-10-20 18:55:39 -05:00
Joakim Erdfelt 1be6875565 Updating to version 9.4.33.v20201020 2020-10-20 18:28:51 -05:00
Simone Bordet 8de2fbce49 Code cleanup, merging streams[Opened|Closed] from subclasses into HTTP2Session.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-10-18 13:01:40 +02:00
Joakim Erdfelt e6fb4c3ac4 More fixes to allow project to build on Windows 10 2020-10-16 16:45:25 -05:00
Joakim Erdfelt 07d35d32ae Fixing windows build/test issues. 2020-10-16 15:39:38 -05:00
Simone Bordet c73ad40511 Code cleanup.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-10-15 15:41:57 +02:00
Joakim Erdfelt 85e257fc98 Updating to version 9.4.33-SNAPSHOT 2020-09-30 11:53:09 -05:00
Joakim Erdfelt de97d26f7b Updating to version 9.4.32.v20200930 2020-09-30 11:03:24 -05:00
Ludovic Orban a37ab389aa
increase the connector's idle timeout to make sure the idle timeout does not fire spuriously. (#5281)
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2020-09-16 16:14:11 +02:00
Olivier Lamy 3849a9118f
h2s spec maven plugin 1.0.0 with h2spec 2.6.0 (#5231)
* use our fork of h2spec-maven-plugin and upgrade version

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* add a profile to run spec server

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* use h2spec plugin new version

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* version h2spec 1.0.0

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* exclude specs we know not working

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* use our own package name

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* test no exclusion

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* restore known failure

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* h2spec maven plugin version 1.0.0

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>

* change default port for manual testing

Signed-off-by: olivier lamy <oliver.lamy@gmail.com>
2020-09-14 21:01:10 +10:00
Simone Bordet 892a715bea Small javadocs fixes.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-09-10 13:35:06 +02:00
Simone Bordet f81bf7f945
Fixes #3766 - Introduce HTTP/2 API to batch frames. (#5222)
* Fixes #3766 - Introduce HTTP/2 API to batch frames.

Introduced Stream.FrameList to hold HEADERS+DATA+HEADERS frames.
These are often used by the client and by the server when the
request/response content is known and FrameList will allow to
send them in a single TCP write, rather than multiple ones.

Rewritten HttpSenderOverHTTP2.sendHeaders() and
HttpTransportOverHTTP2.sendHeaders() to take advantage of
FrameList.

Now using ConcurrentHashMap as a client context, because
with DEBUG logging enabled it may be access concurrently.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-09-10 10:13:14 +02:00
Simone Bordet 1e90d13127 Fixes #5103 - Proxy sets protocol version to 2.0 instead of 1.1 when accessed from H2 client.
Fixed by removing the explicit version copy.
Leaving it at default would make the client transport
decide the version based on the transport protocol it uses.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-09-02 16:39:02 +02:00
Simone Bordet 0af5f676cd Issue #5147 - HTTP2 RoundRobinConnectionPool with maxUsage
Reworked HTTP/2 release after an exchange is terminated.

Previously, the release was bound to 2 events: onStreamClosed(),
introduced for #2796, and exchangeTerminated().
Unfortunately, if the former happens before the latter and
closes the connection, the latter will see the exchange as
aborted, while in fact it was successful, causing what
reported in #5147, an AsynchronousCloseException.

Now, the release is always performed by the exchangeTerminated()
event. With respect to #2796, the stream is always already
closed by the time the exchangeTerminated() event fires (it
was not before).

Reworked the implementation of RoundRobinConnectionPool using
a lock and aggressively trying to open new connections.

A second fix is related to HttpDestination.release(Connection).
If the connection is closed for e.g. overuse, we need to trigger
the processing of queued requests via send(create: true).

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-08-22 22:10:08 +02:00
Ludovic Orban e9dad975e6 Re-implement HTTP connection pooling with a non-queuing algorithm
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2020-07-31 10:36:43 +02:00
Joakim Erdfelt fe9deae849 Updating to version 9.4.32-SNAPSHOT 2020-07-23 13:53:47 -05:00
Joakim Erdfelt 450ba27947 Updating to version 9.4.31.v20200723 2020-07-23 12:46:54 -05:00
Lachlan Roberts de1b6745c5 the DO NOT EDIT comment in .mod files should start with '#'
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2020-07-15 16:47:22 +10:00
Simone Bordet 94956d6e8b Issue #4904 - WebsocketClient creates more connections than needed.
Fixed MaxConcurrentStreamsTest - it was always broken.
The problem was that the call to super.onSettings(...) was done
_after_ sending the request, so the connection pool was still
configured with the default maxMultiplex=1024.

Also fixed AbstractConnectionPool to avoid a second call to
activate() if we are not trying to create a new connection.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-07-09 16:18:15 +02:00
Simone Bordet f2c6b67827
Fixes #4971 - Simplify Connection.upgradeFrom()/upgradeTo(). (#5008)
Fixes #4971 - Simplify Connection.upgradeFrom()/upgradeTo().

Now the upgrade-from connection produces a "floating" buffer 
(not belonging to a pool), so that it can release the original buffer.

The upgrade-to connection is free to copy or store this "floating" buffer.

Strengthened ByteBufferPool behavior when releasing non-pooled
ByteBuffers: the buffer is now discarded.

Updated javadocs and all implementations.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-07-06 22:45:03 +02:00
Simone Bordet 43353d0ca9 Issue #4890 - JettyClient behavior when SETTINGS_HEADER_TABLE_SIZE is set to 0 in SETTINGS Frame.
Fixed NPE in debug logs.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-07-06 17:29:07 +02:00
Simone Bordet ae43b70a9f
Jetty 9.4.x 4967 buffer corruption for http2 failures (#5001)
Fixes #4967 - Possible buffer corruption in HTTP/2 session failures

Partially reverted the changes introduced in #4855, because they
were working only when sends were synchronous.

Introduced ByteBufferPool.remove(ByteBuffer) to fix the issue.
Now when a concurrent failure happens while frames are being
generated or sent, the buffer is discarded instead of being
recycled, therefore resolving the buffer corruption.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-07-03 16:35:33 +02:00
Simone Bordet c0481a5e5f
Issue #4965 - WINDOW_UPDATE for locally failed stream should not clos… (#4969)
* Issue #4965 - WINDOW_UPDATE for locally failed stream should not close the HTTP/2 session.

Improved HTTP2Session.onWindowUpdate() code to correctly check whether
the stream is already closed, and if so, just drop the WINDOW_UPDATE.
Refactored onResetForUnknownStream() to base class.
Other small refactorings to improve logging.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-06-18 15:23:51 +02:00
Joakim Erdfelt 6df6fa33b8 Updating to version 9.4.31-SNAPSHOT 2020-06-11 08:24:34 -05:00
Joakim Erdfelt 271836e4c1 Updating to version 9.4.30.v20200611 2020-06-11 07:21:18 -05:00
Ludovic Orban 714a9204b3 #4855 fix race condition that can sometimes make H2 stream send an improper reset with cancel error code instead of protocol error code when the client sends more data than the content-length header specifies
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2020-06-09 16:59:49 +02:00
Simone Bordet 56bda1b3ae
Jetty 9.4.x 4855 h2spec failures (#4946)
* Fixes #4855 - Occasional h2spec failures on CI

In case of bad usage of the HTTP/2 API, we don't want to close()
the stream but just fail the callback, because the stream
may be performing actions triggered by a legit API usage.

In case of a call to `AsyncListener.onError()`, applications may decide to call
AsyncContext.complete() and that would be a correct usage of the Servlet API.
This case was not well handled and was wrongly producing a WARN log with an
`IllegalStateException`.

Completely rewritten `HttpTransportOverHTTP2.TransportCallback`.
The rewrite handles correctly asynchronous failures that now are executed
sequentially (and not concurrently) with writes.
If a write is in progress, the failure will just change the state and at the
end of the write a check on the state will determine what actions to take.

A session failure is now handled in HTTP2Session by first failing all the
streams - which notifies the Stream.Listeners - and then failing the session
- which notifies the Session.Listener.
The stream failures are executed concurrently by dispatching each one to a
different thread; this means that the stream failure callbacks are executed
concurrently (likely sending RST_STREAM frames).
The session failure callback is completed only when all the stream failure
callbacks have completed, to ensure that a GOAWAY frame is processed after
all the RST_STREAM frames.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-06-09 13:15:05 +02:00
Simone Bordet b904a5cc85 Do not assume the ByteBuffer has a backing byte array.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-06-04 11:49:42 +02:00
Simone Bordet 0ae2fff361
Fixes #4904 - WebsocketClient creates more connections than needed. (#4911)
* Fixes #4904 - WebsocketClient creates more connections than needed.

Fixed connection pool's `acquire()` methods to correctly take into account the number of queued requests.
Now the connection creation is conditional, triggered by
explicit send() or failures.
The connection creation is not triggered _after_ a send(),
where we aggressively send more queued requests - or
in release(), where we send queued request after a previous
one was completed.
Now the connection close/removal aggressively sends more
requests triggering the connection creation.

Also fixed a collateral bug in `BufferingResponseListener` - wrong calculation of the max content length.

Restored `ConnectionPoolTest` that was disabled in #2540, cleaned it up, and let it run for hours without failures.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-06-01 15:48:44 +02:00
Greg Wilkins 646010e309
Jetty 9.4.x #4890 do not index large fields (#4927)
* Issue #4890 Large HTTP2 Fields encoded

When choosing a strategy to encode a HTTP2 field, do not use indexed
if the field is larger than the dynamic table.

Signed-off-by: Greg Wilkins <gregw@webtide.com>

* Issue #4890 Large HTTP2 Fields encoded

Fixed checkstyle in test

Signed-off-by: Greg Wilkins <gregw@webtide.com>

* Issue #4890 Large HTTP2 Fields encoded

Only index 0 content-length

Signed-off-by: Greg Wilkins <gregw@webtide.com>

* Issue #4890 Large HTTP2 Fields encoded

Fixed comments

Signed-off-by: Greg Wilkins <gregw@webtide.com>

* Issue #4890 Large HTTP2 Fields encoded

Don't parse int

Signed-off-by: Greg Wilkins <gregw@webtide.com>
2020-06-01 14:12:50 +02:00
Joakim Erdfelt 5d6f3e2ddc Updating to version 9.4.30-SNAPSHOT 2020-05-21 13:42:25 -05:00
Joakim Erdfelt 77c232aed8 Updating to version 9.4.29.v20200521 2020-05-21 12:04:14 -05:00
Greg Wilkins 3845790c5d Hpack optimizations
If the dynamic table size is already 0, do not evictAll.

Signed-off-by: Greg Wilkins <gregw@webtide.com>
2020-05-20 10:47:23 +02:00
Ludovic Orban f039becb97
Replace HashSet with ArrayList as that has two benefits: (#4871)
- ArrayList contains() + add() is faster than HashSet add() for small collections
 - A heap allocation of the iterator is required when iterating HashSet while iterating ArrayList can do with a stack allocation

Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2020-05-13 09:14:59 +02:00
Ludovic Orban 6729a6f689 Solve lock contention creating HTTP2 streams (#2188) while fixing race condition that breaks http channels recycling (#4695)
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2020-04-29 14:25:51 +02:00
Simone Bordet 0e30d6b751 Fixes #4764 - HTTP2 Jetty Server does not send back content-length.
Fixed InterleavingTest that was using the wrong MetaData.Response constructor.
Fixed handling of HEAD methods in HttpTransportOverHTTP2.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-04-14 13:05:24 +02:00
Simone Bordet 3e96bf8621 Merged branch 'jetty-9.4.x' into 'jetty-9.4.x-4764-http2_content_length'. 2020-04-14 11:45:48 +02:00
Simone Bordet 2e85b3e169 Fixes #4764 - HTTP2 Jetty Server does not send back content-length.
Updates after review.
Now the Content-Length header is generated by HpackEncoder based on
MetaData.contentLength, so that the MetaData.HttpFields are not modified.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-04-14 11:44:58 +02:00
Simone Bordet dc89f7f264 Fixes #4764 - HTTP2 Jetty Server does not send back content-length.
Sending Content-Length header if known at the time of sending the
response headers.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-04-13 17:57:38 +02:00
Joakim Erdfelt 5699b9ff3d Updating to version 9.4.29-SNAPSHOT 2020-04-08 13:15:04 -05:00
Joakim Erdfelt ab228fde9e Updating to version 9.4.28.v20200408 2020-04-08 12:33:56 -05:00
Simone Bordet 7445449d77 Fixes #4714 - Low setMaxConcurrentStreams causes "1/unexpected_data_frame" errors.
Added test case.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-03-26 11:52:39 +01:00
Jesse Wilson 37cfb2fa86 Issue #4714 Updating lastRemoteStreamId on refused streams
Signed-off-by: Jesse Wilson <jwilson@squareup.com>
2020-03-25 22:02:20 -04:00
Simone Bordet 9bb92f81bd Issue #4443 - Track backport of ALPN APIs to Java 8.
Modified jetty-alpn-openjdk8-* classes to support both
pre 8u252 (via alpn-boot) and post 8u252 (via standard API).

Replaced usages of -Xbootclasspath with -javaagent, and
using Jetty ALPN Agent jar rather than Jetty ALPN boot jar.

Removed all alpn-1.8.0*.mod files since now it is
possible to use a fixed version of the ALPN Agent
to cover all the versions.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2020-03-17 11:40:29 +01:00
Joakim Erdfelt 8aabb52557 Updating to version 9.4.28-SNAPSHOT 2020-02-27 13:03:44 -06:00
Joakim Erdfelt a304fd9f35 Updating to version 9.4.27.v20200227 2020-02-27 12:21:57 -06:00