View Source Oban.Peer (Oban v2.11.0)

The Peer module maintains leadership for a particular Oban instance within a cluster.

Leadership is used by plugins, primarily, to prevent duplicate work accross nodes. For example, only the leader's Cron plugin will insert new jobs. You can use peer leadership to extend Oban with custom plugins, or even within your own application.

Note a few important details about how peer leadership operates:

  • Leadership is coordinated through the oban_peers table in your database. It doesn't require distributed Erlang or any other interconnectivity.

  • Each peer checks for leadership at a 30 second interval. When the leader exits it broadcasts a message to all other peers to encourage another one to assume leadership.

  • Each Oban instances supervises a distinct Oban.Peer instance. That means that with multiple Oban instances on the same node one instance may be the leader, while the others aren't.

  • Without leadership some plugins may not run on any node.

Examples

Check leadership for the default Oban instance:

Oban.Peer.leader?()
# => true

That is identical to using the name Oban:

Oban.Peer.leader?(Oban)
# => true

Check leadership for a couple of instances:

Oban.Peer.leader?(Oban.A)
# => true

Oban.Peer.leader?(Oban.B)
# => false

Link to this section Summary

Functions

Check whether the current instance leads the cluster.

Link to this section Types

Specs

option() ::
  {:name, module()} | {:conf, Oban.Config.t()} | {:interval, timeout()}

Link to this section Functions

Specs

leader?(Oban.Config.t() | GenServer.server()) :: boolean()

Check whether the current instance leads the cluster.

Example

Check leadership for the default Oban instance:

Oban.Peer.leader?()
# => true

Check leadership for an alternate instance named Oban.Private:

Oban.Peer.leader?(Oban.Private)
# => true