Created
December 2, 2021 15:59
-
-
Save s3cur3/1eac466c516e4248862cd8ea07601d66 to your computer and use it in GitHub Desktop.
A GenServer that will experience intermittent crashes due to timeouts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Greeter do | |
use GenServer | |
def start_link(opts) do | |
name = Access.get(opts, :name, __MODULE__) | |
GenServer.start_link(__MODULE__, name, name: name) | |
end | |
def greet(server \\ __MODULE__, name) do | |
GenServer.call(server, {:greet, name}) | |
end | |
@impl GenServer | |
def init(server_name) do | |
:timer.send_interval(20_000, self(), :sleep) | |
{:ok, server_name} | |
end | |
# Depending on where we are in the :sleep handler, we'll time out | |
# before getting into the body of this! | |
@impl GenServer | |
def handle_call({:greet, name}, _from, server_name) do | |
{:reply, "Hello #{name}, I'm #{server_name}", server_name} | |
end | |
@impl GenServer | |
def handle_info(:sleep, server_name) do | |
Process.sleep(10_000) | |
{:noreply, server_name} | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment