[erlang-questions] noob gen_leader question
db
masterofquestions@REDACTED
Sun Apr 13 15:01:43 CEST 2008
Does worker instance of gen_leader spawn separate processes to perform a
task concurrently like in pool module?
On Mon, Apr 7, 2008 at 4:46 PM, Ulf Wiger (TN/EAB) <ulf.wiger@REDACTED>
wrote:
> db skrev:
>
> > I have looked at gdict example. Storing values into global dict goes to
> > the leader and lookup is done by workers on the local gen_leader instance.
> >
> > It seems gen_leader works by having worker pull task rather than master
> > push task. Am I right?
> >
>
> No, the leader pushes the whole dictionary when elected, and
> then each update function, as all updates go through the
> leader process.
>
> So, for example (expanding the macro definition):
>
> -define(store(Dict,Expr,Legend),
> gen_leader:leader_call(Dict, {store, fun(D) ->
> Expr
> end})).
>
> -define(lookup(Dict, Expr, Legend),
> gen_leader:call(Dict, {lookup, fun(D) ->
> Expr
> end})).
>
> %% dict functions that modify state:
> append(Key, Value, Dict) ->
> gen_leader:leader_call(
> Dict, {store, fun(D) ->
> dict:append(Key,Value,D)
> end})).
>
> then, in the callback module:
>
> handle_leader_call({store,F}, _From, Dict, _E) ->
> NewDict = F(Dict),
> {reply, ok, {store, F}, NewDict};
> ^^^^ <- this is the push
>
>
> and here's where the workers receive it:
>
> from_leader({store,F}, Dict, _E) ->
> NewDict = F(Dict),
> {ok, NewDict}.
>
>
>
> BR,
> Ulf W
>
Thank you,
--
rk
That which we persist in doing becomes easier for us to do; not that the
nature of the thing itself is changed, but that our power to do is
increased.
-Ralph Waldo Emerson
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20080413/de5480c8/attachment.htm>
More information about the erlang-questions
mailing list