// For every fragment, create a Wrapper in PlanningSet.
  @VisibleForTesting
  public void initFragmentWrappers(Fragment rootFragment, PlanningSet planningSet) {
    planningSet.get(rootFragment);

    for (ExchangeFragmentPair fragmentPair : rootFragment) {
      initFragmentWrappers(fragmentPair.getNode(), planningSet);
    }
  }
  /**
   * Helper method to reuse the code for QueryWorkUnit(s) generation
   *
   * @param activeEndpoints
   * @param rootFragment
   * @return
   * @throws ExecutionSetupException
   */
  protected PlanningSet getFragmentsHelper(
      Collection<DrillbitEndpoint> activeEndpoints, Fragment rootFragment)
      throws ExecutionSetupException {

    PlanningSet planningSet = new PlanningSet();

    initFragmentWrappers(rootFragment, planningSet);

    final Set<Wrapper> leafFragments = constructFragmentDependencyGraph(planningSet);

    // Start parallelizing from leaf fragments
    for (Wrapper wrapper : leafFragments) {
      parallelizeFragment(wrapper, planningSet, activeEndpoints);
    }

    return planningSet;
  }