Packages

Allows you to run some code and handle any timeouts or errors, with custom retry logic, while limiting the total number of concurrent things being run via worker pools.

Current section

Files

Jump to
retryable lib work_processor.ex
Raw

lib/work_processor.ex

defmodule Retryable.WorkProcessor do
use GenServer
alias Retryable.Work
def start_link(manager) do
GenServer.start_link(__MODULE__, manager, [])
end
def init(manager) do
send(self(), :loop)
{:ok, manager}
end
def handle_info(:loop, manager) do
case GenServer.call(manager, :retrieve_work) do
{:job, work} -> process_work(work)
:nothing -> :timer.sleep(10)
end
send(self(), :loop)
{:noreply, manager}
end
defp process_work(work) do
work
|> Work.started
|> Work.process
end
end