[erlang-questions] Need help with simple_one_for_one

Matt Williamson <>
Wed Aug 20 20:01:01 CEST 2008


So no. I did not send it any event.
Serge, I enabled sasl via application:start/1 but when I ran the function in
question I didn't get any output from it.

On Wed, Aug 20, 2008 at 1:00 PM, Mazen Harake
<>wrote:

> Hi Matt,
>
> Sorry this might be a stupid question but did you send it an event?
>
> /Mazen
>
> Matt Williamson wrote:
>
>> I hate to keep bugging with simple problems, but I'm stuck again. My FSM
>> dosn't seem to be executing its first state. Here is my init function:
>>
>> /init(StartArgs) ->
>>    InitialState = case StartArgs of
>>    {store_chunk, Chunk} ->
>>        io:format("FSM Storing chunk...~n"),
>>        {ok, storing_chunk, [Chunk]};
>>    {get_chunk, Args} ->
>>        {ok, getting_chunk, Args};
>>    Else ->
>>        %% @todo Add error logging here.
>>        io:format("Bad arg for FSM: ~p~n", [StartArgs])
>>    end,
>>    io:format("FSM Initial State: ~p~n", [InitialState]),
>>    InitialState./
>>
>> storing_chunk/2 is exported and I'm not getting any errors. Here is that
>> function:
>>
>> /storing_chunk(_Event, [Chunk]) ->
>>    io:format("STATE: storing_chunk~n"),
>>    case erlfs_store_lib:store_chunk() of
>>    ok ->
>>        {next_state, notifying_tracker, Chunk};
>>    {error, Reason} ->
>>        %% @todo Add error logging here.
>>        io:format("FSM Stopped: ~p~n", [Reason]),
>>        {stop, {file, Reason}, Chunk#chunk.chunk_meta}
>>    end./
>>
>> On Wed, Aug 20, 2008 at 11:04 AM, Serge Aleynikov <<mailto:
>> >> wrote:
>>
>>    The error you reported earlier:
>>
>>    {'EXIT', {badarg, [{erlang, apply,
>>       [erlfs_store_worker_fsm, start_link, {store_chunk, ...}]}]}}
>>
>>    was a clear indication that erlang:apply(M,F,A) was called with A
>>    being a tuple rather than a list.  If this still doesn't work
>>    after replacing tuple with a list in the second argument of the
>>    supervisor:start_child/2 call, this means that you probably have
>>    other issues in the erlfs_store_worker_fsm:start_link/1 itself.
>>
>>    I can't say anything more without seeing a more detailed error report.
>>
>>    Serge
>>
>>
>>    Matt Williamson wrote:
>>
>>        Yes, I saw that in the docs. What I was saying is that calling
>>        apply(M, F,
>>        A++List) =:= apply(M, F, List) when A =:= [].
>>
>>        I did try your suggestion anyway with the same results.
>>
>>        On Wed, Aug 20, 2008 at 9:54 AM, Serge Aleynikov
>>        < <mailto:>> wrote:
>>
>>            What is the arity of erlfs_store_worker_fsm:start_link
>>            function?
>>
>>            Not quite sure what you mean by [] ++ 1 below.
>>
>>            The supervisor:start_child/2 takes a list [term()] as the
>>            second parameter.
>>             Here's its docs:
>>
>>            "If the case of a simple_one_for_one supervisor, the child
>>            specification
>>            defined in Module:init/1 will be used and ChildSpec should
>>            instead be an
>>            arbitrary list of terms List. The child process will then
>>            be started by
>>            appending List to the existing start function arguments,
>>            i.e. by calling
>>            apply(M, F, A++List) where {M,F,A} is the start function
>>            defined in the
>>            child specification."
>>
>>            Note the A++List part.
>>
>>
>>            Matt Williamson wrote:
>>
>>                I'm afraid that did not work. I am passing an empty
>>                list, and if I execute
>>                [] ++ 1 in the shell I get 1.
>>
>>                On Wed, Aug 20, 2008 at 9:31 AM, Serge Aleynikov
>>                < <mailto:>>
>>
>>                wrote:
>>
>>                 Try starting it as:
>>
>>                    supervisor:start_child(erlfs_store_worker_sup,
>>                    [{store_chunk, Chunk}])
>>
>>                    The simple_one_for_one strategy appends the
>>                    arguments passed to
>>                    supervisor:start_child/2 to the list of args
>>                    specified in the
>>                    supervisor's
>>                    spec.
>>
>>                    Serge
>>
>>                    Matt Williamson wrote:
>>
>>                     Hello,
>>
>>                        I am starting a gen_fsm with
>>                        supervisor:start_child(erlfs_store_worker_sup,
>>                        {store_chunk, Chunk}) but I get the following
>>                        error:
>>
>>                        {error,
>>                                                        {'EXIT',
>>                                                         {badarg,
>>                                                          [{erlang,
>>                                                            apply,
>>
>>        [erlfs_store_worker_fsm,
>>                                                             start_link,
>>                                                             {store_chunk,
>>                                                              {chunk,
>>
>>           {chunk_meta,
>>
>>            {file_meta,
>>
>>             "test123",
>>
>>             "test.txt",
>>                                                                 0,
>>
>>             "text/plain",
>>
>>             {{0,1,1},{0,0,0}}},
>>                                                                0,
>>                                                                0,
>>                                                                []},
>>
>>           <<"Hello world!">>}}]},
>>
>>       {supervisor,do_start_child_i,3},
>>
>>       {supervisor,handle_call,3},
>>
>>       {gen_server,handle_msg,6},
>>
>>       {proc_lib,init_p,5}]}}}
>>
>>                        I've been trying to figure it out for a while,
>>                        but I am having a hard
>>                        time.
>>                        Here is the Child Spec in the supervisor
>>                        (erlfs_store_worker_sup):
>>
>>                        init(Args) ->
>>                         WorkerSpec = {erlfs_store_worker_fsm,
>>                        {erlfs_store_worker_fsm,
>>                                            start_link, []},
>>                               temporary, 2000, worker,
>>                        [erlfs_store_worker_fsm]},
>>                         {ok,{{simple_one_for_one, 0, 1}, [WorkerSpec]}}.
>>
>>
>>
>>
>>  ------------------------------------------------------------------------
>>
>>                        _______________________________________________
>>                        erlang-questions mailing list
>>                        
>>                        <mailto:>
>>
>> http://www.erlang.org/mailman/listinfo/erlang-questions
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> erlang-questions mailing list
>> 
>> http://www.erlang.org/mailman/listinfo/erlang-questions
>>
>
>
> --
> Mazen Harake <>
> Erlang Software Developer and Consultant,
> Erlang Training & Consulting, Ltd
>
> Mobile Phone: +44 (0)795 13 26 317
> Office Phone: +44 (0)207 45 61 020
> Office Address:
> 401 London Fruit & Wool Exchange
> Brushfield St, London, E1 6EL
> United Kingdom
>
> This email and its attachments may be confidential and are intended solely
> for the use of the individual to whom it is addressed. Any views or opinions
> expressed are solely those of the author and do not necessarily represent
> those of "Erlang Training & Consulting, Ltd".
>
> If you are not the intended recipient of this email and its attachments,
> you must take no action based upon them, nor must you copy or show them to
> anyone. Please contact the sender if you believe you have received this
> email in error.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20080820/940249a9/attachment.html>


More information about the erlang-questions mailing list