aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/gun/connection_pool
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2020-07-15 15:26:25 +0300
committerrinpatch <rinpatch@sdf.org>2020-07-15 15:26:25 +0300
commit7738fbbaf5a6fcd6a10b4ef0a2dcea731a3d4192 (patch)
tree04f1541c4f5438b49793b7f43dd1df5379aad8d2 /lib/pleroma/gun/connection_pool
parent0ffde499b8a8f31c82183253bdd692c75733ca2f (diff)
downloadpleroma-7738fbbaf5a6fcd6a10b4ef0a2dcea731a3d4192.tar.gz
Connection pool: implement logging and telemetry events
Diffstat (limited to 'lib/pleroma/gun/connection_pool')
-rw-r--r--lib/pleroma/gun/connection_pool/worker_supervisor.ex44
1 files changed, 37 insertions, 7 deletions
diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex
index d090c034e..4b5d10d2a 100644
--- a/lib/pleroma/gun/connection_pool/worker_supervisor.ex
+++ b/lib/pleroma/gun/connection_pool/worker_supervisor.ex
@@ -18,8 +18,12 @@ defmodule Pleroma.Gun.ConnectionPool.WorkerSupervisor do
case DynamicSupervisor.start_child(__MODULE__, {Pleroma.Gun.ConnectionPool.Worker, opts}) do
{:error, :max_children} ->
case free_pool() do
- :ok -> start_worker(opts)
- :error -> {:error, :pool_full}
+ :ok ->
+ start_worker(opts)
+
+ :error ->
+ :telemetry.execute([:pleroma, :connection_pool, :provision_failure], %{opts: opts})
+ {:error, :pool_full}
end
res ->
@@ -44,6 +48,14 @@ defmodule Pleroma.Gun.ConnectionPool.WorkerSupervisor do
|> round
|> max(1)
+ :telemetry.execute([:pleroma, :connection_pool, :reclaim, :start], %{}, %{
+ max_connections: max_connections,
+ reclaim_max: reclaim_max
+ })
+
+ # :ets.fun2ms(
+ # fn {_, {worker_pid, {_, used_by, crf, last_reference}}} when used_by == [] ->
+ # {worker_pid, crf, last_reference} end)
unused_conns =
Registry.select(
@registry,
@@ -55,17 +67,35 @@ defmodule Pleroma.Gun.ConnectionPool.WorkerSupervisor do
case unused_conns do
[] ->
+ :telemetry.execute(
+ [:pleroma, :connection_pool, :reclaim, :stop],
+ %{reclaimed_count: 0},
+ %{
+ max_connections: max_connections
+ }
+ )
+
exit(:no_unused_conns)
unused_conns ->
- unused_conns
- |> Enum.sort(fn {_pid1, crf1, last_reference1}, {_pid2, crf2, last_reference2} ->
- crf1 <= crf2 and last_reference1 <= last_reference2
- end)
- |> Enum.take(reclaim_max)
+ reclaimed =
+ unused_conns
+ |> Enum.sort(fn {_pid1, crf1, last_reference1},
+ {_pid2, crf2, last_reference2} ->
+ crf1 <= crf2 and last_reference1 <= last_reference2
+ end)
+ |> Enum.take(reclaim_max)
+
+ reclaimed
|> Enum.each(fn {pid, _, _} ->
DynamicSupervisor.terminate_child(__MODULE__, pid)
end)
+
+ :telemetry.execute(
+ [:pleroma, :connection_pool, :reclaim, :stop],
+ %{reclaimed_count: Enum.count(reclaimed)},
+ %{max_connections: max_connections}
+ )
end
end)