Ecto.Adapters.SQL.Sandbox and GenServer restarting with new PID

Make your genserver set :$callers key in process dictionary and Ecto sandbox should be able to figure ownership. More info on caller tracking: Task — Elixir v1.18.4

basically, you’ll have something like this:

defmodule MyGenserver do
  use GenServer

  def start_link(arg) do
    callers = Process.get(:"$callers", [])
    GenServer.start_link(__MODULE__, {arg, callers})
  end

  def init({arg, callers}) do
    Process.put(:"$callers", [self() | callers])
    ...
  end
end
5 Likes