[newbie] accept()-ing process under supervision (was:Erlangish way of Iterator pattern)

David Hopwood <>
Wed Jan 26 22:50:47 CET 2005


Joe Armstrong (AL/EAB) wrote:
> Tricky - there is a spectrum of answers here:
> 
> "make sure that it is always listening" could mean lot's of different things:
> 
> 	1) Is the listening process (ie the process which evaluates tcp_accept)
>                 still alive?
> 	2) Is the listening process responsive?
> 	    ie is it accepting connections and doing what it is supposed to do?
> 
> In my example tcp_server might happily accept connections and spawn a new handler
> per connection - but these handlers might deadlock, or go into infinite loops or something and not respond as
> expected (Now I don't mean here that the handlers *crash* - because crashes will be detected and the
> socket will be closed) - it's just that they don't work properly.
> 
> Detecting 1) is trivial (just link to the process). 2) requires some kind of end-to-end confirmation
> ie a program *outside* Erlang which periodically asks the server to prove that it running. 
> Say ask it what factorial 42 is once every minute.

Or better still, run the unit test for the server.

> <<to be really safe - the probing program should be on a *different* processor -
>     because of "Joe's law"
> 	
> 	+------------+
> 	| Joe's law |
> 	+-----------------------------------------+
> 	|  To do fault-tolerant computations |
>             | you need at least 2 computers      |
> 	+-----------------------------------------+
> 
>      Obviously :-)

I would have thought you could separate the problems of testing whether the
processor is working (must be done from a different processor), and testing
whether each program on it is working (can be done from the same processor,
provided it is from a different language runtime).

Processors and programs don't tend to fail in ways that could defeat this
approach.

-- 
David Hopwood <>




More information about the erlang-questions mailing list