View Source ProcessHub.Service.ProcessRegistry (ProcessHub v0.5.0-beta)

The process registry service provides API functions for managing the process registry.

Summary

Functions

Deletes information about multiple child processes from the registry.

Inserts information about multiple child processes into the registry.

Returns a specification to start this module under a supervisor.

Deletes all objects from the process registry.

Returns a list of child_ids that match the given child_ids variable.

Deletes information about a child process from the registry.

Dumps the whole registry.

Dumps the whole registry including entries with empty node lists.

Checks whether an entry exists in the registry for the given child_id.

Returns the first pid for the given child_id.

Returns a list of pids for the given child_id.

Inserts information about a child process into the registry.

Returns a list of child specs registered under the local node.

Returns all children that are running on the local node.

Returns information on all processes that are running on the local node.

Returns the local pid for the given child_id, or nil if not found on local node.

Return the child_spec, nodes, and pids for the given child_id.

Returns all children that match the given tag.

Returns information about all registered processes. Will be deprecated in the future.

Updates the row on the registry.

Types

@type metadata() :: %{tag: String.t()}
@type registry() :: %{
  required(ProcessHub.child_id()) =>
    {ProcessHub.child_spec(), [{node(), pid()}]}
}
@type registry_dump() :: %{
  required(ProcessHub.child_id()) =>
    {ProcessHub.child_spec(), [{node(), pid()}], metadata()}
}

Functions

Link to this function

bulk_delete(hub_id, children, opts \\ [])

View Source
@spec bulk_delete(
  ProcessHub.hub_id(),
  [{ProcessHub.child_id(), [node()]}],
  keyword()
) :: :ok

Deletes information about multiple child processes from the registry.

Hook Behavior

This function will dispatch the :child_unregistered_hook hook for each child process if the :hook_storage option is provided. If :hook_storage is nil or not provided, no hooks will be fired.

Options

  • :hook_storage - Hook storage to use for dispatching hooks (default: nil)
  • :timeout - GenServer call timeout in milliseconds (default: 10_000)

Parameters

  • hub_id - The hub identifier
  • children - List of child_id with nodes to remove
  • opts - Options keyword list
Link to this function

bulk_insert(hub_id, children, opts \\ [])

View Source
@spec bulk_insert(
  ProcessHub.hub_id(),
  %{
    required(ProcessHub.child_id()) =>
      {ProcessHub.child_spec(), [{node(), pid()}], metadata()}
  },
  keyword()
) :: :ok

Inserts information about multiple child processes into the registry.

Hook Behavior

This function will dispatch the :child_registered_hook hook for each child process if the :hook_storage option is provided. If :hook_storage is nil or not provided, no hooks will be fired.

Options

  • :hook_storage - Hook storage to use for dispatching hooks (default: nil)
  • :timeout - GenServer call timeout in milliseconds (default: 10_000)

Parameters

  • hub_id - The hub identifier
  • children - Map of child_id to {child_spec, node_pids, metadata} tuples
  • opts - Options keyword list

Returns a specification to start this module under a supervisor.

See Supervisor.

@spec clear_all(ProcessHub.hub_id()) :: boolean()

Deletes all objects from the process registry.

Link to this function

contains_children(hub_id, child_ids)

View Source
@spec contains_children(ProcessHub.hub_id(), [ProcessHub.child_id()]) :: [
  ProcessHub.child_id()
]

Returns a list of child_ids that match the given child_ids variable.

Link to this function

delete(hub_id, child_id, opts \\ [])

View Source
@spec delete(ProcessHub.hub_id(), ProcessHub.child_id(), keyword() | nil) :: :ok

Deletes information about a child process from the registry.

Hook Behavior

This function will dispatch the :child_unregistered_hook hook if the :hook_storage option is provided. If :hook_storage is nil or not provided, no hooks will be fired.

Options

  • :hook_storage - Hook storage to use for dispatching hooks (default: nil)
@spec dump(ProcessHub.hub_id()) :: registry_dump()

Dumps the whole registry.

Returns all information about all registered processes including metadata. Entries with empty node lists are excluded.

@spec dump_all(ProcessHub.hub_id()) :: registry_dump()

