basho/riak_kv — pull request #838 by russelldb (2014-02-13 17:21:45+00:00)
Title: Forwarding coordinated puts leads to siblings from a single put

With advanced causality tracking (DVV-ish dot stuff) it's possible to generate siblings on a single put. If the vnode is handing off, for example, it will both do the put (one dot) and forward (another dot.) Without dots riak_object merge would call these identical siblings a single value, with dots the concurrency is correctly detected. However, our customers my find this change confusing. To that end, this PR changes the DVV merge function to drop the dots on any identical siblings so that a single value is left (though the dots are gone, so it seems there is some slight risk of sibling explosion-ish behaviour)

Also this merges @jtuple's optimised merge branch. I reckon either @metadave or @jtuple could review this. Probably @jtuple has the best understanding of the merge.