<div dir="ltr"><div>Thanks Dmitry for the advise :)<br></div><div><br></div><div>I worked out a way like bellow to automatically get informed new worker process after restarted by supervisor.</div><div>If you can't get supervisor to voluntarily send restarted worker Pid, you just let the worker himself to inform you :|</div>
<div>Though it seems kind of "ugly"</div><div><br></div><div>==================================</div><div>=====dispatcher.erl</div><div>==================================</div><div>-behaviour(gen_server).</div><div>
<font color="#6aa84f">%% Locally register( dispatcher, self() ).</font></div><div>...</div><div>handle_call( {startWorker, Args}, _From, State) -></div><div>        worker_sup:start_child( Arg),</div><div>        receive</div>
<div>                {workerStarted, Args, Pid} -></div><div>                        %% store {Args, Pid} into ets table & monitor this Pid.</div><div>                        {reply, {ok, Pid}, State}</div><div>                after ?TIMEOUT -></div>
<div>                        {reply, {cantStartWorker, Args}, State}</div><div>        end.</div><div><br></div><div><font color="#6aa84f">%%<font color="#6aa84f">This should happen only when a worker is restarted by supervisor</font></font></div>
<div>handle_info( {workerStared, Args, Pid}, State) -></div><div>        <font color="#6aa84f">%% Update ets table & monitor Pid</font></div><div>        {noreply, State};</div><div><font color="#6aa84f">%% This should happen when a worker exits normally</font></div>
<div>handle_info( {'DOWN', _Ref, process, Pid, normal}, State) -></div><div>        <font color="#6aa84f">%% Update ets table</font></div><div>        {noreply, State}.</div><div><br></div><div>========================================</div>
<div>=====worker.erl</div><div>========================================</div><div>-behaviour(gen_server).</div><div><br></div><div>init(Args) -></div><div>        <font color="#6aa84f">%% Do things necessary</font></div>
<div>        dispatcher ! {workerStarted, Args, self() },</div><div>        {ok, State}.</div><div>        </div><div><br></div><div>So far seems good ,cheers XD</div><div><br></div><div>B.R. </div><div class="gmail_extra">
<br><br><div class="gmail_quote">2013/8/29 Dmitry Kolesnikov <span dir="ltr"><<a href="mailto:dmkolesnikov@gmail.com" target="_blank">dmkolesnikov@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
You have to maintain mapping of uri to pid in external table (e.g ETS)<br>
However, there is number of open source project that addresses this issue. For example gproc by Ulf.<br>
<br>
However, I had exactly the same task / problem like your and made a library to manage those processes. You can find it here:<br>
<a href="http://github.com/fogfish/pts" target="_blank">http://github.com/fogfish/pts</a><br>
<br>
<br>
Best Regards,<br>
Dmitry >-|-|-*><br>
<div><div class="h5"><br>
<br>
On 29.8.2013, at 10.03, fxmy wang <<a href="mailto:fxmywc@gmail.com">fxmywc@gmail.com</a>> wrote:<br>
<br>
><br>
> Hi dear fellow erlangers,<br>
><br>
> New to Erlang, I'm building a small comment backend for practice. By my design there are many worker processes that handle comments posted from different URLs, and these workers are all under simple_one_for_one supervision.<br>

><br>
> I also decide to start a dispatcher process to map certain URL comment to corresponding worker by worker_sup:start_child(URL) and then store returned Pid.<br>
><br>
> So here comes the problem, I expect that worker may be restarted by supervisor. Is there a way to get the worker's Pid after restarted by supervisor, so that I can keep track of which URL comment should go for which worker process?<br>

><br>
> Hope express myself clearly cause not a native speaker :)<br>
><br>
> B.R.<br>
</div></div>> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div></div>