Why does my supervisor fail on init with badarg? - erlang

I am trying to start a supervisor of type one_for_one with one child and am getting this error:
A = pl:start().
{error,{badarg,[{erlang,apply,[{state,[0|1]},init,[[]]],[]},
{supervisor,init,1,[{file,"supervisor.erl"},{line,295}]},
{gen_server,init_it,2,[{file,"gen_server.erl"},{line,374}]},
{gen_server,init_it,6,[{file,"gen_server.erl"},{line,342}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,249}]}]}}
=CRASH REPORT==== 1-Mar-2020::15:28:41.090000 ===
crasher:
pid: <0.215.0>
registered_name: []
exception error: bad argument
in function apply/3
called as apply({state,[0|1]},init,[[]])
in call from supervisor:init/1 (supervisor.erl, line 295)
in call from gen_server:init_it/2 (gen_server.erl, line 374)
in call from gen_server:init_it/6 (gen_server.erl, line 342)
ancestors: [<0.209.0>]
message_queue_len: 0
messages: []
links: [<0.209.0>]
dictionary: []
trap_exit: true
status: running
heap_size: 376
stack_size: 25
reductions: 192
neighbours:
neighbour:
pid: <0.209.0>
registered_name: []
initial_call: {erlang,apply,2}
current_function: {io,execute_request,2}
ancestors: []
message_queue_len: 0
links: [<0.63.0>,<0.215.0>]
trap_exit: false
status: waiting
heap_size: 1598
stack_size: 25
reductions: 5867
current_stacktrace: [{io,execute_request,2,[{file,"io.erl"},{line,579}]},
{shell,exprs,7,[{file,"shell.erl"},{line,693}]},
{shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]},
{shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]
** exception exit: badarg
in function apply/3
called as apply({state,[0|1]},init,[[]])
in call from supervisor:init/1 (supervisor.erl, line 295)
in call from gen_server:init_it/2 (gen_server.erl, line 374)
in call from gen_server:init_it/6 (gen_server.erl, line 342)
in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 249)
Supervisor:
-module(pl).
-behaviour(supervisor).
-export([start/0,init/1]).
-record(state,{
data=[]
}).
%% {ChildId, StartFunc, Restart, Shutdown, Type, Modules}
start()->
supervisor:start_link({local,?MODULE},#state{data=[0|1]},[]).
init(State=#state{data=D})->
InitialChild={fchild,{serv,start_link,[-1]},temporary,3000,brutal_kill,worker},
MaxRestart=2,
MaxTime=600,
Strategy={one_for_one,MaxRestart,MaxTime},
{ok,{Strategy,[
InitialChild
]}}.
Worker:
-module(serv).
-behaviour(gen_server).
-compile(export_all).
-define(A,300).
-record(state,{
values=[],
id
}).
call(Pid,Message)->
gen_server:call(Pid,Message).
cast(Pid,Message)->
gen_server:cast(Pid,Message).
start_link(Id)->
{ok,Pid}=gen_server:start_link({local,xx},?MODULE,[Id],[]),
Pid.
stop(Ref)->
gen_server:stop(Ref).
init(Id)->
{ok,#state{values=[],id=Id}}.
handle_call(state,From,State=#state{values=V})->
Reply={reply,State,State},
Reply;
I am just trying to start a supervisor with only one child that gets a parameter in its init method. What is wrong in this code?

The second argument of start_link with 3 arguments is supposed to be the module name; it should be
start()->
supervisor:start_link({local,?MODULE}, ?MODULE, [#state{data=[0|1]}]).

Related

Parallel.for going to sleep

I am running some code written in F# with mono and I have seen that after some time running (weeks), some process are in sleep mode. Using strace as strace -p <pid> I get
Process 38756 attached - interrupt to quit
futex(0x272ee9c, FUTEX_WAIT_PRIVATE, 1, NULL
Which as far as I understand it means that some part is awaiting for something (other threads).
So I continued searching the problem with gdb attach <pid> in which I can see that there are 4 threads as:
(gdb) info threads
4 Thread 0x7ff06a3ff700 (LWP 38760) 0x0000003b3c80b5bc in pthread_cond_wait##GLIBC_2.3.2 () from /lib64/libpthread.so.0
3 Thread 0x7ff06aa17700 (LWP 38769) 0x0000003b3c80d930 in sem_wait () from /lib64/libpthread.so.0
2 Thread 0x7ff0677ff700 (LWP 38789) 0x0000003b3c80b5bc in pthread_cond_wait##GLIBC_2.3.2 () from /lib64/libpthread.so.0
* 1 Thread 0x7ff070a07760 (LWP 38756) 0x0000003b3c80b5bc in pthread_cond_wait##GLIBC_2.3.2 () from /lib64/libpthread.so.0
On thread 1 using where I can see that the place where it is not working is a Parallel.For().
From my part, the code where the process goes to sleep is:
let sinMod t (difRay:Vector) (fA:(float*Vector*float)[]) =
let duepi = 2.*PI
Array.fold(fun acc x -> let freq, amplitude, phase = fA.[x]
acc+sin(duepi*freq*t+phase)*(amplitude*difRay)) 0. [|0..fA.Length-1|]
let NextFunc (var1:type1,var2:type2,var3:type3) =
// do some stuff
...
// some context
let time = snd var3
let inputArray = var.SomeArray // float[]
// the function that doesn't works
Parallel.For(0, (inputArray .Length), fun i -> (inputArray .[i] <- inputArray .[i]+(ww*SINMOD time.[i])) ) |> ignore
inputArray // return from NextFunc
I really don't have any idea where is the problem. Sometimes the process goes to sleep and others this is not happening. I don't know if this can have any relation, but the length of the parallel.for is 40960
Why is the program going to sleep?
Thank you
EDIT:
I haven't specified why I believe the problem is happening in a function like I said. Using gdb I obtain:
(gdb) where
#0 0x0000003b3c80b5bc in pthread_cond_wait##GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x000000000060cd0d in mono_os_cond_wait (cond=0x272ee98, mutex=0x272ee70, timeout_ms=4294967295) at ../../mono/utils/mono-os-mutex.h:105
#2 mono_os_cond_timedwait (cond=0x272ee98, mutex=0x272ee70, timeout_ms=4294967295) at ../../mono/utils/mono-os-mutex.h:120
#3 0x000000000060f0c8 in _wapi_handle_timedwait_signal_handle (handle=0x410, timeout=4294967295, alertable=1, poll=0, alerted=0x7fff27d2a6cc)
at handles.c:1554
#4 0x00000000006245ea in wapi_WaitForSingleObjectEx (handle=0x410, timeout=4294967295, alertable=1) at wait.c:173
#5 0x00000000005b01f2 in ves_icall_System_Threading_Monitor_Monitor_wait (obj=0x7fed09df4cc0, ms=4294967295) at monitor.c:1294
#6 0x00007ff06806385e in System.Threading.Monitor:Wait (obj=<type 'exceptions.ValueError'>
zero length field name in format
140656049605824, millisecondsTimeout=-1) at /root/mono-4.3.2/mcs/class/corlib/System.Threading/Monitor.cs:148
#7 0x00007ff067e69dc2 in System.Threading.ManualResetEventSlim:Wait (this=..., millisecondsTimeout=-1, cancellationToken=0)
at /root/mono-4.3.2/external/referencesource/mscorlib/system/threading/ManualResetEventSlim.cs:669
#8 0x00007ff067e8544e in System.Threading.Tasks.Task:SpinThenBlockingWait (this=..., millisecondsTimeout=-1, cancellationToken=0)
at /root/mono-4.3.2/external/referencesource/mscorlib/system/threading/Tasks/Task.cs:3326
#9 0x00007ff067e8255d in System.Threading.Tasks.Task:InternalRunSynchronously (this=..., scheduler=..., waitForCompletion=true)
at /root/mono-4.3.2/external/referencesource/mscorlib/system/threading/Tasks/Task.cs:1231
#10 0x00007ff067e823c8 in System.Threading.Tasks.Task:RunSynchronously (this=..., scheduler=...)
at /root/mono-4.3.2/external/referencesource/mscorlib/system/threading/Tasks/Task.cs:1169
#11 0x00007ff067e77c03 in System.Threading.Tasks.Parallel:ForWorker<TLocal_REF> (fromInclusive=0, toExclusive=40960, parallelOptions=..., body=...,
bodyWithState=..., bodyWithLocal=..., localInit=..., localFinally=...)
at /root/mono-4.3.2/external/referencesource/mscorlib/system/threading/Tasks/Parallel.cs:1273
#12 0x00007ff067e76b8a in System.Threading.Tasks.Parallel:For (fromInclusive=0, toExclusive=40960, body=...)
at /root/mono-4.3.2/external/referencesource/mscorlib/system/threading/Tasks/Parallel.cs:441
#13 0x00000000402c11ee in ?? ()
#14 0x00007fff27d2aec0 in ?? ()
#15 0x00007ff0167eab00 in ?? ()
#16 0x0000000000000016 in ?? ()
#17 0x00007fef394db070 in ?? ()
#18 0x0000000000000000 in ?? ()
(gdb) p mono_pmip(0x00000000402c11ee)
$1 =
0x29ae0f0 " ShadingNoise:PhaseModulation (Types.types/Ray,Types.types/Intersection,System.Tuple`2<System.Tuple`3<double, Types.Algebra/Vector, double>[], double[]>) + 0x27e (0x402c0f70 0x402c1238) [0x273b080 - m"...
(gdb)
Where to specify, ShadingNoise:PhaseModulation is the function that I have defined as NextFunc in a simplified way. just in case, the original function it's here

Why I get error: on_load_function_failed,re2

When I try to start the deployed app, I get this error:
initial_call: {supervisor,kernel,['Argument__1']}
pid: <0.1762.0>
registered_name: []
error_info: {exit,{on_load_function_failed,re2},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,352}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]}
ancestors: [kernel_sup,<0.1738.0>]
messages: []
links: [<0.1739.0>]
dictionary: []
trap_exit: true
status: running
heap_size: 376
stack_size: 27
reductions: 117
2017-06-19 11:51:18 supervisor_report
supervisor: {local,kernel_sup}
errorContext: start_error
reason: {on_load_function_failed,re2}
offender: [{pid,undefined},{id,kernel_safe_sup},{mfargs,{supervisor,start_link,[{local,kernel_safe_sup},kernel,safe]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]
2017-06-19 11:51:19 crash_report
initial_call: {application_master,init,['Argument__1','Argument__2','Argument__3','Argument__4']}
pid: <0.1737.0>
registered_name: []
error_info: {exit,{{shutdown,{failed_to_start_child,kernel_safe_sup,{on_load_function_failed,re2}}},{kernel,start,[normal,[]]}},[{application_master,init,4,[{file,"application_master.erl"},{line,134}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]}
ancestors: [<0.1736.0>]
messages: [{'EXIT',<0.1738.0>,normal}]
links: [<0.1736.0>,<0.1735.0>]
dictionary: []
trap_exit: true
status: running
heap_size: 376
stack_size: 27
reductions: 152
2017-06-19 11:51:19 std_info
application: kernel
exited: {{shutdown,{failed_to_start_child,kernel_safe_sup,{on_load_function_failed,re2}}},{kernel,start,[normal,[]]}}
type: permanent
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{{shutdown,{failed_to_start_child,kernel_safe_sup,{on_load_function_failed,re2}}},{kernel,start,[normal,[]]}}}"}
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child,kernel_safe_sup,{on_load_function_failed,re2}}},{kernel,start,[normal,[]]}}})
But I have no idea how to solve this error.. any idea?
Phoenix app start:
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
# Start the endpoint when the application starts
supervisor(MyApp.Endpoint, []),
# Start the endpoint for schools
supervisor(MyApp.Schools.Endpoint, []),
# Start the Ecto repository
supervisor(MyApp.Schools.Repo, []),
supervisor(MyApp.Repo, []),
]
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
end

