Dear hakkers,
We are happy to announce Akka Http 10.0.11, the eleventh release of the Akka Http 10.0 series. It marks the one year anniversary of the 10.0 series. As a special present the community and Akka team worked together to add the long awaited akka-http-caching module inspired by spray-caching.
It also features a new implementation of the client pool infrastructure. This will allow us in the future to finally tackle many of the issues reported for the existing infrastructure like request timeouts, handling unread response entities, and other issues more easily.
In an ongoing behind-the-scenes effort, @jonas, @jlprat and others continued to improve the structure of our documentation to consolidate Java and Scala documentation. This reduction in duplication of documentation content will allow us to make changes to the documentation more easily in the future. Thanks a lot!
New caching module, akka-http-caching
In a several month long effort members from the community and the Akka team discussed and implemented the long-awaited replacement
of spray-caching. The new module akka-http-caching
got quite an overhaul over spray-caching and is now backed by
caffeine.
Thanks a lot, @tomrf1, @jonas, @ben-manes, @ianclegg for the fruitful discussions and for providing the implementation!
The caching API is currently marked with @ApiMayChange
and thus may change based on feedback from real world usage.
Some improvements are already planned to make it into
future releases.
We hope further collaboration within the community will help us stabilize the API.
See the documentation for more information.
Http Client Pool Infrastructure Rewrite
The existing host connection pool infrastructure has accrued quite a lot of issues that are hard to fix. Therefore, we
decided to rewrite the old version which was based on a stream graph jungle with a new version implemented as a single
GraphStage
which will be easier to maintain. The new infrastructure already passes all the old tests and is now considered
ready to be tested. The new implementation can be enabled with the feature flag akka.http.host-connection-pool.pool-implementation = new
.
One important feature that is available only with the new pool implementation is a new warning that will be shown
if user code forgets to read or discard a response entity in time (which is one of the most prominent usage problems with our client
API). If you experienced problems with the old implementation, please try out the new implementation and report any issues
you find.
We hope to stabilize the new implementation as soon as possible and are going to make it the default in a future version.
Incompatible changes to akka.http.{java,scala}dsl.coding classes
To clean up internal code, we made a few incompatible changes to classes that were previously kept public accidentally.
We now made those classes private and marked them as @InternalApi
. Affected classes are akka.http.scaladsl.coding.DeflateDecompressorBase
,
akka.http.scaladsl.coding.DeflateCompressor
, and akka.http.scaladsl.coding.GzipCompressor
. The actual codec APIs,
Gzip
and Deflate
, are not affected.
This is in violation with a strict reading of our binary compatibility guidelines. We still made that change for
pragmatic reasons because we believe that it is unlikely that these classes have been used or extended by third parties.
If this assumption turns out to be too optimistic and integration with third-party code breaks because of this,
please let us know.
List of Changes
Improvements
akka-http-core
- New host connection pool infrastructure (#1312)
- Allow disabling of parsing to modeled headers (#1550)
- Convert RFC references in documents in model classes to scaladoc (#1514)
- Allow configuration of default http and https ports (#1449)
- Remove unnecessary implicit
materializer
parameter in several top-levelHttp
entry point APIs (#1464) - Add
X-Forwarded-Proto
andX-Forwarded-Host
header models (#1377) - Lookup predefined header parsers as early as possible (#1424)
akka-http
- Add multiple file upload directive (#1033)
- Add Marshaller.oneOf(m1, m2) to JavaDSL (#1551)
- Improve performance of LineParser for SSE unmarshalling (#1508)
- Automatically probing and decompression support for zlib wrapped deflate streams (#1359)
- Simplify implicit parameter structure in FormFieldDirectives (#541)
- Return BadRequest when size of FormData exceeds limit of
withSizeLimit
directive (#1341)
akka-http-testkit
- Provide Dilated Timeouts for Java Testkit (#1271)
- Add more comprehensive description of the TestRoute run methods (#1148)
- Add a runWithRejections method to the Java TestRoute API (#1148)
- Support separation of route execution from checking in the Java DSL (#1148)
akka-http-caching
- New module partly ported from spray-caching backed by caffeine (#213)
Documentation
- Ongoing work on consolidating Java and Scala documentation (#1290)
- Update Paradox and docs to use new features (#1436)
Build
- Update to sbt 1.0.x
Bug Fixes
akka-http-core
- Fix userinfo parsing to percent decode input in UriParser (#1558)
- Remove duplicate settings from akka.http.host-connection-pool.client so that akka.http.client will be picked up by default (#1492)
- Add minConnections modifier to javadsl ConnectionPoolSettings (#1525)
- Fix race condition in WebSocket switch leading to broken websocket connections in tests (#1515)
akka-http
- Mark coding implementation classes as internal API (#1570)
Credits
A total of 62 issues were closed since 10.0.10.
The complete list of closed issues can be found on the 10.0.11 milestone milestones on GitHub.
For this release we had the help of 33 contributors – thank you all very much!
commits added removed
24 2346 387 Johannes Rudolph
13 918 444 Jonas Fonseca
8 53 45 Arnout Engelen
7 81 30 Konrad `ktoso` Malawski
5 37 15 Kyle Song
3 137 142 Martynas Mickevičius
3 264 350 Atiq Sayyed
2 166 34 tom-walford
2 16 23 Christopher Batey
2 12 11 golem131
2 22 3 Ángel Cervera Claudio
1 1 1 Kuba Gruszka
1 2 1 Jimin Hsieh
1 6 4 olofwalker
1 4 4 Daniel Kalman
1 49 5 Dmitry Avershin
1 53 4 Song Kun
1 6 6 Logan Nelson
1 20 0 Tim Steinbach
1 1 1 Tim Moore
1 157 11 Kennedy Oliveira
1 739 70 Andrew Lawson
1 1 1 abrasha
1 2 2 satansk
1 963 2 tomrf1
1 1 1 Matthias Lüneberg
1 26 0 Andriy Yurchuk
1 13 0 Niko Will
1 1 1 Juan José Vázquez
1 106 2 Josep Prat
1 3 3 Jim Balhoff
1 2 0 Michel Davit
1 13 2 James Roper
Happy hakking!
– The Akka Team