We do not consider the presence of side effects a barrier to fault tolerance and automated process restarts. We do recognise that it’s easier to reason about restarting remote processes if they’re stateless, and so we provide a wrapper for the ManagedProcess API that ensures all user defined callbacks are side effect free.

The choice, about whether or not it is safe to restart a process that might produce side effects, is left to the user. The ManagedProcess API provides explicit support for evaluating user defined callbacks when a process has decided (for some reason) to shut down. We also give the user options about how to initialise and/or re-initialise a process that has been previously terminated.

When it comes to failure recovery, we defer to Erlang’s approach for handling process failures in a generic manner, by drawing on the OTP concept of supervision trees. Erlang’s supervisor module implements a process which supervises other processes called child processes. The supervisor process is responsible for starting, stopping, monitoring and even restarting its child processes. A supervisors children can be either worker processes or supervisors, which allows us to build hierarchical process structures (called supervision trees in Erlang parlance).