public Boolean call() throws Exception {
      if (sessionState.isPresent()) {
        SessionState.setCurrentSessionState(sessionState.get());
      }
      while (true) {
        // This task may have been sitting the queue for awhile, check if this
        // new session is even still needed
        int oldVal = backlog.get();
        if (oldVal <= 0) return true;
        if (!backlog.compareAndSet(oldVal, oldVal - 1)) continue;
        startInitialSession(this.sessionObjFactory.create(null));
      }
    }
Create {@code sessionCount} number of sessions, doing so in parallel, using
a maximum of {@code maxParallel} threads.

@param sessionCount The number of sessions to launch
@return A single {@code future} which carries all of the outputs from each
        session launch
@throws IllegalArgumentException if {@code sessionCount} or
          {@code maxParallel} is less than or equal to zero
ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezSessionPool.java