summaryrefslogtreecommitdiff
path: root/lib/poolparty/scheduler.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/poolparty/scheduler.ex')
-rw-r--r--lib/poolparty/scheduler.ex11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/poolparty/scheduler.ex b/lib/poolparty/scheduler.ex
index e0cce5f..225556a 100644
--- a/lib/poolparty/scheduler.ex
+++ b/lib/poolparty/scheduler.ex
@@ -1,7 +1,9 @@
defmodule PoolParty.Scheduler do
use GenServer
+ require Logger
def start_link(pool_size, opts \\ []) do
+ Logger.debug("[#{__MODULE__}]: Starting Pool Scheduler")
GenServer.start_link(
__MODULE__,
{pool_size},
@@ -9,6 +11,7 @@ defmodule PoolParty.Scheduler do
end
def init({pool_size}) do
+ Logger.debug("[#{__MODULE__}]: Initializing Pool Scheduler")
{:ok, %{max_pool_size: pool_size,
workers: [],
queue: [],
@@ -17,21 +20,26 @@ defmodule PoolParty.Scheduler do
end
def join(worker_pid) do
+ Logger.debug("[#{__MODULE__}]: Worker joining pool")
GenServer.cast(__MODULE__, {:join, worker_pid})
end
def ready({:result, result, worker_pid}) do
+ Logger.debug("[#{__MODULE__}]: Worker jumping into the pool")
GenServer.cast(__MODULE__, {:ready, result, worker_pid})
end
def process(func, args, from) do
+ Logger.debug("[#{__MODULE__}]: Casting work request")
GenServer.cast(__MODULE__, {:process, func, args, from})
end
def handle_cast({:process, func, args, from}, state) do
+ Logger.debug("[#{__MODULE__}]: Work request received")
queue = state.queue ++ [{func, args, from}]
case length(state.workers) do
0 ->
+ Logger.debug("[#{__MODULE__}]: No workers available")
{:noreply, %{state| queue: queue}}
_ ->
{queue, workers, processing} =
@@ -45,14 +53,17 @@ defmodule PoolParty.Scheduler do
end
def handle_cast({:join, pid}, state) do
+ Logger.debug("[#{__MODULE__}]: Worker joined pool")
{:noreply, %{state| workers: [pid | state.workers]}}
end
def handle_cast({:leave, pid}, state) do
+ Logger.debug("[#{__MODULE__}]: Worker left pool")
{:noreply, %{state| workers: state.workers -- [pid]}}
end
def handle_cast({:ready, result, pid}, state) do
+ Logger.debug("[#{__MODULE__}]: Worker making a splash in the pool")
{client, processing} = HashDict.pop(state.processing, pid)
send(client, {:result, result})
workers = [pid | state.workers]