Versions first, write-back before return
Versions first, write-back before return
ordered versions let any quorum find the newest, write-back makes it stick
replica versions, t0 then t1
what each quorum read returns
n1: v2 new
only holder
n2: v1 old
not yet reached
n3: v1 old
not yet reached
write-back v2 to quorum, before return
n1: v2 new
unchanged
n2: v2 new
written back
n3: v1 old
still lagging
read1 {n1,n2}: max(v2,v1) = v2 new
concurrent with the write, allowed
read2 {n2,n3}: max(v1,v1) = v1 STALE
starts after read1 returned: violation
read2 again: max(v2,v1) = v2 new
after write-back: fixed
t0: partial write, never acknowledged as w=3
w + r > n holds as arithmetic, freshness premise missing
background read-repair runs after the read returns: too late for linearizability
ABD fix: the reader writes the max version back to a quorum BEFORE returning, so every later quorum meets it
versions are ordered (v1 < v2): no leader needed to pick the newest
crashed reader after observing v2 but before write-back: the read is indeterminate, the next reader still repairs
multi-writer: add a query phase, read the highest timestamp before writing
legend: green = carries the newest version, blue = lagging, rose = the stale violation
membership is fixed here; changing members need overlapping old and new quorums