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
- Set druid.request.logging.transportUrl to the OpenLineage endpoint (e.g. http://marquez:5000) in runtime.properties
- If you do not have an HTTP endpoint, change druid.request.logging.transportType to CONSOLE or LOGGING
- 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
- Set druid.request.logging.transportUrl whenever transportType=HTTP
- Lint runtime.properties against the extension's required-property list before deploy
- Use config templates that pair transportType and transportUrl together
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
- Can't load TrustStore. Truststore path or password is not se
- Failed to configure TLS for OpenLineage HTTP transport
- Property[%s] not specified.
- maxActiveProcessors[%d] < 1
- unknown encoding strategy : %s
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/4d8dd201cee73141.
Report an issue: GitHub.