Sovite.Core.Cluster.Sync (sovite v0.6.0)

Copy Markdown View Source

Shares anti-abuse state between the nodes of a cluster, so that limits hold for the cluster as a whole:

  • rate limits ([rate_limit], tenant limits, and the counts of [outbound]): the events each node counted;
  • failed logins ([auth] and the admin API): each node counts every node's failures, so a client cannot spread its guesses, and is banned everywhere;
  • accounts suspended by [outbound];
  • greylisting, when the nodes have their own SQLite databases.

Every cluster.sync_interval (1 second), each node sends what changed to the others. What a node counted while it was cut off from the others is not sent again, and limits are looser by what the nodes have not told each other yet.

Summary

Functions

Returns a specification to start this module under a supervisor.

Shares a greylist entry that this node stored.

Whether greylist entries need sharing: only between SQLite databases.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

greylist(server \\ __MODULE__, entry)

@spec greylist(GenServer.server(), map()) :: :ok

Shares a greylist entry that this node stored.

greylist?(config)

@spec greylist?(Sovite.Core.Config.t()) :: boolean()

Whether greylist entries need sharing: only between SQLite databases.