- replace TreeMap with custom ChildrenContainer, which has three
implementations: empty, normal and “terminating” (i.e. waiting for
some child to terminate)
- split recreate() in the same way as terminate(), so that there is a
phase during which the suspended actor waits for termination of all
children which were stopped in preRestart
- do not null out “actor” in ActorCell during restart, because we do
need the supervisionStrategy and nulling it out does not buy us much
in this case anyway
- provide new ActorContext.suspendForChildTermination(), which enters
limbo for as long there are outstanding termination requests; this
enables code which is very similar to previously (half-working) setups
with “synchronous” context.stop(child)
docs are still missing, plus a little polishing here and there; oh, and
before I forget: ActorCell NOW is 64 bytes again ;-)
This is commit 9733578ebbce6fc00b9e611540c3f24b76289911 and
commit 30bdac884b4ef256242db7e4fcee44df9f9921de from
typesafehub/config. Default and reference configs are no
longer cached, and use the thread's context class loader
instead of ConfigImpl.class.getClassLoader().
- ActorCell.stop(actor) removed the actor from childrenRefs before
handleChildTerminated, leading to removing from Locker immediately
after adding it in
- intercept ChildTerminated message in RemoteTransport.receive if
destination is not found (i.e. isTerminate==true) and re-route to
Locker, which was changed to support path-based lookup to find the
parent and funnel the ChildTerminated to its intended destination
- add Locker.shutdown() to detach remaining actors from their
dispatchers upon system termination.
* Added 'nr-of-deputy-nodes' config option
* Added fetching of current deputy node addresses
* Minor refactorings
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
* Completed gossip based failure detection.
* Completed removal of unreachable nodes according to failure detector.
* Added passing tests.
* Misc other fixes, more logging, more comments.
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
* Finalized initial cluster membership.
* Added merging of vector clocks and gossips in case of concurrent cluster updates.
* Added toString methods to all cluster protocol classes
* Fixed bugs in incrementation of vector clocks
* Added updates of 'seen' table for cluster convergence
* Revamped to use new VectorClock impl
* Refactored Gossip.State
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
* Implemented 'receive(newGossip)'
* Added GossipEnvelope
* Added MetaDataChangeListener
* Changed MembershipChangeListener API
* Changed most internal API to work with Address rather than Member
* Added builder style API to Gossip for changing it in an immutable way
* Moved 'self: Member' from Gossip to State
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
* Simplified node join phase.
* Added tests for cluster node startup and joining, both for singleton cluster and 2-node cluster.
* Fixed bug in cluster node address and cluster daemon lookup.
* Changed some APIs.
* Renamed 'contact-point' to 'node-to-join'.
* Minor refactorings.
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
- Added section on single-node cluster.
- Changed seed nodes to deputy nodes.
- Seed nodes are no longer used as contact points only to break logical partitions.
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
* Simplified node join phase.
* Added tests for cluster node startup and joining, both for singleton cluster and 2-node cluster.
* Fixed bug in cluster node address and cluster daemon lookup.
* Changed some APIs.
* Renamed 'contact-point' to 'node-to-join'.
* Minor refactorings.
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
- Added section on single-node cluster.
- Changed seed nodes to deputy nodes.
- Seed nodes are no longer used as contact points only to break logical partitions.
Signed-off-by: Jonas Bonér <jonas@jonasboner.com>