basho/riak_core — pull request #171 by jtuple (2012-04-28 00:02:42+00:00)
Title: Add cluster capability system

This pull-request adds a new capabilities system to `riak_core`. This system exposes an API that allows Riak applications to register capabilities and supported modes. The system handles publishing supported modes over gossip, and negotiates with other cluster members to determine the most preferred mode for each capability that is supported by all cluster members.

The primary aim of this work is to better support mixed-version clusters, especially during a rolling upgrade. Currently, users must manually alter configuration parameters in the app.config file to work properly during a rolling upgrade. This system removes the need for manual configuration.

This request also updates the existing `vnode_routing` logic to use the new capability system.

There is also a related `riak_kv` pull-request that updates many kv configuration options to use the new system as well.

Finally, there is a related `riak_test` pull-request that provides the `verify_capabilities` system test that verifies different capability properties against real mixed-version clusters.