Packages
honeydew
1.2.0
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Pluggable local/clusterable job queue focused on safety.
Current section
Files
Jump to
Current section
Files
lib/honeydew/failure_mode/move.ex
defmodule Honeydew.FailureMode.Move do
@moduledoc """
Instructs Honeydew to move a job to another queue on failure.
## Example
Move this job to the `:failed` queue, on failure.
{Honeydew.Queues, [:my_queue, failure_mode: {#{inspect __MODULE__}, [queue: :failed]}]}
"""
alias Honeydew.Job
alias Honeydew.Queue
require Logger
@behaviour Honeydew.FailureMode
@impl true
def validate_args!([queue: {:global, queue}]) when is_atom(queue) or is_binary(queue), do: :ok
def validate_args!([queue: queue]), do: validate_args!(queue: {:global, queue})
def validate_args!(args), do: raise ArgumentError, "You provided arguments (#{inspect args}) to the Move failure mode, it's expecting [queue: to_queue]"
@impl true
def handle_failure(%Job{queue: queue, from: from} = job, reason, [queue: to_queue]) do
Logger.info "Job failed because #{inspect reason}, moving to #{inspect to_queue}: #{inspect job}"
# tell the queue that that job can be removed.
queue
|> Honeydew.get_queue
|> Queue.ack(job)
{:ok, job} =
%{job | queue: to_queue}
|> Honeydew.enqueue
# send the error to the awaiting process, if necessary
with {owner, _ref} <- from,
do: send(owner, %{job | result: {:moved, reason}})
end
end