subprojects/parseq/src/main/java/com/linkedin/parseq/Engine.java
public void run(final Task<?> task, final String planClass) {
    if (!tryRun(task, planClass)) {
      throw new IllegalStateException("Starting new plan rejected, exceeded limit of concurrent plans: " + _maxConcurrentPlans);
    }
  }
public void run(final Task<?> task, final String planClass) {
    if (!tryRun(task, planClass)) {
      throw new IllegalStateException("Starting new plan rejected, exceeded limit of concurrent plans: " + _maxConcurrentPlans);
    }
  }
Runs the given task. Task passed in as a parameter becomes a root on a new Plan.
All tasks created and started as a consequence of a root task will belong to that plan and will share a Trace.
<p>
This method throws {@code IllegalStateException} if Engine does not have capacity to run the task.
Engine's capacity is specified by a {@value #MAX_CONCURRENT_PLANS} configuration property. Use
{@link EngineBuilder#setEngineProperty(String, Object)} to set this property.
For the sake of backwards compatibility default value for a {@value #MAX_CONCURRENT_PLANS} is
{@value #DEFUALT_MAX_CONCURRENT_PLANS} which essentially means "unbounded capacity".

@param task the task to run
@param planClass string that identifies a "class" of the Plan. Plan class ends up in a ParSeq
Trace and can be used to group traces into "classes" when traces are statistically analyzed.
@throws IllegalStateException