- the children list which was used for the havoc-wreaking part was not
the right one, leading to an exercise in necromancy
- also print outstanding pings with more detail in case of timeout
- add “mailbox-requirement” key to dispatcher section
- split out mailbox section, add akka.actor.default-mailbox
- rewrite findMarker method and use it for Props.create() and getting
the required mailbox of an actor
- add ProducesMessageQueue trait for MailboxType so that requirements
can be checked before trying to create the actor for real
- verify actor as well as dispatcher requirements for message queue
before creation, even in remote-deployed case
- change MessageDispatcher constructor to take a Configurator, add that
to migration guide
* Made defaultDecider available in SupervisorStrategy,
turned out that I didn't need it but I think it could be
good anyway, e.g.
override def supervisorStrategy = OneForOneStrategy(
enableLogging = false)(SupervisorStrategy.defaultDecider)
* Verified the following scenarios:
- client connection failure
- server bind failure
- kill client (peer closed)
- kill server (peer closed)
* RemoteSystemDaemon removes its child when sendSystemMessage
DeathWatchNotification is called from tellWatchersWeDied.
That can happen after Terminated is delivered to other watcher,
which create a new child with same name, and then the new child
can then be removed instead of the old one.
* RemoteSystemDaemon must only remove child with exact match of
full ActorRef
* Supress TimeoutReason logging
* Add logTermination in FSM
* Improve some error messages, incl making them unique
* Cookie only logged if debug enabled
The analysis has shown the following:
* when it happens, no work is outstanding, the supervisor hierarchy is in a quiet state
* test completes normally in 20s, one observed outlier at 33s and two failures which can be extrapolated to 75s and 59s
* timings can be reproduced on a notebook by inserting Thread.slee(p) in Hierarchy.preRestart
* what happens then is that the FSM backs off (with 250ms timer), bursts work, backs off, etc.
* setting the back-off timeout to 50ms reduces runtime from 50s to 20s on the notebook
Preliminary conclusion is that this is an artifact of the test procedure. No indication was seen of corruption or indefinitely suspending actor or any other incorrect behavior.
using a larger sample will also make the spread of the resulting
calculated rate smaller; the referenced ticket is about a deviation from
the target rate which was slightly out of bounds
- move the creation of the RoutedActorCell’s route into
ActorCell.start(); it used to be done in the constructor
- this requires “val route” to turn into a volatile private var
Thanks to Patrik for finding it!