basho/riak_kv — pull request #758 by russelldb (2013-12-12 18:22:46+00:00)
Title: Merge CRDTs inside riak_object merge

Why? Well it means no CRDT siblings on disk. Previously CRDTs
were merged only when a CRDT Operation was performed from the CRDT
API endpoints. This means read repair, AAE, and repl, could all cause
siblings on disk.

With the addition of DVV style causality, we need to make a choice
about CRDTs. We don't have DVVSets and the anonymous list. So CRDTs
either have to merge Dots into a mini-version-vector, or not have dots.

If CRDTs don't have dots, so their values always survive a merge,
then they are subject to repl induced sibling-explosion (possibly)

Merging in riak_object:merge solves that issue.
As an added benefit it also means that Yokozuna indexing of CRDTs
will just work.

I'd really appreciate a performance comparision between this and
the plain DVV branch, and the pre-DVV stuff for 2.0.