[erlang-questions] Performing gen_server:call to multiple processes in parallel

Martin Dimitrov mrtndimitrov@REDACTED
Sat Mar 31 19:11:19 CEST 2012


Thanks. After digging through gen:do_call/4 and erlang:monitor/2 I can
see how to implement it.

One question, why would gen_fsm be more appropriate?

Thanks again.

Best regards,
Martin

On 3/31/2012 3:45 PM, Jachym Holecek wrote:
> # Martin Dimitrov 2012-03-31:
>> What I am trying to achieve is to call several gen_servers in parallel.
>> First, I thought I could use gen_server:multi_call/3 but reading the
>> documentation (if I understood it correctly) I realized the gen_servers
>> need to be on different nodes: one registered gen_server per node.
>>
>> Any ideas on how to achieve calling multiple processes on the same node
>> in parallel?
> Basically steal the body of gen:do_call/4 and adapt a bit. It's easy:
> for each destination process create a monitor and reuse the Mref as
> transaction reference, then send out request; when done schedule
> timeout and go to a loop receiving responses -- you'll probably
> want to accumulate one list with successes and other with failures.
>
> In the loop that accumulates results for you be very careful not to
> accept message that's not related to your multi_call -- the easiest
> way is to loop over generated Mrefs in sequence and block receive
> for respective response (or overall timeout).
>
> The Label value in gen:do_call/4 would be one of:
>
> 	'$gen_call'
> 	'$gen_sync_event'
> 	'$gen_sync_all_state_event'
>
> You want gen_server today, but will want gen_fsm calls tomorrow :-).
>
> HTH,
> 	-- Jachym




More information about the erlang-questions mailing list