Dumps the whole registry including entries with empty node lists.

Unlike dump/1, this includes all entries regardless of their node list, such as pending forwarding entries and TTL tombstone entries.

Link to this function

entry_exists?(hub_id, child_id)

View Source
@spec entry_exists?(ProcessHub.hub_id(), ProcessHub.child_id()) :: boolean()

Checks whether an entry exists in the registry for the given child_id.

Unlike lookup/2, this returns true even for entries with empty node lists (e.g., pending forwarding entries or TTL tombstone entries).

Link to this function

get_pid(hub_id, child_id)

View Source
@spec get_pid(ProcessHub.hub_id(), ProcessHub.child_id()) :: pid() | nil

Returns the first pid for the given child_id.

Link to this function

get_pids(hub_id, child_id)

View Source
@spec get_pids(ProcessHub.hub_id(), ProcessHub.child_id()) :: [pid()]

Returns a list of pids for the given child_id.

Link to this function

insert(hub_id, child_spec, child_nodes, opts \\ [])

View Source
@spec insert(
  ProcessHub.hub_id(),
  ProcessHub.child_spec(),
  [{node(), pid()}],
  keyword() | nil
) :: :ok

Inserts information about a child process into the registry.

Hook Behavior

This function will dispatch the :child_registered_hook hook if the :hook_storage option is provided. If :hook_storage is nil or not provided, no hooks will be fired.

Options

  • :metadata - Additional metadata to store with the process (default: %{})
  • :table - Alternative table to use for storage (default: hub_id)
  • :hook_storage - Hook storage to use for dispatching hooks (default: nil)
Link to this function

local_child_specs(hub_id)

View Source
@spec local_child_specs(ProcessHub.hub_id()) :: [ProcessHub.child_spec()]

Returns a list of child specs registered under the local node.

@spec local_children(ProcessHub.hub_id()) :: %{
  required(ProcessHub.child_id()) =>
    {ProcessHub.child_spec(), [{node(), pid()}], metadata()}
}

Returns all children that are running on the local node.

Returns a map of child_id to {child_spec, node_pids, metadata} tuples for all children where the local node has a running process.

@spec local_data(ProcessHub.hub_id()) :: [
  {ProcessHub.child_id(), {ProcessHub.child_spec(), [{node(), pid()}]}}
]

Returns information on all processes that are running on the local node.

Link to this function

local_pid(hub_id, child_id)

View Source
@spec local_pid(ProcessHub.hub_id(), ProcessHub.child_id()) :: pid() | nil

Returns the local pid for the given child_id, or nil if not found on local node.

Link to this function

lookup(hub_id, child_id, opts \\ [])

View Source

Return the child_spec, nodes, and pids for the given child_id.

@spec match_tag(ProcessHub.hub_id(), String.t()) :: [
  {ProcessHub.child_id(), [{node(), pid()}]}
]

Returns all children that match the given tag.

Link to this function

process_list(hub_id, atom)

View Source
@spec process_list(atom(), :global | :local) :: [
  {ProcessHub.child_id(), [{node(), pid()}] | pid()}
]
@spec registry(ProcessHub.hub_id()) :: registry()

Returns information about all registered processes. Will be deprecated in the future.

Link to this function

update(hub_id, child_id, update_fn)

View Source
@spec update(ProcessHub.hub_id(), ProcessHub.child_id(), function()) ::
  :ok | {:error, String.t()}

Updates the row on the registry.

Hook Behavior

This function intentionally skips hook dispatching during the update operation to avoid duplicate or conflicting hook events. Updates are performed as atomic operations.

Parameters

The update_fn must be a function that accepts 3 parameters containing the existing values:

  • child_spec - the child specification in map format.
  • node_pids - a keyword list containing a list of node pid pairs. Example: [{:mynode, pid()}]
  • metadata- a map containing the additional information.

The function should return a tuple in the following format: {child_spec, node_pids, metadata} and those values will be then used to update the row.

Return Values

  • :ok - On successful update
  • {:error, "No child found"} - If no child is found for the given child_id
  • {:error, "Invalid arguments returned from the update function"} - If the update function returns invalid data

Important

Use this function with care as any invalid data may corrupt the registry.