Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Attiya et al, PODC 2016

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Standard RGA: insertion op is triple (a, t, r) • a character being inserted • t operation timestamp (globally unique) • r timestamp of reference character To fix interleaving, change to 4-tuple (a, t, r, e) • e set of timestamps of all insertion operations with the same reference character r at the time the insertion was performed (not including t itself) I′ = I ∪ {(a, t, r, {t′|∃a′, e′. (a′, t′, r, e′) ∈ I})}

Slide 13

Slide 13 text

(‘!’, τ1 , τ0 , {}) (‘ ’, τ2 , τ0 , {τ1 }) (‘ ’, τ3 , τ0 , {τ1 }) (‘ ’, τ4 , τ0 , {τ1 , τ2 })

Slide 14

Slide 14 text

(a 1 , t 1 , r, e 1 ) < (a 2 , t 2 , r, e 2 ) if t 1 ∈ e 2 (a 2 , t 2 , r, e 2 ) < (a 1 , t 1 , r, e 1 ) if t 2 ∈ e 1 (‘!’, τ 1 , τ 0 , {}) (‘ ’, τ 2 , τ 0 , {τ 1 }) (‘ ’, τ3 , τ 0 , {τ 1 }) (‘ ’, τ4 , τ 0 , {τ 1 , τ2 }) < < < If (a 1 , t 1 , r, e 1 ) and (a 2 , t 2 , r, e 2 ) are concurrent (t 1 ∉ e 2 ∧ t 2 ∉ e 1 ): m 1 = min({t 1 } ∪ e 1 − e 2 ) m 2 = min({t 2 } ∪ e 2 − e 1 ) (a 1 , t 1 , r, e 1 ) < (a 2 , t 2 , r, e 2 ) if m 1 < m 2 (a 2 , t 2 , r, e 2 ) < (a 1 , t 1 , r, e 1 ) if m 2 < m 1 (‘ ’, τ 2 , τ 0 , {τ 1 }) (‘ ’, τ3 , τ 0 , {τ 1 }) min({τ2 } ∪ {τ1 } − {τ1 }) = τ2 min({τ3 } ∪ {τ1 } − {τ1 }) = τ3 < (‘ ’, τ4 , τ 0 , {τ 1 , τ2 }) (‘ ’, τ3 , τ 0 , {τ 1 }) min({τ3 } ∪ {τ1 } − {τ1 , τ2 }) = τ3 min({τ4 } ∪ {τ1 , τ2} − {τ1 }) = τ2 <

Slide 15

Slide 15 text

Thanks! [email protected] @martinkl RGA proof of no interleaving: Martin Kleppmann, Victor B F Gomes, Dominic P Mulligan, and Alastair R Beresford: “OpSets: Sequential Specifications for Replicated Datatypes,” https://arxiv.org/abs/1805.04263, May 2018. Logoot: Stéphane Weiss, Pascal Urso, and Pascal Molli: “Logoot: A Scalable Optimistic Replication Algorithm for Collaborative Editing on P2P Networks,” ICDCS 2009. LSEQ: Brice Nédelec, Pascal Molli, Achour Mostefaoui, and Emmanuel Desmontils: “LSEQ: an Adaptive Structure for Sequences in Distributed Collaborative Editing,” DocEng 2013. RGA: Hyun-Gul Roh, Myeongjae Jeon, Jin-Soo Kim, and Joonwon Lee: “Replicated abstract data types: Building blocks for collaborative applications,” Journal of Parallel and Distributed Computing, 71(3):354–368, 2011. Treedoc: Nuno Preguiça, Joan Manuel Marques, Marc Shapiro, and Mihai Letia: “A Commutative Replicated Data Type for Cooperative Editing,” ICDCS 2009. WOOT: Gérald Oster, Pascal Urso, Pascal Molli, and Abdessamad Imine: “Data consistency for P2P collaborative editing,” CSCW 2006. Astrong : Hagit Attiya, Sebastian Burckhardt, Alexey Gotsman, Adam Morrison, Hongseok Yang, and Marek Zawirski: “Specification and Complexity of Collaborative Text Editing,” PODC 2016.