I am trying to take an input from the user and then creating the number of genservers as input and Supervise them. My code is something like
defmodule GossSim do
use Supervisor
def main(args) do
# Since it is a mix generated project I had to put the main
Supervisor.start_link(__MODULE__, args)
end
def start_link(args) do
Supervisor.start_link(__MODULE__, args)
end
#The two methods down below create children dynamically
def get_child_list(child_list, 0), do: child_list
def get_child_list(child_list, num_of_nodes) do
child =
%{
id: :rand.uniform(num_of_nodes*100000),
start: {Gossip_node, :start_link, [[0,true]]}
}
if num_of_nodes > 0 do
get_child_list( [child] ++ child_list, num_of_nodes-1)
end
end
def init(args) do
children = get_child_list([], 10)
# The outut of this inspect is pasted below
IO.inspect children, label: "The children list is"
// some function that does something parse_args_and_start(args)
// num_of_nodes is 10
children = get_child_list([], num_of_nodes)
Supervisor.init(children, strategy: :simple_one_for_one)
end
I get the following error
bad child specification, invalid children: [%{id: 83303, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 186070, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 85483, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 40851, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 85216, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 390428, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 466922, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 187412, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 103750, start: {Gossip_node, :start_link, [[0, true]]}}, %{id: 176391, start: {Gossip_node, :start_link, [[0, true]]}}]
The Supervisor doc says that a supervisor is fine if it has a start and an id. Since children is a list I am adding multiple maps of children in it. Am i missing something. Gossip_node is a module in the same folder.