Currently, it is assumed that no placement policy other than the default can work with the balancer and that the minimum racks required for any placement policy is always 2. The attached pdf suggests enhancements to the existing block placement policy abstraction to enable the following
a) Let placement policies decide if they are compatible with balancer
b) Provide an api to move blocks for balancing
c) Let the placement policy decide the minimum number of racks given the replication factor
d) Also, the private methods in the default policy are made protected, similar to the way its done in trunk, to enable easy derivation of custom policies.
Please refer the pdf and the patch for details.