code: @Override
    public PackingPlan repack(PackingPlan currentPackingPlan, int containers, Map<String, Integer>
        componentChanges) throws PackingException {
      if (containers == currentPackingPlan.getContainers().size()) {
        return repack(currentPackingPlan, componentChanges);
      }
      Map<String, Integer> newComponentParallelism = getNewComponentParallelism(currentPackingPlan,
          componentChanges);
      return packInternal(containers, newComponentParallelism);
    }
docs: Read the current packing plan with update parallelism and number of containers
  to calculate a new packing plan.
  The packing algorithm packInternal() is shared with pack()
  delegate to packInternal() with the new container count and component parallelism
  
  @param currentPackingPlan Existing packing plan
  @param containers &lt; the new number of containers for the topology
  specified by the user
  @param componentChanges Map &lt; componentName, new component parallelism &gt;
  that contains the parallelism for each component whose parallelism has changed.
  @return new packing plan
  @throws PackingException