Added consistency check tool. Support single partition only
Updated ConsistencyCheck.java for new feature
wrap up the consistency tool
fixed a bug where the program does not sweep latest-version-consistent keys correctly
Added non-zoned cluster(multiple bootstrap url) support for consistency check; This uses value hash for comparing values instead of version object
Added consistency check tool. Support single partition only
Updated ConsistencyCheck.java for new feature
First step towards a consistency fixer tool.

src/java/voldemort/utils/ConsistencyFix.java
- CLI and initial implementation of fixer
- each invocation fixes one key for one store on one cluster

src/java/voldemort/client/protocol/admin/AdminClient.java
- added repairEntry method. Very much a work-in-progress.

src/java/voldemort/utils/ByteUtils.java
- added fromHexString helper function. (Sister function of toHexString)

test/unit/voldemort/utils/ByteUtilsTest.java
- improved tests for to/from HexString
Added multiple-key options to ConsistencyFix tool.

src/java/voldemort/utils/ConsistencyFix.java
- Options for keys:
  --key : single key
  --keys : list of keys on command line
  --key-file : file of keys, one per line.
  keys are in hexadecimal.
- A bunch of TODOs for next step code cleanup, hardening, improving.
Cleaned up initial implementation of ConsistencyFix for preliminary code review.

src/java/voldemort/client/protocol/admin/AdminClient.java
- annotated repairEntry method with TODO items to get review feedback on
- Created new type QueryKeyResult to get rid of a struct of type  Pair<ByteArray, Pair<List<Versioned<byte[]>>, Exception>>

src/java/voldemort/utils/ConsistencyFix.java
- added output file to list non-fixed keys in
- modulate output based on verbose flag
- refactored giant method(s) into smaller methods
- cleaned up TODO comments for review feedback

test/unit/voldemort/client/AdminServiceBasicTest.java
- uses QueryKeyResult type

src/java/voldemort/VoldemortAdminTool.java
- uses QueryKeyResult type
Initial work on fixing out rebalance to more evenly distributed stealing and donating.
Hack to better balance stealing/donation
Re-wrote logic for re-balancing partitions in RebalanceUtils.generateMinCluster().

* Separates stealer nodes from donor nodes within each zone based on a goal of evenly distributing partitions within a zone across all nodes within that zone.
* Permits rebalancing logic to be run for a target cluster.xml that does not include any new nodes.
* Much more verbose output
* A few TODOs outstanding for review discussion
  - Do multiple tries serve any purpose?
  - Does the change that may make an existing node a stealer to smooth out the partition distribution break any other rebalance logic?
  - Why does RebalanceUtils.getCrossZoneMoves sometimes return 0? This tool code be sped up by many orders of magnitude for large clusters if we could avoid calling RebalanceUtils.getCrossZoneMoves
Add many options to vary how generating partitions works.

- turn on/off check to keep primary partitions within same zone
- turn on/off check for other partitions that move zones
- specify amount of randomness among num partitions per node (w/in zone)
Made analyze cluster option much more verbose. Dumps all partition maps and summarizes some aggregate partitions per node information.
Add option to limit the number of contiguous partitions within a zone.

- code to better balance partitions between zones is currently added
  to the main rebalance code. this may not be the right place for this
  code.

- TODO outstanding to figure out if the contig partitions manipulation
  can be done and then the rest of rebalancing can
  continue. Currently, the rest of the code gets broken and a separate
  instantiion of rebalancing needs to be done.
Added more rebalance options and refactored some of the rebalance utils code

- added random swap option that swaps random partitions between random nodes within a zone. This is a poor version of "simulated annealing". It produced some good results though in initial tests.

- Extended the cross zone partition move code that ensures there are no long contiguous runs of partitions within a single zone. Now, this code is followed by code that can balance the number of partitions in each zone. All of this code now runs in a loop until no further cross zone moves are performed. (A single pass of cross zone moves followed by balancing # of partitions per zone runs the risk of having contiguous partitions again.)

- Made most parameters that control these features command line options for the rebalancing --generate option.
Tweaked rebalance swapping algorithm to improve effectiveness. Cleaned up code.

Changed logic of random swapping to iterate over zones while randomly swapping. Because of the dependencies between zones, this appears to work much better.

Cleaned up comments, TODOs, and so on to prepare for code review.
complete transition to max/min ratio for balancing cluster.
Initial implementation of a greedy swapping algorithm.

Greedy swapping is unbelievably expensive because it tests every
possible pair-wise partition swap within a zone before making a single
swap. The goal is to get the most improvement possible with each swap
(to minimize the number of swaps total and so the amount of data
movement).