@Override
  public PackingPlan repack(PackingPlan currentPackingPlan, Map<String, Integer> componentChanges) {
    this.numContainers = currentPackingPlan.getContainers().size();
    resetToFirstContainer();

    int additionalContainers = computeNumAdditionalContainers(componentChanges, currentPackingPlan);
    if (additionalContainers > 0) {
      increaseNumContainers(additionalContainers);
      LOG.info(String.format(
          "Allocated %s additional containers for repack bring the number of containers to %s.",
          additionalContainers, this.numContainers));
    }

    while (true) {
      try {
        PackingPlanBuilder planBuilder = newPackingPlanBuilder(currentPackingPlan);
        planBuilder.updateNumContainers(numContainers);
        planBuilder = getResourceCompliantRRAllocation(planBuilder, componentChanges);

        return planBuilder.build();

      } catch (ConstraintViolationException e) {
        //Not enough containers. Adjust the number of containers.
        LOG.info(String.format(
            "%s Increasing the number of containers to %s and attempting to repack again.",
            e.getMessage(), this.numContainers + 1));
        retryWithAdditionalContainer();
      }
    }
  }
@ Override public PackingPlan repack ( PackingPlan currentPackingPlan , Map < String , Integer > componentChanges ) { this . numContainers = currentPackingPlan . getContainers ( ) . size ( ) ; resetToFirstContainer ( ) ; int additionalContainers = computeNumAdditionalContainers ( componentChanges , currentPackingPlan ) ; if ( additionalContainers > 0 ) { increaseNumContainers ( additionalContainers ) ; LOG . info ( String . format ( "Allocated %s additional containers for repack bring the number of containers to %s." , additionalContainers , this . numContainers ) ) ; } while ( true ) { try { PackingPlanBuilder planBuilder = newPackingPlanBuilder ( currentPackingPlan ) ; planBuilder . updateNumContainers ( numContainers ) ; planBuilder = getResourceCompliantRRAllocation ( planBuilder , componentChanges ) ; return planBuilder . build ( ) ; } catch ( ConstraintViolationException e ) { LOG . info ( String . format ( "%s Increasing the number of containers to %s and attempting to repack again." , e . getMessage ( ) , this . numContainers + 1 ) ) ; retryWithAdditionalContainer ( ) ; } } }
Get a new packing plan given an existing packing plan and component-level changes.

@return new packing plan