Current section
Files
Jump to
Current section
Files
lib/locker/pool.ex
defmodule Relocker.Locker.Pool do
alias Relocker.Lock
@behaviour Relocker.Locker
def child_spec do
env = Application.get_env :relocker, :pool, []
:poolboy.child_spec __MODULE__, Keyword.merge(default_config, env), []
end
def start_link(args) do
GenServer.start_link Relocker.Locker.Redis, args
end
def lock(name, metadata, lease_time_secs, time) do
:poolboy.transaction __MODULE__, fn pid ->
GenServer.call pid, {:lock, name, metadata, lease_time_secs, time}
end
end
def read(name, time) do
:poolboy.transaction __MODULE__, fn pid ->
GenServer.call pid, {:read, name, time}
end
end
def extend(%Lock{} = lock, time) do
:poolboy.transaction __MODULE__, fn pid ->
GenServer.call pid, {:extend, lock, time}
end
end
def unlock(%Lock{} = lock, time) do
:poolboy.transaction __MODULE__, fn pid ->
GenServer.call pid, {:unlock, lock, time}
end
end
def reset do
:poolboy.transaction __MODULE__, fn pid ->
GenServer.call pid, :reset
end
end
def stop do
:poolboy.transaction __MODULE__, fn pid ->
GenServer.call pid, :stop
end
end
def default_config do
[
name: { :local, Relocker.Locker.Pool },
worker_module: Relocker.Locker.Pool,
size: 5,
max_overflow: 10
]
end
end