- instead of creating local top-level actors per pipeline, just create
one system actor through which everything is sent
- this enables storing settings (like what to throttle how) within this
actor and applying settings when connections come up later
- it also gets rid of the blocking actor creation from
NetworkFailureInjector, fixing the dead-lock
- moved also the ServerFSMs to be children of the Controller
- all actors have proper names now for easier debugging
- protect all internal API using private[akka] and ScalaDoc
- remove package object which was after a previous refactoring only used
from a single place anyway
- document all public API methods, add brief description how failure
injector works
- include remoteTests in the top-level aggregate project
- the Controller is started with the required initial number of
participants
- if that is >0, it will hold off sending Done to the clients until that
number has connected, then set it to zero
- if that is <=0, send Done back immediately upon connect
- split only right before send (if necessary)
- do not reschedule Tick if that has already been done, because the head
of the queue does not change so the old data are still correct
- make test a bit less fickle wrt. timing
- will keep track of theoretical packet boundaries and send on timer
tick or send request according to actual time
- will split packets if calculated release time is >100ms into the
future (configurable) to simulate proper trickling
- rework socket pipeline to transform protobuf into case classes and
back
- introduce NetworkOp messages for that purpose
- make API asynchronous (because it is, really) and add Done
notification for all server operations; enter(...) is still
synchronous, because that is its only purpose in life
- factor out mkPipeline in NettyRemoteTransport, enabling the very slick
TestConductorTransport (essentially a one-liner)
- switch NetworkFailureInjector from Channel{Up,Down}streamHandler to
subclassing SimpleChannelHandler, because otherwise deadlocks
occurred, not sure why (but SCH is the recommended way from the netty
docs, so there may well be a reason)
- make start-up synchronous and explicit for client and server
- server can be queried for actual port, client requires explicit port
- simple multi-jvm-test for verification of TestConductor barriers