Commit Graph

204 Commits

Author SHA1 Message Date
Greg Wilkins 0cb4f5629d
Jetty 9.4.x 1803 proposal 0+2 (#2199)
Merging this PR for #2199 as we currently think it is not worse than previous and the code base is definitely simpler.   While JMH has shown significant benefits for this approach, we have yet been able to demonstrate them in full scale integration tests - however that is likely due to GC and thread pool issues dominating.

A `org.eclipse.jetty.http2.PEC_MODE` System property has been added to allow the EWYK scheduling to be disabled for HTTP/2 if need be.


* Implementation of #1803 proposal 2 - EITHER dispatch type for EWYK
* made code more readable
* increase small threadpools in tests for extra reserved thread
* clean up
* minor code simplifications
* Work in progress to simplify reserved thread pool
* use a single ReservedThreadPool built into the QueuedThreadPool
* fixed javadoc
* removed more old reserved thread references
* disable EWYK for h2
* fixes from review
* use EWYK for HTTP2
* Fixed javadocs, imports and QueuedThreadPool constructors.
* fix javadoc
* EWYK avoid unnecessary pendings
* after review
* fixed merge with jetty-threadpool.xml
* alternate EWYK implementations
* added jetty copyright headers
* Simplified EWYK code after review
* fixed bad merge
* Code cleanups.
* Improved Javadocs for deprecated property "reservedThreads".
* Improved Javadocs for deprecated property "reservedThreads".
* added a system property to enable only PEC for HTTP/2

Signed-off-by: Greg Wilkins <gregw@webtide.com>
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2018-02-27 14:29:59 +11:00
Simone Bordet 8a6b33a3e8 Fixes #2190 - HTTP/2 close and GOAWAY behavior.
Now the receiver of a GOAWAY also replies with a GOAWAY
before closing the connection.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2018-02-09 10:55:39 +01:00
Greg Wilkins ab5fc29cca Jetty 9.4.x 1803 proposal 0 - single ReservedThreadExecutor (#2119)
Issue #1803 - Review usage of scheduling strategies

Use a single ReservedThreadExecutor built into the QueuedThreadPool
via new interface TryExecutor.

Signed-off-by: Greg Wilkins <gregw@webtide.com>
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2018-02-08 11:08:48 +01:00
Joakim Erdfelt 21365234f8 Issue #2108 - Updating license headers for year 2018 2018-01-09 09:44:41 -06:00
Joakim Erdfelt 41ed9f29f4 Merge remote-tracking branch 'origin/jetty-9.3.x' into jetty-9.4.x 2018-01-09 09:37:25 -06:00
Joakim Erdfelt fa4c7b0ca9 Issue #2108 - Updating license headers for year 2018 2018-01-09 08:39:37 -06:00
Simone Bordet 1cad36969f Made test more robust.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2018-01-03 10:46:02 +01:00
Simone Bordet d88e2b767f Fixes #2037 - HTTP/2 stream reset leaves stream frames in the flusher.
Now waking up the flusher via iterate() after a reset has been received.
This ensures that frames that may have stalled are removed from the
flusher queue.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2017-12-11 10:57:13 +01:00
Simone Bordet 4236f14955 Fixes #1891 - Make HTTP/2 async error notifications configurable.
Introduced HttpConfiguration.notifyRemoteAsyncErrors, true by default.
2017-10-12 12:13:02 +02:00
Simone Bordet 006dee439f Code cleanups.
Added TODOs to remember the link between the HTTP2Connection
fill callback and HTTP2ConnectionFactory.reservedThreads.
2017-09-08 10:52:40 +02:00
Simone Bordet cd08d2502f Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2017-08-21 17:00:05 +02:00
Simone Bordet f7925aebd2 Removed debug logging. 2017-08-21 12:12:26 +02:00
Simone Bordet 87d090e062 Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2017-08-11 16:42:21 +02:00
Simone Bordet d3d02f227e Fixes #1719 - Improve handling of HTTP/2 queued requests.
Idle timeout have a special meaning in that they become a no-operation
if the application is dispatched but idle (neither reading nor writing).

HttpChannelOverHTTP2 now forwards the idle timeout to HttpInput, which
will only change its state if it is interested in reading.

HttpInput.consumeAll() has been modified to consume all input even if
it's already failed.

Failures caused by the other peer (e.g. I/O failures or stream resets)
are now retained and will eagerly consumed any queued data to free up
the flow control windows.
2017-08-09 16:21:53 +02:00
Greg Wilkins a105be95e4 Issue #1637 Thread per HTTP/2 Connection
This fix simplifies the EWYK scheduler by factoring out the preallocated producer into a
ReservedThreadExecutor class.   A shared ReservedThreadExecutor can then be used by multiple
EWYK instances to avoid over allocation of threads.

Squashed commit of the following:

commit c435dc20e25bd274d69423be1be7b0565925f249
Merge: 58a5a9a 90e5b56
Author: Greg Wilkins <gregw@webtide.com>
Date:   Wed Jun 21 10:48:22 2017 +0200

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk3

commit 58a5a9a655ee1a72a66f54ac8c95d7c9d73afe85
Author: Simone Bordet <simone.bordet@gmail.com>
Date:   Wed Jun 14 15:56:43 2017 +0200

    Code cleanups.

commit 4e5296216b52948523572352cba391438ff6b494
Author: Greg Wilkins <gregw@webtide.com>
Date:   Wed Jun 14 07:34:58 2017 +0200

    refixed Producing to Reproducing

commit a1f8682f86d1f0803121162e3f14d7768286d3ed
Author: Greg Wilkins <gregw@webtide.com>
Date:   Wed Jun 14 07:26:29 2017 +0200

    fixed Producing to Reproducing

commit 9468932e062d2271d8dc1d43a78544757732fff5
Author: Greg Wilkins <gregw@webtide.com>
Date:   Tue Jun 13 16:33:44 2017 +0200

    fixed javadoc

commit 9d4941eb97638fec09b3fe34d423538d17943b6f
Author: Greg Wilkins <gregw@webtide.com>
Date:   Tue Jun 13 16:05:27 2017 +0200

    Renamed Preallocated to ReservedThread

commit 6d3379ab64c6dcc2a7aa8ec7088afd77863816c2
Author: Greg Wilkins <gregw@webtide.com>
Date:   Tue Jun 13 12:28:52 2017 +0200

    Added configuration in modules

commit 1bd1adea4682538e1546c2ae53f4c9340dafb3bb
Merge: 83418a9 6702248
Author: Greg Wilkins <gregw@webtide.com>
Date:   Tue Jun 13 10:09:29 2017 +0200

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk3

commit 83418a91320c8bfc54465ca02efdce0d2c874a0e
Author: Greg Wilkins <gregw@webtide.com>
Date:   Tue Jun 13 10:08:35 2017 +0200

    javadoc

commit 62918fd39189fed3414fec4a7c8380c21e90a4b8
Author: Greg Wilkins <gregw@webtide.com>
Date:   Sat Jun 10 00:04:06 2017 +0200

    Improved EatWhatYouKill implementation

    Simplified by abstracting out PreallocatedExecutor
    Removed invocation execution
    HTTP2 now uses a shared PreallocationExcecutor between connection
2017-08-08 09:13:44 -07:00
Simone Bordet 88617b9233 Fixes #1595 - Avoid sending unnecessary stream WINDOW_UPDATE frames.
Now the flow control strategy checks whether the stream is already
remotely closed, and if so it does not send the window update.
2017-08-08 09:10:24 -07:00
Simone Bordet 1ac103b6ce Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2017-05-17 13:16:21 +02:00
Simone Bordet d53af5d737 Fixes #523 - TLS close behaviour breaking session resumption.
Since requests cannot be connection delimited, don't call
sslEngine.closeInbound() on the server.

On the client, added a configuration parameter to allow missing
TLS Close Message, since many servers do that.

Introduced SslConnection.allowMissingCloseMessage so that it
throws in case of truncation attacks.
2017-05-17 13:07:21 +02:00
Simone Bordet 8c26eddbc6 Fixes #1504 - Improve defaults for HTTP/2 flow control.
Defaults are now 16/8 MiB on the client, and 1/0.5 MiB on the server
for session/stream.
2017-04-26 10:43:54 +02:00
Greg Wilkins f06c7c358f Fixes #1440
Improve low resource solution for scheduling strategy.

Replaced the dual scheduling strategy with a single re-implementation of EatWhatYouKill
that can adapt to act as ProduceConsume, ExectureProduceConsume or ProduceExecuteConsume
as need be.

Squashed commit of the following:

commit 25eeb32181
Author: Greg Wilkins <gregw@webtide.com>
Date:   Sat Apr 1 09:08:49 2017 +1100

    renamed variables

commit 4f370d84ca
Merge: 8159c50 823cbe1
Author: Greg Wilkins <gregw@webtide.com>
Date:   Fri Mar 31 11:54:26 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit 8159c508f0
Merge: 5805a92 daf61cd
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 30 17:28:00 2017 +1100

    Merge remote-tracking branch 'origin/jetty-9.3.x' into jetty-9.4.x-ewyk

commit daf61cd294
Author: Denis Nedelyaev <denvned@gmail.com>
Date:   Thu Mar 30 04:15:32 2017 +0300

    Fix memory leak in GzipHandler (#1429)

    Looks like this leak shows itself only with asynchronous responses.

    Some relevant info: http://www.devguli.com/blog/eng/java-deflater-and-outofmemoryerror/

    Signed-off-by: Denis Nedelyaev <denvned@gmail.com>

commit 5805a92d0e
Merge: cfabbd2 dc759db
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 30 17:12:38 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit cfabbd2341
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 30 16:04:57 2017 +1100

    minor cleanups

commit c7aa64aa10
Merge: bacf51a 18f17ac
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 30 14:58:37 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit bacf51a83d
Merge: 11ba4bc 2fafa1d
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 30 14:13:36 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit 11ba4bc849
Merge: 69003d3 1a0b2df
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 30 13:48:09 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit 69003d3dd9
Merge: f89b08d a8ff18d
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 30 12:35:27 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit f89b08d08a
Merge: 7a87c8e 00b42ca
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 23 16:01:00 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit 7a87c8ec9d
Merge: 1a92015 12dc169
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 23 10:27:14 2017 +1100

    Merge remote-tracking branch 'origin/jetty-9.4.x' into jetty-9.4.x-ewyk

commit 1a92015471
Author: Greg Wilkins <gregw@webtide.com>
Date:   Tue Mar 21 09:23:53 2017 +1100

    better spruious wakeup handling and other simplifications

commit c01a910b69
Merge: 0b2b9ea 67ec4b0
Author: Greg Wilkins <gregw@webtide.com>
Date:   Fri Mar 17 14:59:37 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit 0b2b9ea187
Author: Greg Wilkins <gregw@webtide.com>
Date:   Fri Mar 17 14:52:49 2017 +1100

    cleanup

commit c1d92ebde6
Author: Greg Wilkins <gregw@webtide.com>
Date:   Fri Mar 17 13:41:45 2017 +1100

    Fixed push

commit d2d6bc3e65
Author: Greg Wilkins <gregw@webtide.com>
Date:   Fri Mar 17 12:18:03 2017 +1100

    minor cleanups

commit c1a159b7a9
Merge: 01349ac 78f4712
Author: Greg Wilkins <gregw@webtide.com>
Date:   Fri Mar 17 09:30:44 2017 +1100

    Merge branch 'jetty-9.4.x' into jetty-9.4.x-ewyk

commit 01349ac935
Merge: 4dc1503 08f351b
Author: Greg Wilkins <gregw@webtide.com>
Date:   Fri Mar 17 08:16:06 2017 +1100

    Merge remote-tracking branch 'origin/jetty-9.4.x' into jetty-9.4.x-ewyk

commit 4dc15032ba
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 16 23:26:59 2017 +1100

    work in progress

commit 5d18c654b8
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 16 22:05:03 2017 +1100

    work in progress

commit d52a09a6cd
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 16 18:03:16 2017 +1100

    work in progress

commit c097db32e7
Author: Greg Wilkins <gregw@webtide.com>
Date:   Thu Mar 16 15:59:29 2017 +1100

    Experiement enhancement to EatWhatYouKill ExecutionStrategy

    Use the existence of a pending producer threads to determine if low resources or not.
2017-04-01 09:18:37 +11:00
Greg Wilkins 9ccf0a5337 Merge remote-tracking branch 'origin/jetty-9.3.x' into jetty-9.4.x 2017-03-09 16:39:30 +11:00
Greg Wilkins 2219863c11 Issue #1340 Consistent optional use of query string in PushCacheFilter 2017-03-09 16:24:31 +11:00
Simone Bordet 7e7459d825 Fixes #612 - Support HTTP Trailer.
Implemented support in the generic HttpChannel and Request classes.
Linked HTTP/1.1 and HTTP/2 trailers to call HttpChannel, so that trailers
are now available in Servlet APIs by casting to Jetty's Request class.
The semantic is that trailers will only be available _after_ reading
the request content.
2017-01-30 15:17:59 +01:00
Simone Bordet 0c8273f2ca Happy New Year 2017. 2017-01-19 19:26:41 +01:00
Simone Bordet 07838b057f Happy New Year 2017. 2017-01-19 18:54:03 +01:00
Simone Bordet 347c48d657 Revert "resolve merge and update license headers"
This reverts commit 53b31b03dd, reversing
changes made to 4565c186d7.
2017-01-19 18:26:43 +01:00
Jesse McConnell 53b31b03dd resolve merge and update license headers 2017-01-19 09:33:16 -06:00
Greg Wilkins df0f645aa4 fix #1248 2017-01-12 11:29:56 +11:00
Simone Bordet 95c7e78eaf Issue #1220 - PushCacheFilter does not add the context path to pushed resources.
Now taking into account the context path to cache and push resources.
2017-01-05 16:32:41 +01:00
Simone Bordet c018eb5b92 Issue #1209 - IllegalStateException when HTTP/2 push is disabled.
Skipping filter logic when HTTP/2 push is disabled.
2016-12-31 12:19:46 +01:00
Simone Bordet dd3a73e57a Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-12-14 11:19:49 +01:00
Simone Bordet 07c9bc5a51 Fixes #1169 - HTTP/2 reset on a stalled write does not unblock writer thread.
The fix notifies the transport when a reset frame is received,
allowing the transport to fail the write callback which then notifies
the application, either by throwing (in case of blocking writes) or
by calling error listeners.

Also added a guard, in HttpChannel.handle() for the ERROR_DISPATCH case,
that checks if the response is already committed, and if so, abort
the transport - similar to what's already there for 9.4.
2016-12-14 11:07:00 +01:00
Simone Bordet a721e8b25d Fixes #1148 - Support HTTP/2 HEADERS trailer. 2016-12-08 10:08:56 +01:00
Simone Bordet e78c117c01 Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-11-14 22:30:08 +01:00
Simone Bordet 5e5d6913e6 Fixes #1099 - PushCacheFilter pushes POST requests. 2016-11-14 22:28:27 +01:00
Greg Wilkins 4eca898ab0 fixed race in test 2016-10-05 16:20:45 +11:00
Simone Bordet a292ef0652 Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-09-26 15:52:18 +02:00
Simone Bordet 4fcf22a2c5 Fixes test after the changes for #960. 2016-09-26 15:51:25 +02:00
Simone Bordet 5ec60a30ed Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-09-14 16:44:39 +02:00
Simone Bordet aa00e4207d Issue #922 - Implements methods Connection.getBytes[In|Out]().
Implemented for HTTP/2.
2016-09-14 14:04:23 +02:00
Simone Bordet 6f20feddcb Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-08-12 14:57:47 +02:00
Simone Bordet 9f9e9ecaf9 Changes for Issue #824 (#825)
* Issue #824 - Implement notifications of asynchronous error conditions for HTTP/2.

Introduced new method HttpChannelState.asyncError() to be called in
case of asynchronous errors, i.e. those errors that do not happen in
the HttpChannel.handle() loop.

Implemented HTTP/2 callbacks to call HttpChannelState.asyncError()
and plug in the existing error handling mechanism.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>

* Issue #824 - Implement notifications of asynchronous error conditions for HTTP/2.

Improved implementation to ignore idle timeouts for streams and
session in case that requests are being handled, matching the HTTP/1.1
behavior.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2016-08-12 11:02:52 +02:00
Simone Bordet 823ba4add6 Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-07-21 18:15:38 +02:00
Simone Bordet 6a15bbfb2b Issue #751 - Remove usages of ArrayQueue. 2016-07-21 17:55:48 +02:00
Simone Bordet 9c472f959a Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-07-14 16:19:18 +02:00
Simone Bordet 7172127236 Fixes #694 - http2.client.StreamResetTest.testServerExceptionConsumesQueuedData stack not suppressed in test 2016-07-14 16:18:55 +02:00
Simone Bordet d976b4d36a Merged branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-07-14 12:44:15 +02:00
Simone Bordet 2387d973ec Made test more robust on slower machines. 2016-07-14 12:43:33 +02:00
Greg Wilkins 34a9e43c50 restored long test timer 2016-07-14 15:17:50 +10:00
Simone Bordet 2954ef0fd8 Merge branch 'jetty-9.3.x' into 'jetty-9.4.x'. 2016-07-13 20:10:08 +02:00