getting {badarith,[{erlang,'+',[error,0],[]}, while performing arithmetic operation in TSUNG using Erlang snippet

I have wriiten a arithmetic snippet using TSUNG-Erlang function but unable to get through it successfully ; getting following error in my TSUNG controller's log ,
TSUNG-Erlang Snippet,
<setdynvars sourcetype="file" fileid="NBILM_testUsers" delimiter=";" order="iter">
<var name="minnum"/>
<var name="maxnum"/>
</setdynvars>
<setdynvars sourcetype="eval"
code='fun({Pid,DynVars})->
{ok,Maxfound}=ts_dynvars:lookup(maxnum,DynVars),
Maxstr = lists:flatten(io_lib:format("~p",[Maxfound])),
{MAX, _} = string:to_integer(Maxstr),
{ok,Minfound}=ts_dynvars:lookup(minnum,DynVars),
Minstr = lists:flatten(io_lib:format("~p",[Minfound])),
{MIN, _} = string:to_integer(Minstr),
{ok,Countern} = ts_dynvars:lookup(counter,DynVars,999),
Counternstr = lists:flatten(io_lib:format("~p",[Countern])),
{Counternum, _} = string:to_integer(Counternstr),
Mnum1 = MAX + Counternum rem ( 2 - 1 ),
Mnum1 end.
'>
<var name="mnum" />
</setdynvars>
Erroneous log events from TSUNG Controller,
=INFO REPORT==== 5-May-2017::11:42:40 ===
ts_client:(5:<0.134.0>) Stop in state think, reason= {badarith,
[{erlang,
'+',
[error,0],
[]},
{erl_eval,
do_apply,6,
[{file,
"erl_eval.erl"},
{line,
669}]},
{erl_eval,
expr,5,
[{file,
"erl_eval.erl"},
{line,
438}]},
{erl_eval,
exprs,5,
[{file,
"erl_eval.erl"},
{line,
122}]},
{ts_client,
handle_next_action,
1,
[{file,
"src/tsung/ts_client.erl"},
{line,
459}]},
{gen_fsm,
handle_msg,
7,
[{file,
"gen_fsm.erl"},
{line,
518}]},
{proc_lib,
init_p_do_apply,
3,
[{file,
"proc_lib.erl"},
{line,
239}]}]}
=ERROR REPORT==== 5-May-2017::11:42:40 ===
** State machine <0.134.0> terminating
** Last message in was {timeout,#Ref<0.0.8.22>,end_thinktime}
** When State == think
** Data == {state_rcv,none,
{{0,0,0,0},0},
undefined,0,10000,"xyz",80,ts_tcp,
{proto_opts,negociate,"/http-bind/",false,"/chat",
"binary",10,3,600000,infinity,infinity,32768,32768,
undefined,undefined,[],false,true},
false,1,undefined,true,undefined,
{1493,964755,255814},
18,18,false,undefined,0,[],<<>>,
{http,0,0,-1,
{none,none},
false,false,
{false,false},
[],"tsung",[]},
0,1,524288,524288,
[{tsung_userid,1}],
ts_http,[],undefined,full}
Reason for termination =
{badarith,[{erlang,'+',[error,0],[]},
{erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,669}]},
{erl_eval,expr,5,[{file,"erl_eval.erl"},{line,438}]},
{erl_eval,exprs,5,[{file,"erl_eval.erl"},{line,122}]},
{ts_client,handle_next_action,1,
[{file,"src/tsung/ts_client.erl"},{line,459}]},
{gen_fsm,handle_msg,7,[{file,"gen_fsm.erl"},{line,518}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,239}]}]}
It would be really helpful, if someone can point what am doing incorrectly.
The message says that in the line Mnum1 = MAX + Counternum rem ( 2 - 1 ), you are trying to add error with 0 (by the way Counternum rem ( 2 - 1 ) is always equal to 0 so there must be an error here).
Max is the result of {MAX, _} = string:to_integer(Maxstr),, it is equal to error if Maxstr is not a string starting by an integer:
"123" will return {123,[]}
"123 ab" will return {123," ab"}
"a123" will return {error,no_integer}
an_atom will return {error,not_a_list}
To debug further verify the value of Maxfound and Maxstr
you can also shorten your code using the function io:fread/2 which will directly return an integer.

