开发者

Erlang: Who supervises the supervisor?

开发者 https://www.devze.com 2023-02-25 08:18 出处:网络
In all Erlang supervisor examples I have seen yet, there usually is a \"master\" supervisor开发者_开发知识库 who supervises the whole tree (or at least is the root node in the supervisor tree). What i

In all Erlang supervisor examples I have seen yet, there usually is a "master" supervisor开发者_开发知识库 who supervises the whole tree (or at least is the root node in the supervisor tree). What if the "master"-supervisor breaks? How should the "master"-supervisor be supervised?? any typical pattern?


The top supervisor is started in your application start/2 callback using start_link, this means that it links with the application process. If the application process receives an exit signal from the top supervisor dying it does one of two things:

  1. If the application is started as an permanent application the entire node i terminated (and maybe restarted using HEART).

  2. If the application is started as temporary the application stops running, no restart attempts will be made.


Typically Supervisor is set to "only" supervise other processes. Which mens there is no user written code which is executed by Supervisor - so it very unlikely to crash.

Of course, this cannot be enforced ... So typical pattern is to not have any application specific logic in Supervisor ... It should only Supervise - and do nothing else.


Good question. I have to concur that all of the examples and tutorials mostly ignore the issue - even if occasionally someone mentions the issue (without providing an example solution):

If you want reliability, use at least two computers, and then make them supervise each other. How to actually implement that with OTP is (with the current state of documentation and tutorials), however, appears to be somewhere between well hidden and secret.

0

精彩评论

暂无评论...
验证码 换一张
取 消