Replication: Registry again
Same primitive, different domain. ReplFeed is a Registry with one logical topic (:all). Every replica subscribes. Master broadcasts every successful write.
defmodule ReplFeed do
def start_link, do: Registry.start_link(keys: :duplicate, name: __MODULE__)
def subscribe, do: Registry.register(__MODULE__, :all, nil)
def broadcast(payload) do
Registry.dispatch(__MODULE__, :all, fn entries ->
Enum.each(entries, fn {pid, _} -> send(pid, {:repl, payload}) end)
end)
end
endReplFeed module wraps Registry.dispatch for the broadcast.
Dispatch.handle/2 takes a role atom: :master or :replica. Master flags broadcast writes to ReplFeed; replica refuses client writes with -READONLY. Same module, one extra argument.
Quiz: Quiz
Loading practice…