=htc #20080,#20081,#20082 Simplify pool gateway synch

* Rewrite the pool gateway synchronization

Rewrite the pool gateway synchronization so that:
- The documented race condition in PoolInterfaceActor is gone. No
  PoolInterfaceActor will receive new requests after the gateway
  shutdown has been initiated (fix #20081).
- A gateway created using newHostConnectionPool will no longer
  share its pool with others even when it has been shutdown
  due to idle-timeout and recreated. Also, its original
  materializer will be used to create all the successive
  pools incarnations (fix #20080).
- Collapsing chains of gateways do no longer need to be created.
  The gateways are now only an entrypoint to the pool master
  actor, and this actor is in charge of keeping a cache of
  currently active pools and recreate them from the information
  given by the gateway when needed.

* Add copyright header

* Mark PoolMasterActor as INTERNAL API

* Larger outer timeout

* Define Props in PoolMasterActor object

* Comment INTERNAL API

* Remove unused import
This commit is contained in:
Samuel Tardieu 2016-04-08 15:26:42 +02:00 committed by Konrad Malawski
parent a055cc64d4
commit 81579bd403
7 changed files with 324 additions and 171 deletions

View file

@ -714,7 +714,27 @@ object MiMa extends AutoPlugin {
ProblemFilters.exclude[ReversedAbstractMethodProblem]("akka.persistence.Eventsourced#ProcessingState.onWriteMessageComplete"),
// #19390 Add flow monitor
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.stream.scaladsl.FlowOpsMat.monitor")
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.stream.scaladsl.FlowOpsMat.monitor"),
// #20080, #20081 remove race condition on HTTP client
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.Http#HostConnectionPool.gatewayFuture"),
ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.http.scaladsl.Http#HostConnectionPool.copy"),
ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.http.scaladsl.Http#HostConnectionPool.this"),
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.HttpExt.hostPoolCache"),
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.HttpExt.cachedGateway"),
ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.http.scaladsl.Http#HostConnectionPool.apply"),
ProblemFilters.exclude[FinalClassProblem]("akka.http.impl.engine.client.PoolGateway"),
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.impl.engine.client.PoolGateway.currentState"),
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.impl.engine.client.PoolGateway.apply"),
ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.http.impl.engine.client.PoolGateway.this"),
ProblemFilters.exclude[MissingClassProblem]("akka.http.impl.engine.client.PoolGateway$NewIncarnation$"),
ProblemFilters.exclude[MissingClassProblem]("akka.http.impl.engine.client.PoolGateway$Running$"),
ProblemFilters.exclude[MissingClassProblem]("akka.http.impl.engine.client.PoolGateway$IsShutdown$"),
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.impl.engine.client.PoolInterfaceActor.this"),
ProblemFilters.exclude[MissingClassProblem]("akka.http.impl.engine.client.PoolGateway$Running"),
ProblemFilters.exclude[MissingClassProblem]("akka.http.impl.engine.client.PoolGateway$IsShutdown"),
ProblemFilters.exclude[MissingClassProblem]("akka.http.impl.engine.client.PoolGateway$NewIncarnation"),
ProblemFilters.exclude[MissingClassProblem]("akka.http.impl.engine.client.PoolGateway$State")
)
)
}