Quorum Availability Analysis

easy · distributed-systems, replication, quorum, availability

Quorum Availability Analysis

A quorum configuration has two different kinds of properties:

  1. Availability now: can the system complete reads/writes with the currently live replicas?
  2. Safety by configuration: do read/write and write/write quorums necessarily intersect?

Given n, r, w, and alive, return a status report.

Types

type Status struct {
    CanRead               bool
    CanWrite              bool
    ReadWriteSafe         bool
    WriteWriteSafe        bool
    ReadFailureTolerance  int
    WriteFailureTolerance int
}

Function signature

func AnalyzeQuorum(n, r, w, alive int) Status

Rules

CanRead  = alive >= R
CanWrite = alive >= W
ReadWriteSafe  = R + W > N
WriteWriteSafe = W + W > N
ReadFailureTolerance  = N - R
WriteFailureTolerance = N - W

If the input is invalid, return the zero-value Status.

Invalid input means:

  • n <= 0
  • r < 0 or w < 0
  • r > n or w > n
  • alive < 0 or alive > n

Example

N=3, R=2, W=2, alive=2

CanRead=true
CanWrite=true
ReadWriteSafe=true
WriteWriteSafe=true
ReadFailureTolerance=1
WriteFailureTolerance=1

Expected complexity

O(1) time and O(1) space.

Run tests to see results
No issues detected
    Join Discord