Code_change/3 callback not working on hot upgrade

I would suggest a simpler test, which does not rely on Logger:

defmodule EvercamMedia.PorcelainJanitor do
  use GenServer
  @vsn DateTime.to_unix(DateTime.utc_now())

  def vsn, do: GenServer.call(__MODULE__, :vsn)

  def start_link() do
    GenServer.start_link(__MODULE__, [], name: __MODULE__)
  end

  def init(args) do
    {:ok, 1}
  end

  def handle_call(:vsn, _from, state), do: {:reply, state, state}

  def code_change(_, state, _) do
    state + 1
  end
end

Run the upgrade, then from a remote shell, call EvercamMedia.PorcelainJanitor.vsn(), you should get back 2 after the first upgrade, 3 after the second, and so on.

2 Likes