Argus.Analyses.Distributed (Panoptes v0.13.0)

Copy Markdown View Source

Distributed systems analysis.

Detects distributed system anti-patterns: RPC calls without timeout, RPC in GenServer callbacks, global registration without conflict resolution, and distributed operations in init/1.

Output relations

  • rpc_without_timeout(func, variant) — RPC call with default infinity timeout.
  • rpc_in_genserver_callback(func, variant) — RPC directly inside a GenServer callback.
  • global_register_risk(func, name) — global.register_name without conflict resolution.
  • global_blocking_op(func, op, retries):global.set_lock / :global.trans with blocking retries (infinity or positive integer; 0 is excluded).
  • global_blocking_in_init(func, op) — blocking :global op reachable from init/1.
  • distributed_in_init(func, op) — distributed operation in init/1 blocking supervisor.

Finding severities

  • global_blocking_in_init:error. init blocks the supervisor and the lock blocks on cluster-wide agreement; a netsplit turns local startup into an indefinite hang.
  • rpc_without_timeout, rpc_in_genserver_callback, global_register_risk, distributed_in_init:warning. Remote latency or partition behavior leaking into local liveness.
  • global_blocking_op:info. Cluster-wide locking is legitimate when deliberate; flagged so the serialization point is visible.