Step 4: replace Horde shims with real Horde.Registry and Horde.DynamicSupervisor.

121c1ac6ccef · AtlantisPleb · · parent 576efc6cfb2d

Step 4: replace Horde shims with real Horde.Registry and Horde.DynamicSupervisor.

Enables :ra_enabled by default, adds ra_data_dir and ra_expected_size defaults, and disables Ra in test.

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified config/config.exs
  • modified config/test.exs
  • modified lib/openagents/cluster/dynamic_supervisor.ex
  • modified lib/openagents/cluster/registry.ex
  • modified lib/openagents/sarah/supervisor.ex

Diff

5 files changed, +27 -18

config/config.exs modified +3 -1

@@ -123,7 +123,9 @@ config :openagents,

123 123
  voice_retention_worker_enabled: true,
124 124
  turn_recovery_enabled: false,
125 125
  voice_retention_enabled: false,
126
  ra_enabled: false,
126
  ra_enabled: true,
127
  ra_data_dir: "/tmp/openagents_ra",
128
  ra_expected_size: 3,
127 129
  incident_fixer_enabled: false,
128 130
  github_oauth: [
129 131
    client_id: nil,
config/test.exs modified +1

@@ -51,3 +51,4 @@ config :phoenix,

51 51
  sort_verified_routes_query_params: true
52 52
53 53
config :openagents, :migrate_on_boot, false
54
config :openagents, :ra_enabled, false
lib/openagents/cluster/dynamic_supervisor.ex modified +3 -3

@@ -1,11 +1,11 @@

1 1
defmodule OpenAgents.Cluster.DynamicSupervisor do
2 2
  @moduledoc """
3
  Local-only replacement for Horde.DynamicSupervisor.
3
  Cluster-aware wrapper around `Horde.DynamicSupervisor`.
4 4
  """
5 5
6 6
  @name OpenAgents.HordeSupervisor
7 7
8
  def start_link(opts), do: DynamicSupervisor.start_link(opts)
8
  def start_link(opts), do: Horde.DynamicSupervisor.start_link(opts)
9 9
10 10
  @spec start_child(atom() | pid(), {module(), term()} | map()) ::
11 11
          DynamicSupervisor.on_start_child()

@@ -17,6 +17,6 @@ defmodule OpenAgents.Cluster.DynamicSupervisor do

17 17
        _ when is_tuple(spec) -> spec
18 18
      end
19 19
20
    DynamicSupervisor.start_child(name, spec)
20
    Horde.DynamicSupervisor.start_child(name, spec)
21 21
  end
22 22
end
lib/openagents/cluster/registry.ex modified +9 -12

@@ -1,37 +1,34 @@

1 1
defmodule OpenAgents.Cluster.Registry do
2 2
  @moduledoc """
3
  Local-only replacement for Horde.Registry.
3
  Cluster-aware wrapper around `Horde.Registry`.
4 4
5
  Used by the work and computer subsystems when fleet clustering is not
6
  available. Registers and looks up process-key pairs in a local `Registry`
7
  named `OpenAgents.HordeRegistry`.
5
  Used by the work and computer subsystems to locate and register singleton
6
  processes across the fleet. With no peers this is a one-member cluster that
7
  behaves like a local `Registry`.
8 8
  """
9 9
10 10
  @name OpenAgents.HordeRegistry
11 11
12
  def start_link(opts), do: Registry.start_link(opts)
12
  def start_link(opts), do: Horde.Registry.start_link(opts)
13 13
14 14
  @spec lookup(atom() | pid(), term()) :: [{pid(), term()}]
15
  def lookup(name \\ @name, key) do
16
    Registry.lookup(name, key)
17
  end
15
  def lookup(name \\ @name, key), do: Horde.Registry.lookup(name, key)
18 16
19 17
  @spec register(atom() | pid(), term(), term()) ::
20 18
          {:ok, pid()} | {:error, {:already_registered, pid()}}
21 19
  def register(name \\ @name, key, value \\ []) do
22
    case Registry.lookup(name, key) do
20
    case Horde.Registry.lookup(name, key) do
23 21
      [{pid, _}] when pid != self() ->
24 22
        {:error, {:already_registered, pid}}
25 23
26 24
      _ ->
27
        Registry.register(name, key, value)
28
        {:ok, self()}
25
        Horde.Registry.register(name, key, value)
29 26
    end
30 27
  end
31 28
32 29
  @spec unregister(atom() | pid(), term()) :: :ok
33 30
  def unregister(name \\ @name, key) do
34
    Registry.unregister(name, key)
31
    Horde.Registry.unregister(name, key)
35 32
    :ok
36 33
  end
37 34
end
lib/openagents/sarah/supervisor.ex modified +11 -2

@@ -17,8 +17,17 @@ defmodule OpenAgents.Sarah.Supervisor do

17 17
  def init(_init_arg) do
18 18
    children =
19 19
      [
20
        {Registry, keys: :unique, name: OpenAgents.HordeRegistry},
21
        {DynamicSupervisor, strategy: :one_for_one, name: OpenAgents.HordeSupervisor},
20
        {Horde.Registry,
21
         name: OpenAgents.HordeRegistry,
22
         keys: :unique,
23
         members: :auto,
24
         delta_crdt_options: [sync_interval: 150]},
25
        {Horde.DynamicSupervisor,
26
         name: OpenAgents.HordeSupervisor,
27
         strategy: :one_for_one,
28
         members: :auto,
29
         process_redistribution: :passive,
30
         delta_crdt_options: [sync_interval: 150]},
22 31
        {Registry, keys: :unique, name: OpenAgents.TurnRegistry},
23 32
        {DynamicSupervisor, strategy: :one_for_one, name: OpenAgents.TurnSupervisor},
24 33
        {Registry, keys: :unique, name: OpenAgents.VoiceSessionRegistry},

This page updates live while a promote is in flight · changelog