apache/druid · error · IllegalStateException

Was asked for a query runner but realtimeAppenderator was…

Error message

Was asked for a query runner but realtimeAppenderator was null!

What it means

getQueryRunnerForIntervals can only serve queries through the single realtime appenderator of the peon. If it is null (no realtime appenderator was created, e.g. in a batch task), the manager throws this ISE because it cannot answer queries from in-flight data.

Solutions

  1. Only query datasources being served by a realtime (streaming) task
  2. Ensure createRealtimeAppenderatorForTask is invoked before any query arrives at the peon
  3. Wait for batch task segments to be published and query historical/middle-manager-published data instead

Example fix

// before
QueryRunner<T> runner = peonManager.getQueryRunnerForIntervals(query, intervals); // throws if batch
// after
if (taskTypeSupportsRealtimeQuery(task)) {
  QueryRunner<T> runner = peonManager.getQueryRunnerForIntervals(query, intervals);
}
Defensive patterns

Strategy: validation

Validate before calling

if (!isRealtimeTask(task)) { return null; /* skip peon query */ }

Type guard

if (manager.hasRealtimeAppenderator()) { runner = manager.getQueryRunnerForIntervals(q, intervals); }

Try / catch

try { return manager.getQueryRunnerForIntervals(query, intervals); } catch (ISE e) { log.warn("no realtime appenderator; no in-flight data"); return null; }

Prevention

When it happens

Trigger: Issuing a query against a peon that has only a batch appenderator, or before createRealtimeAppenderatorForTask has run; query routing (QueryLifecycle / broker) hitting this QueryableDataSource during batch ingestion.

Common situations: Querying in-flight data of a batch task; querying a datasource whose only peon has shut down its appenderator; misdirected broker query routing to a batch task's peon.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/76bd228b3b1e9611. Report an issue: GitHub.

Appendix: source

Thrown at server/src/main/java/org/apache/druid/segment/realtime/appenderator/PeonAppenderatorsManager.java:174

      );
      return batchAppenderator;
    }
  }

  @Override
  public void removeAppenderatorsForTask(String taskId, String dataSource)
  {
    // the peon only runs one task, and the process will shutdown later, don't need to do anything
  }

  @Override
  public <T> QueryRunner<T> getQueryRunnerForIntervals(
      Query<T> query,
      Iterable<Interval> intervals
  )
  {
    if (realtimeAppenderator == null) {
      throw new ISE("Was asked for a query runner but realtimeAppenderator was null!");
    } else {
      return realtimeAppenderator.getQueryRunnerForIntervals(query, intervals);
    }
  }

  @Override
  public <T> QueryRunner<T> getQueryRunnerForSegments(
      Query<T> query,
      Iterable<SegmentDescriptor> specs
  )
  {
    if (realtimeAppenderator == null) {
      throw new ISE("Was asked for a query runner but realtimeAppenderator was null!");
    } else {
      return realtimeAppenderator.getQueryRunnerForSegments(query, specs);
    }
  }

View on GitHub (pinned to 9b90983fd2)