sezaru
How to kill supervisor when linked process is killed?
Hello!
In my application, I have two apps called market_manager and candle_manager.
In app candle_manager, I have this tree structure:
In app
market_manager, I have this one:MarketManager.ManagersSupervisor is a dynamic supervisor that can start managers. When I start one Manager, I get this:Also, the manager that I started will start a new child in
CandleManager.Bitfinex.RealtimeSupervisor called CandleManager.Bitfinex.Realtime.Supervisor:CandleManager.Bitfinex.Realtime.Supervisor is started with :temporary restart, and its PID is linked to the Manager one via Process.link.
So, for example, if Manager has PID <0.612.0> and CandleManager.Bitfinex.Realtime.Supervisor PID <0.613.0> there will be a link between these two (I can confirm via :observer).
Now, if I go to :observer and kill CandleManager.Bitfinex.Realtime.Supervisor, then Manager will receive the exit message and kill itself too (as expected).
But, if I kill the Manager instead, CandleManager.Bitfinex.Realtime.Supervisor is not killed and Manager will fail to restart since it will try to start a new CandleManager.Bitfinex.Realtime.Supervisor and fail with :already_started error.
So, my question is, does Process.link work correctly with Supervisors? How can I make CandleManager.Bitfinex.Realtime.Supervisor kill itself when Manager is killed?
Just for completeness, here is CandleManager.Bitfinex.Realtime.Supervisor code, it doesn’t have anything fancy that I can see breaking the Process.link logic.
defmodule CandleManager.Bitfinex.Realtime.Supervisor do
use Supervisor
alias CandleManager.Bitfinex.Realtime
require Logger
def start_link(args) do
Supervisor.start_link(__MODULE__, args, name: __MODULE__)
end
@impl Supervisor
def init([market_manager_pid: _pid] = args) do
childrens = [
{Realtime.Websocket.Server, []},
{Realtime.Manager.Server, []},
{Realtime.TradeToCandle.Server, []},
{Realtime.TradeDiscarder.Server, args}
]
Supervisor.init(childrens, strategy: :one_for_all, max_restarts: 0)
end
end
Thanks!
Most Liked
NobbZ
Have you consider the one_for_all strategy?
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
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance










