Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stack of potential HTTP/2 improvements #3822

Closed
wants to merge 19 commits into from

Conversation

jrudolph
Copy link
Member

@jrudolph jrudolph commented May 31, 2021

So far this is somewhat of a grab bag. Will create separate PRs later.

Planned further optimizations:

  • incoming data to Strict conversion
  • import and adapt HPACK library to avoid header creation / allocation for already seen headers

@akka-ci akka-ci added validating PR that is currently being validated by Jenkins needs-attention Indicates a PR validation failure (set by CI infrastructure) and removed validating PR that is currently being validated by Jenkins labels May 31, 2021
@akka-ci
Copy link

akka-ci commented May 31, 2021

Test FAILed.

Pull request validation report

Failed Test Suites

Test result for akka-http2-support / Pr-validation / ./ executeTests

[info] ScalaTest
[info] Run completed in 4 minutes, 31 seconds.
[info] Total number of tests run: 44
[info] Suites: completed 3, aborted 0
[info] Tests: succeeded 44, failed 0, canceled 0, ignored 0, pending 1
[info] All tests passed.
[error] Failed: Total 217, Failed 9, Errors 0, Passed 208, Ignored 17, Pending 27
[error] Failed tests:
[error] 	akka.http.impl.engine.http2.Http2ClientServerSpec
[error] 	akka.http.impl.engine.http2.Http2PersistentClientSpec

