Concurrent Writes — Detect and Resolve

Concurrent Writes — Detect and Resolve A data-flow diagram generated by Archify. 01 / Concurrent Writes 02 / Causality 03 / Resolution 04 / Convergence Leader 1: A to B · did not see the other · 01 / Concurrent Writes · one record, 2 leaders Leader 1: A to B did not see the other one record, 2 leaders happens-before · does one build on it? · 02 / Causality · concurrent if neither happens-before does one build on it? concurrent if neither Last Write Wins · greatest timestamp · 03 / Resolution · one write is lost Last Write Wins greatest timestamp one write is lost Converged State · same state everywhere · 04 / Convergence · eventual + converged Converged State same state everywhere eventual + converged Leader 2: A to C · written while offline · 01 / Concurrent Writes · no causal link Leader 2: A to C written while offline no causal link Version Vector · counter per replica · 02 / Causality · dotted in Riak 2.0 Version Vector counter per replica dotted in Riak 2.0 Siblings · all values kept · 03 / Resolution · CouchDB-style Siblings all values kept CouchDB-style CRDT / OT Merge · keeps every edit · 04 / Convergence · no data lost CRDT / OT Merge keeps every edit no data lost write tagged with causal metadata detection input conflict: discard one lossy resolution one winner, one lost write converged by loss arrival order differs per replica conflict signal conflict: keep both lossless resolution merge the values automatic merge compare version vectors overwrite or concurrent converge without loss converged by merge Legend primary data data store data flow