Erlang application exit,, but vm is still running

My Erlang applicaation processed crashed and then exited, but found that the erlang VM is still running.
I could recieve pong when ping this "suspended node"
Types regs() and the results show below, there is not my app process.
(hub#192.168.1.140)4> regs().
** Registered procs on node 'hub#192.168.1.140' **
Name Pid Initial Call Reds Msgs
application_controlle <0.7.0> erlang:apply/2 30258442 1390
auth <0.20.0> auth:init/1 189 0
code_server <0.26.0> erlang:apply/2 1194028 0
erl_epmd <0.19.0> erl_epmd:init/1 138 0
erl_prim_loader <0.3.0> erlang:apply/2 2914236 0
error_logger <0.6.0> gen_event:init_it/6 49983527 0
file_server_2 <0.25.0> file_server:init/1 16185407 0
global_group <0.24.0> global_group:init/1 107 0
global_name_server <0.13.0> global:init/1 1385 0
gr_counter_sup <0.43.0> supervisor:gr_counter_sup 253 0
gr_lager_default_trac <0.70.0> gr_counter:init/1 121 0
gr_lager_default_trac <0.72.0> gr_manager:init/1 46 0
gr_lager_default_trac <0.69.0> gr_param:init/1 117 0
gr_lager_default_trac <0.71.0> gr_manager:init/1 46 0
gr_manager_sup <0.45.0> supervisor:gr_manager_sup 484 0
gr_param_sup <0.44.0> supervisor:gr_param_sup/1 253 0
gr_sup <0.42.0> supervisor:gr_sup/1 237 0
inet_db <0.16.0> inet_db:init/1 749 0
inet_gethost_native <0.176.0> inet_gethost_native:serve 4698517 0
inet_gethost_native_s <0.175.0> supervisor_bridge:inet_ge 41 0
init <0.0.0> otp_ring0:start/2 30799457 0
kernel_safe_sup <0.35.0> supervisor:kernel/1 278 0
kernel_sup <0.11.0> supervisor:kernel/1 47618 0
lager_crash_log <0.52.0> lager_crash_log:init/1 97712230 0
lager_event <0.50.0> gen_event:init_it/6 1813660437 0
lager_handler_watcher <0.51.0> supervisor:lager_handler_ 358 0
lager_sup <0.49.0> supervisor:lager_sup/1 327 0
net_kernel <0.21.0> net_kernel:init/1 110769667 0
net_sup <0.18.0> supervisor:erl_distributi 313 0
os_cmd_port_creator <0.582.0> erlang:apply/2 81 0
rex <0.12.0> rpc:init/1 15653480 0
standard_error <0.28.0> erlang:apply/2 9 0
standard_error_sup <0.27.0> supervisor_bridge:standar 41 0
timer_server <0.100.0> timer:init/1 59356077 0
user <0.31.0> group:server/3 23837008 0
user_drv <0.30.0> user_drv:server/2 12239455 0
** Registered ports on node 'hub#192.168.1.140' **
Name Id Command
ok
It rarely occurs, but anyone explains it?
System: CentOS 5.8
Erlang: R15B03

Erlang error exception exit in ZeroMQ example

i run hwclient:main(). or hwserver:main().
from zeromq example for erlang
https://github.com/zeromq/ezmq/blob/master/examples
from link
http://zeromq.org/bindings:erlang
and have error "exception exit"
crasher:
initial call: ezmq:init/1 pid: <0.42.0> registered_name: []
exception exit: {noproc,
{gen_server,call,
[ezmq_link_sup,{start_child,[]},infinity]}}
in function gen_server:terminate/6 (gen_server.erl, line 746)
ancestors: [<0.31.0>] messages: [] links: [] dictionary: [] trap_exit: true status: running heap_size: 376 stack_size: 27 reductions: 174
neighbours:
** exception exit: {{noproc,
{gen_server,call,
[ezmq_link_sup,{start_child,[]},infinity]}},
{gen_server,call,
[<0.42.0>,{connect,tcp,{127,0,0,1},5555,[]}]}}
in function gen_server:call/2 (gen_server.erl, line 182)
in call from hwclient:main/0 (/examples/hwclient.erl, line 15)
what's wrong?

Resources