def tearDown(): Unit = {
system.terminate()
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

did you mean to delete this one, or did it move?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks probably broken merge.

data.runWith(subIn.sink)(subFusingMaterializer)
case Left(data) =>
info.addAllData(data)
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉

@@ -44,7 +44,7 @@ private[http2] object HeaderCompression extends GraphStage[FlowShape[FrameEvent,
case ParsedHeadersFrame(streamId, endStream, kvs, prioInfo) =>
kvs.foreach {
case (key, value) =>
encoder.encodeHeader(os, key.getBytes(HeaderDecompression.UTF8), value.getBytes(HeaderDecompression.UTF8), false)
encoder.encodeHeader(os, key.getBytes(HeaderDecompression.US_ASCII), value.getBytes(HeaderDecompression.US_ASCII), false)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, interesting, I think we have a similar helper already also in akka-http as well.

@jrudolph jrudolph force-pushed the http2-performance-improvements branch from f3ab2df to 595dc45 Compare June 1, 2021 12:41
@akka-ci akka-ci added validating PR that is currently being validated by Jenkins needs-attention Indicates a PR validation failure (set by CI infrastructure) and removed needs-attention Indicates a PR validation failure (set by CI infrastructure) validating PR that is currently being validated by Jenkins labels Jun 1, 2021
@akka-ci
Copy link

akka-ci commented Jun 1, 2021

Test FAILed.

Pull request validation report

Mima Failures
Problems for `akka-http-core`:
akka-http-core: found 4 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.1.12  (filtered 352)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is inherited by class Http2ServerSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 4 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.1.8  (filtered 402)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is inherited by class Http2ServerSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 4 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.1.9  (filtered 393)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is inherited by class Http2ServerSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 6 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.2.1  (filtered 51)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ClientSettings is inherited by class Http2ClientSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2CommonSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 4 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.1.13  (filtered 354)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is inherited by class Http2ServerSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 4 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.1.10  (filtered 361)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is inherited by class Http2ServerSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 4 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.1.14  (filtered 348)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is inherited by class Http2ServerSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 13 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.2.2  (filtered 74)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * method apply(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl in object akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.apply")
 * method unapply(akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl)scala.Option in object akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different generic signature in current version, where it is (Lakka/http/scaladsl/settings/Http2ServerSettings$Http2ServerSettingsImpl;)Lscala/Option<Lscala/Tuple10<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalServerSettings;>;>;>; rather than (Lakka/http/scaladsl/settings/Http2ServerSettings$Http2ServerSettingsImpl;)Lscala/Option<Lscala/Tuple9<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalServerSettings;>;>;>;. See https://github.com/lightbend/mima#incompatiblesignatureproblem
   filter with: ProblemFilters.exclude[IncompatibleSignatureProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.unapply")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2CommonSettings.minCollectStrictEntitySize")
 * method copy(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy")
 * synthetic method copy$default$6()Boolean in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is Int rather than Boolean
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$6")
 * synthetic method copy$default$7()scala.concurrent.duration.FiniteDuration in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is Boolean rather than scala.concurrent.duration.FiniteDuration
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$7")
 * synthetic method copy$default$9()scala.Option in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is scala.concurrent.duration.FiniteDuration rather than scala.Option
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$9")
 * method this(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)Unit in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.this")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 4 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.1.11  (filtered 361)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is inherited by class Http2ServerSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 21 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.2.3  (filtered 47)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * method apply(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl in object akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.apply")
 * method unapply(akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl)scala.Option in object akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different generic signature in current version, where it is (Lakka/http/scaladsl/settings/Http2ServerSettings$Http2ServerSettingsImpl;)Lscala/Option<Lscala/Tuple10<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalServerSettings;>;>;>; rather than (Lakka/http/scaladsl/settings/Http2ServerSettings$Http2ServerSettingsImpl;)Lscala/Option<Lscala/Tuple9<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalServerSettings;>;>;>;. See https://github.com/lightbend/mima#incompatiblesignatureproblem
   filter with: ProblemFilters.exclude[IncompatibleSignatureProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.unapply")
 * method apply(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,Int,scala.Option)akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl in object akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.apply")
 * method unapply(akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl)scala.Option in object akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different generic signature in current version, where it is (Lakka/http/scaladsl/settings/Http2ClientSettings$Http2ClientSettingsImpl;)Lscala/Option<Lscala/Tuple11<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Ljava/lang/Object;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalClientSettings;>;>;>; rather than (Lakka/http/scaladsl/settings/Http2ClientSettings$Http2ClientSettingsImpl;)Lscala/Option<Lscala/Tuple10<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Ljava/lang/Object;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalClientSettings;>;>;>;. See https://github.com/lightbend/mima#incompatiblesignatureproblem
   filter with: ProblemFilters.exclude[IncompatibleSignatureProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.unapply")
 * method copy(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,Int,scala.Option)akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy")
 * synthetic method copy$default$10()scala.Option in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is Int rather than scala.Option
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$10")
 * synthetic method copy$default$6()Boolean in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is Int rather than Boolean
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$6")
 * synthetic method copy$default$7()scala.concurrent.duration.FiniteDuration in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is Boolean rather than scala.concurrent.duration.FiniteDuration
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$7")
 * synthetic method copy$default$9()Int in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is scala.concurrent.duration.FiniteDuration rather than Int
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$9")
 * method this(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,Int,scala.Option)Unit in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.this")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2CommonSettings.minCollectStrictEntitySize")
 * method copy(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy")
 * synthetic method copy$default$6()Boolean in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is Int rather than Boolean
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$6")
 * synthetic method copy$default$7()scala.concurrent.duration.FiniteDuration in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is Boolean rather than scala.concurrent.duration.FiniteDuration
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$7")
 * synthetic method copy$default$9()scala.Option in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is scala.concurrent.duration.FiniteDuration rather than scala.Option
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$9")
 * method this(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)Unit in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.this")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 6 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.2.0  (filtered 65)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ClientSettings is inherited by class Http2ClientSettings in current version.
   filter with: ProblemFilters.exclude[InheritedNewAbstractMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2CommonSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")

akka-http-core: found 21 potential binary incompatibilities while checking against com.typesafe.akka:akka-http-core_2.13:10.2.4  (filtered 27)
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.minCollectStrictEntitySize")
 * abstract method withMinCollectStrictEntitySize(Int)akka.http.javadsl.settings.Http2ServerSettings in interface akka.http.javadsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ServerSettings.withMinCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.javadsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * method apply(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl in object akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.apply")
 * method unapply(akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl)scala.Option in object akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different generic signature in current version, where it is (Lakka/http/scaladsl/settings/Http2ServerSettings$Http2ServerSettingsImpl;)Lscala/Option<Lscala/Tuple10<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalServerSettings;>;>;>; rather than (Lakka/http/scaladsl/settings/Http2ServerSettings$Http2ServerSettingsImpl;)Lscala/Option<Lscala/Tuple9<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalServerSettings;>;>;>;. See https://github.com/lightbend/mima#incompatiblesignatureproblem
   filter with: ProblemFilters.exclude[IncompatibleSignatureProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.unapply")
 * method apply(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,Int,scala.Option)akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl in object akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.apply")
 * method unapply(akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl)scala.Option in object akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different generic signature in current version, where it is (Lakka/http/scaladsl/settings/Http2ClientSettings$Http2ClientSettingsImpl;)Lscala/Option<Lscala/Tuple11<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Ljava/lang/Object;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalClientSettings;>;>;>; rather than (Lakka/http/scaladsl/settings/Http2ClientSettings$Http2ClientSettingsImpl;)Lscala/Option<Lscala/Tuple10<Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lscala/concurrent/duration/FiniteDuration;Lscala/concurrent/duration/FiniteDuration;Ljava/lang/Object;Lscala/Option<Lakka/http/scaladsl/settings/Http2InternalClientSettings;>;>;>;. See https://github.com/lightbend/mima#incompatiblesignatureproblem
   filter with: ProblemFilters.exclude[IncompatibleSignatureProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.unapply")
 * method copy(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,Int,scala.Option)akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy")
 * synthetic method copy$default$10()scala.Option in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is Int rather than scala.Option
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$10")
 * synthetic method copy$default$6()Boolean in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is Int rather than Boolean
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$6")
 * synthetic method copy$default$7()scala.concurrent.duration.FiniteDuration in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is Boolean rather than scala.concurrent.duration.FiniteDuration
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$7")
 * synthetic method copy$default$9()Int in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl has a different result type in current version, where it is scala.concurrent.duration.FiniteDuration rather than Int
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.copy$default$9")
 * method this(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,Int,scala.Option)Unit in class akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings#Http2ClientSettingsImpl.this")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ClientSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ClientSettings.minCollectStrictEntitySize")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2CommonSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2CommonSettings.minCollectStrictEntitySize")
 * method copy(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy")
 * synthetic method copy$default$6()Boolean in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is Int rather than Boolean
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$6")
 * synthetic method copy$default$7()scala.concurrent.duration.FiniteDuration in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is Boolean rather than scala.concurrent.duration.FiniteDuration
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$7")
 * synthetic method copy$default$9()scala.Option in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl has a different result type in current version, where it is scala.concurrent.duration.FiniteDuration rather than scala.Option
   filter with: ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy$default$9")
 * method this(Int,Int,Int,Int,Int,Boolean,scala.concurrent.duration.FiniteDuration,scala.concurrent.duration.FiniteDuration,scala.Option)Unit in class akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl does not have a correspondent in current version
   filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.this")
 * abstract method minCollectStrictEntitySize()Int in interface akka.http.scaladsl.settings.Http2ServerSettings is present only in current version
   filter with: ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings.minCollectStrictEntitySize")


@jrudolph
Copy link
Member Author

jrudolph commented Jun 1, 2021

Added the reverse optimization as well by adding a new option min-collect-strict-entity-size, which will postpone giving out Http messages until at least this many bytes have been seen or the stream has been closed. A downside to that approach is that a request or response can now be delayed indefinitely if no entity bytes are received. We might have to add an extra option to create a streaming message anyway if data is not received after a timeout eventually.

@jrudolph jrudolph force-pushed the http2-performance-improvements branch from 595dc45 to 95b11b7 Compare June 1, 2021 12:58
@akka-ci akka-ci added validating PR that is currently being validated by Jenkins needs-attention Indicates a PR validation failure (set by CI infrastructure) and removed needs-attention Indicates a PR validation failure (set by CI infrastructure) validating PR that is currently being validated by Jenkins labels Jun 1, 2021
@akka-ci
Copy link

akka-ci commented Jun 1, 2021

Test FAILed.

@jrudolph jrudolph force-pushed the http2-performance-improvements branch from 95b11b7 to f6aeeb6 Compare June 1, 2021 13:22
@akka-ci akka-ci added validating PR that is currently being validated by Jenkins tested PR that was successfully built and tested by Jenkins and removed needs-attention Indicates a PR validation failure (set by CI infrastructure) validating PR that is currently being validated by Jenkins labels Jun 1, 2021
@akka-ci
Copy link

akka-ci commented Jun 1, 2021

Test PASSed.

@jrudolph jrudolph force-pushed the http2-performance-improvements branch from 43b15cc to 090b152 Compare June 21, 2021 13:59
@akka-ci akka-ci added validating PR that is currently being validated by Jenkins needs-attention Indicates a PR validation failure (set by CI infrastructure) and removed needs-attention Indicates a PR validation failure (set by CI infrastructure) validating PR that is currently being validated by Jenkins labels Jun 21, 2021
@akka-ci
Copy link

akka-ci commented Jun 21, 2021

Test FAILed.

!!! Couldn't read commit file !!!

@akka-ci akka-ci added validating PR that is currently being validated by Jenkins needs-attention Indicates a PR validation failure (set by CI infrastructure) and removed needs-attention Indicates a PR validation failure (set by CI infrastructure) validating PR that is currently being validated by Jenkins labels Jun 21, 2021
@akka-ci
Copy link

akka-ci commented Jun 21, 2021

Test FAILed.

!!! Couldn't read commit file !!!

@jrudolph
Copy link
Member Author

jrudolph commented Apr 4, 2022

Most of the interesting parts from here have been merged in the meantime.

@jrudolph jrudolph closed this Apr 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs-attention Indicates a PR validation failure (set by CI infrastructure)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants