The idea is to filter the sources, replacing @<var>@ occurrences with the mapping for <var> (which is currently hard-coded). @@ -> @. In order to make this work, I had to move the doc sources one directory down (into akka-docs/rst) so that the filtered result could be in a sibling directory so that relative links (to _sphinx plugins or real code) would continue to work. While I was at it I also changed it so that WARNINGs and ERRORs are not swallowed into the debug dump anymore but printed at [warn] level (minimum). One piece of fallout is that the (online) html build is now run after the normal one, not in parallel.
55 lines
2.6 KiB
ReStructuredText
55 lines
2.6 KiB
ReStructuredText
.. _fault-tolerance-sample-scala:
|
|
|
|
Diagrams of the Fault Tolerance Sample (Scala)
|
|
----------------------------------------------
|
|
|
|
|
|
|
|
.. image:: ../images/faulttolerancesample-normal-flow.png
|
|
|
|
*The above diagram illustrates the normal message flow.*
|
|
|
|
**Normal flow:**
|
|
|
|
======= ==================================================================================
|
|
Step Description
|
|
======= ==================================================================================
|
|
1 The progress ``Listener`` starts the work.
|
|
2 The ``Worker`` schedules work by sending ``Do`` messages periodically to itself
|
|
3, 4, 5 When receiving ``Do`` the ``Worker`` tells the ``CounterService``
|
|
to increment the counter, three times. The ``Increment`` message is forwarded
|
|
to the ``Counter``, which updates its counter variable and sends current value
|
|
to the ``Storage``.
|
|
6, 7 The ``Worker`` asks the ``CounterService`` of current value of the counter and pipes
|
|
the result back to the ``Listener``.
|
|
======= ==================================================================================
|
|
|
|
|
|
.. image:: ../images/faulttolerancesample-failure-flow.png
|
|
|
|
*The above diagram illustrates what happens in case of storage failure.*
|
|
|
|
**Failure flow:**
|
|
|
|
=========== ==================================================================================
|
|
Step Description
|
|
=========== ==================================================================================
|
|
1 The ``Storage`` throws ``StorageException``.
|
|
2 The ``CounterService`` is supervisor of the ``Storage`` and restarts the
|
|
``Storage`` when ``StorageException`` is thrown.
|
|
3, 4, 5, 6 The ``Storage`` continues to fail and is restarted.
|
|
7 After 3 failures and restarts within 5 seconds the ``Storage`` is stopped by its
|
|
supervisor, i.e. the ``CounterService``.
|
|
8 The ``CounterService`` is also watching the ``Storage`` for termination and
|
|
receives the ``Terminated`` message when the ``Storage`` has been stopped ...
|
|
9, 10, 11 and tells the ``Counter`` that there is no ``Storage``.
|
|
12 The ``CounterService`` schedules a ``Reconnect`` message to itself.
|
|
13, 14 When it receives the ``Reconnect`` message it creates a new ``Storage`` ...
|
|
15, 16 and tells the ``Counter`` to use the new ``Storage``
|
|
=========== ==================================================================================
|
|
|
|
Full Source Code of the Fault Tolerance Sample (Scala)
|
|
------------------------------------------------------
|
|
|
|
.. includecode:: code/docs/actor/FaultHandlingDocSample.scala#all
|
|
|