apache/druid · error · IllegalStateException

druid.request.logging.transportUrl must be set when transpor

Error message

druid.request.logging.transportUrl must be set when transportType=HTTP

What it means

OpenLineageRequestLogger validates its configuration at construction time: when druid.request.logging.transportType is HTTP, a transport URL must be provided because the HTTP transport needs an endpoint to POST lineage events to. Missing URL results in IllegalStateException during emitter/request-logger initialization.

Source

Thrown at extensions-contrib/openlineage-emitter/src/main/java/org/apache/druid/extensions/openlineage/OpenLineageRequestLogger.java:143

  public OpenLineageRequestLogger(
      ObjectMapper jsonMapper,
      String namespace,
      OpenLineageRequestLoggerProvider.TransportType transportType,
      @Nullable String transportUrl,
      Set<String> excludedNativeQueryTypes,
      int emitQueueCapacity,
      int emitThreadCount,
      @Nullable HttpClient httpClient
  )
  {
    this.jsonMapper = jsonMapper;
    this.namespace = namespace;
    this.transportType = transportType;
    this.transportUrl = transportUrl;
    this.excludedNativeQueryTypes = excludedNativeQueryTypes;
    if (transportType == OpenLineageRequestLoggerProvider.TransportType.HTTP && transportUrl == null) {
      throw new IllegalStateException(
          "druid.request.logging.transportUrl must be set when transportType=HTTP"
      );
    }
    if (transportType == OpenLineageRequestLoggerProvider.TransportType.HTTP) {
      this.httpClient = httpClient != null ? httpClient : HttpClientBuilder.create().build();
      // Bounded queue: if the queue is full, drop the event rather than blocking the query thread.
      // A warning is logged on the first drop and every DISCARD_WARNING_INTERVAL drops thereafter.
      this.emitExecutor = new ThreadPoolExecutor(
          emitThreadCount,
          emitThreadCount,
          60L,
          TimeUnit.SECONDS,
          new ArrayBlockingQueue<>(emitQueueCapacity),
          Execs.makeThreadFactory("OpenLineageEmitter-%d"),
          new DiscardWithWarningPolicy(discardedEventCount)
      );
    } else {
      this.httpClient = null;

View on GitHub (pinned to 9b90983fd2)

Solutions

  1. Set druid.request.logging.transportUrl to the OpenLineage endpoint (e.g. http://marquez:5000) in runtime.properties
  2. If you do not have an HTTP endpoint, change druid.request.logging.transportType to CONSOLE or LOGGING
  3. Verify the property is placed in the correct runtime.properties for the broker/historical node being started

Example fix

// before (runtime.properties)
druid.request.logging.transportType=HTTP
// after
druid.request.logging.transportType=HTTP
druid.request.logging.transportUrl=http://openlineage:5000
Defensive patterns

Strategy: validation

Validate before calling

Properties props = loadRuntimeProperties();
if ("HTTP".equalsIgnoreCase(props.getProperty("druid.request.logging.transportType", ""))
    && props.getProperty("druid.request.logging.transportUrl") == null) {
  throw new IllegalStateException("transportUrl required for HTTP transport");
}

Try / catch

try { startService(); } catch (IllegalStateException e) { if (e.getMessage().contains("transportUrl")) { fixConfigAndRestart(); } }

Prevention

When it happens

Trigger: Configuring a request logging provider with transportType=HTTP (or defaulting to HTTP) without setting druid.request.logging.transportUrl in runtime.properties, then starting the Druid service.

Common situations: Operators switching from console/file logging to OpenLineage HTTP emission but forgetting the endpoint property; typos in the property name; configs copied from examples using a non-HTTP transport.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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