prateek1192
Correct way to create Genservers using Dynamic Supervisor
I am trying to create a dynamic supervisor to start child processes. There are three modules I am using to do this, one is the main module, the second one is the Dynamic Supervisor and the third is the genserver. I do not get any errors but I am not able to see any child processes running.
Here is my code. The first one is the module having the main method
defmodule Simulator do
def main(args) do
{:ok, super_pid} = PersonManager.start_link(args)
start_persons(num_of_persons)
IO.inspect PersonManager.count_children, label: "The Persons started in main method are"
end
def start_persons(num_of_persons) when num_of_persons >=1 do
PersonManager.add_node(private_key, public_key, 0)
start_persons(num_of_persons-1)
end
# num_of_persons == 0 case handled
end
The following is a dynamic Supervisor
defmodule PersonManager do
use DynamicSupervisor
def start_link(args) do
DynamicSupervisor.start_link(__MODULE__, :ok, name: __MODULE__)
end
def add_node(private_key, public_key, num_of_coins) do
# The code flow does come here, used inspect to check
child_spec = {Person, {private_key, public_key, num_of_coins}}
DynamicSupervisor.start_child(__MODULE__, child_spec)
#The code flow does come here, used inpect to check.
end
end
The following is the GenServers the worker is supposed to create
defmodule Person do
use GenServer
def init({private_key, public_key, address, num_of_coins}) do
IO.puts "Starting a person"
{:ok, %{private_key: private_key, public_key: public_key, num_of_coins: num_of_coins}}
end
def start_link({private_key, public_key, address, num_of_coins}) do
IO.puts "Starting a person"
GenServer.start_link(
__MODULE__,
{private_key, public_key, address, num_of_coins}
name: {:global, "node:#{public_key}"},
)
end
end
I expect the genserver to be running but I get The Persons started in main method are: %{active: 0, specs: 0, supervisors: 0, workers: 0}
I dont know why the supervisor is not able to start the genserver.
Any help would be good.
TIA
First Post!
benwilson512
Last Post!
rjc1980
Did you check the MIX OTP guide?
Here is the working code I made.
https://github.com/zurcacielos/kv_umbrella
and the MIX OTP guide is here
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









