Quorum Availability Analysis
Quorum Availability Analysis
A quorum configuration has two different kinds of properties:
- Availability now: can the system complete reads/writes with the currently live replicas?
- 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 <= 0r < 0orw < 0r > norw > nalive < 0oralive > 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