code: public RebalancePlan getPlan(Cluster finalCluster,
                                   List<StoreDefinition> finalStoreDefs,
                                   int batchSize) {
          RebalanceUtils.validateClusterStores(finalCluster, finalStoreDefs);
          // If an interim cluster is needed, then currentCluster should be an
          // interim cluster! I.e., it should include new nodes/zones without any
          // partitions assigned to them.
          RebalanceUtils.validateInterimFinalCluster(currentCluster, finalCluster);
  
          String outputDir = null;
          return new RebalancePlan(currentCluster,
                                   currentStoreDefs,
                                   finalCluster,
                                   finalStoreDefs,
                                   batchSize,
                                   outputDir);
      }
docs: Construct a plan for the specified final cluster/stores & batchSize given
  the current cluster/stores & configuration of the RebalanceController.
  
  @param finalCluster
  @param finalStoreDefs Needed for zone expansion/shrinking.
  @param batchSize
  @return RebalancePlan comprised of one or more batches.