basho/riak_core — pull request #363 by jrwest (2013-08-28 02:32:23+00:00)
Title: Cluster Metadata (Part 1/2)

This PR is the first of two that comprises the initial version of `riak_core`'s new cluster-wide meta data store. In the future, it is intended for this store to be used in place of metadata currently stored in the ring.

__This PR should be merged along side part 2 (not yet available)__

This PR includes the following:
* in-memory (and for-now on-disk) representation of metadata objects
* per-node local storage in DETS with full in-memory copy in ETS
* API for local access to metadata (get/put/iterators/folds)
* Initial implementation of broadcast support for replication (see more below)

This PR does not yet include, but will before merge:
* documentation

This PR does not include:
* ensured at-least once delivery in `riak_core_broadcast` (this is what will be included in part 2)
* local tracking of changes for groups of keys

In addition, this PR includes an implementation of [Dotted Version Vectors](https://github.com/ricardobcl/Dotted-Version-Vectors#how-to-use) which are used as the logical clock for metadata objects. The implementation is a direct copy of the implementation [built by Carlos](https://github.com/ricardobcl/riak_core/blob/dvvset/src/dvvset.erl) including the MIT license. This license, at a minimum, must be addressed pre-merge.