Packages
snakepit
0.6.9
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
High-performance pooler and session manager for external language integrations. Supports Python, Node.js, Ruby, and more with gRPC streaming, session management, and production-ready process cleanup.
Current section
Files
Jump to
Current section
Files
lib/snakepit/pool/worker_starter_registry.ex
defmodule Snakepit.Pool.Worker.StarterRegistry do
@moduledoc """
Registry for worker starter supervisors.
This registry provides a clean separation between worker processes and
their starter supervisors, making debugging and process tracking easier.
Worker starters are registered with their worker_id as the key, allowing
for easy lookup and management of individual starter supervisors.
"""
@registry_name __MODULE__
@doc """
Returns the child spec for the starter registry.
"""
def child_spec(_opts) do
Registry.child_spec(
keys: :unique,
name: @registry_name
)
end
@doc """
Returns a via tuple for registering/looking up a worker starter supervisor.
## Examples
iex> Snakepit.Pool.Worker.StarterRegistry.via_tuple("worker_123")
{:via, Registry, {Snakepit.Pool.Worker.StarterRegistry, "worker_123"}}
"""
def via_tuple(worker_id) when is_binary(worker_id) do
{:via, Registry, {@registry_name, worker_id}}
end
@doc """
Lists all registered worker starter IDs.
"""
def list_starters do
Registry.select(@registry_name, [{{:"$1", :_, :_}, [], [:"$1"]}])
end
@doc """
Checks if a worker starter is registered.
"""
def starter_exists?(worker_id) do
case Registry.lookup(@registry_name, worker_id) do
[] -> false
_ -> true
end
end
@doc """
Gets the PID for a worker starter supervisor.
"""
def get_starter_pid(worker_id) do
case Registry.lookup(@registry_name, worker_id) do
[{pid, _}] -> {:ok, pid}
[] -> {:error, :not_found}
end
end
@doc """
Counts the number of registered worker starters.
"""
def starter_count do
Registry.count(@registry_name)
end
end