Skip to content

Latest commit

 

History

History
85 lines (54 loc) · 2.8 KB

TODO.md

File metadata and controls

85 lines (54 loc) · 2.8 KB

TODO

Specification <number> below refers to the section in the paper A comprehensive study of Convergent and Commutative Replicated Data Types describing the CRDT.

Scratched out means DONE.

Documentation

Write docs for:

  • The functionality and semantics of the CvRDT
  • The JSON view of each CvRDT
  • Simple JavaScript demo querying the REST server
  • How to start up the cluster service
  • REST API
  • Scala CRDT API
  • How to run the DemoRestServer
  • Architecture (pub/sub, leveldb) etc.
  • Configuration
  • LevelDB and other storage options
  • Explain difference between CvRDT and CmRDT
  • More background and concepts around CRDT, CAP and CALM

CvRDTs (state-based)

Counters

  • Specification 6 State-based increment-only counter
  • Specification 7 State-based PN-Counter
  • Implement Handoff Counter as described in this paper and this code

Sets

Registers

  • Specification 8 State-based Last-Writer-Wins Register (LWW Register)
  • Specification 10 State-based Multi-Value Register (MV-Register)

CmRDTs (ops-based)

Counters

  • Specification 5 op-based Counter

Sets

  • Specification 9 Op-based LWW-Register
  • Specification 13 U-Set: Op-based 2P-Set with unique elements
  • Specification 14 Molli, Weiss, Skaf Set
  • Optimized OR Set - as defined in An Optimized Conflict-free Replicated Set

Graphs

  • Specification 16 2P2P-Graph (op-based)
  • Specification 17 Add-only Monotonic DAG (op-based)
  • Specification 18 Add-Remove Partial Order

Array

  • Specification 19 Replicated Growable Array (RGA)

Shopping Cart

  • Specification 21 Op-based Observed-Remove Shopping Cart (OR-Cart)

Misc Stuff

Reliable Broadcast for CmRDTs

  • Using akka-persistence

Client API

  • Rewrite the REST API using Spray
  • Write a JavaScript CRDT library. So a client can grab the real JSON representation, modify it, do the merges as needed and then push the result back to the server.
  • Java API for CRDT classes/ClusterClient

Replication

  • If a new node joins the cluster then the current state for all CvRDTs is not immediately replicated. It will be eventually - for all the CvRDTs that are updated again. This is not good. How can we solve this?