diff options
Diffstat (limited to 'lib/poolparty/scheduler.ex')
-rw-r--r-- | lib/poolparty/scheduler.ex | 11 |
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] |