Not sure to well understand everything as I have few experience with Erlang, but I was thinking: if the workers are started with start_link kind of function, shouldn't they get a message when/if the demultiplexer dies? that way they know they have to re-subscribe but don't know the new demultiplexer .... maybe they could subscribe to an orphan server that the new demultiplexer can use when it start?
<br>does this make sense?<br><br><div><span class="gmail_quote">On 3/29/07, <b class="gmail_sendername">Daniel Ginsburg</b> <<a href="mailto:dg@ot-e.biz">dg@ot-e.biz</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
In my application I have a demultiplexing process and few worker<br>processes. The workers subscribe to events, the demultiplexor gets<br>requests from the network, and distributes them to the workers, which<br>handle them as appropiate.
<br><br>The demultiplexor monitors (erlang:monitor) the workers, so when a<br>worker terminates without unsubscribing, the demultiplexor cleans the<br>subscription data.<br><br>Now, what if the demultiplexor itself die? Ok, demultiplexor's
<br>supervisor will restart it. But what about the workers? I don't want to<br>terminate and restart them, because workers carry quite a few state and<br>I don't want that state to be lost. So, I need my workers to resubscribe
<br>to restarted demux. How can I handle it nicely?<br><br>I can have workers to monitor the demux. It solves a part of the<br>problem: the workers would be notified if old demux die and try to<br>resubscribe to new demux getting it's pid via
<br>whereis(demux_registered_name). But what if a worker get {'DOWN', ...}<br>message and tries to resubscribe, but the demux isn't restarted yet or<br>haven't finished the init stage? Cleary a race contidition. I can
<br>introduce a small delay after the {'DOWN, ...} message and attempted<br>resubscription, but this approach seems to be a bit ugly.<br><br>What I want to do is to have a some way for demux to announce "Hey, I've
<br>just restarted and forgot all my subscribers. Now I'm operational again.<br>Whoever interested may resubscribe". Supervisors seem to be a natural<br>choice to relay that king of messages, since they are always there. But
<br>it appears that OTP supervisors cannot do that. How do you handle this<br>kind of problems in your applications?<br><br>--<br>dg<br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">
erlang-questions@erlang.org</a><br><a href="http://www.erlang.org/mailman/listinfo/erlang-questions">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br></blockquote></div><br>