{"record":{"id":"4d8dd201cee73141","repo":"apache/druid","slug":"druid-request-logging-transporturl-must-be-set-whe","errorCode":null,"errorMessage":"druid.request.logging.transportUrl must be set when transportType=HTTP","messagePattern":"druid\\.request\\.logging\\.transportUrl must be set when transportType=HTTP","errorType":"validation","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions-contrib/openlineage-emitter/src/main/java/org/apache/druid/extensions/openlineage/OpenLineageRequestLogger.java","lineNumber":143,"sourceCode":"\n  public OpenLineageRequestLogger(\n      ObjectMapper jsonMapper,\n      String namespace,\n      OpenLineageRequestLoggerProvider.TransportType transportType,\n      @Nullable String transportUrl,\n      Set<String> excludedNativeQueryTypes,\n      int emitQueueCapacity,\n      int emitThreadCount,\n      @Nullable HttpClient httpClient\n  )\n  {\n    this.jsonMapper = jsonMapper;\n    this.namespace = namespace;\n    this.transportType = transportType;\n    this.transportUrl = transportUrl;\n    this.excludedNativeQueryTypes = excludedNativeQueryTypes;\n    if (transportType == OpenLineageRequestLoggerProvider.TransportType.HTTP && transportUrl == null) {\n      throw new IllegalStateException(\n          \"druid.request.logging.transportUrl must be set when transportType=HTTP\"\n      );\n    }\n    if (transportType == OpenLineageRequestLoggerProvider.TransportType.HTTP) {\n      this.httpClient = httpClient != null ? httpClient : HttpClientBuilder.create().build();\n      // Bounded queue: if the queue is full, drop the event rather than blocking the query thread.\n      // A warning is logged on the first drop and every DISCARD_WARNING_INTERVAL drops thereafter.\n      this.emitExecutor = new ThreadPoolExecutor(\n          emitThreadCount,\n          emitThreadCount,\n          60L,\n          TimeUnit.SECONDS,\n          new ArrayBlockingQueue<>(emitQueueCapacity),\n          Execs.makeThreadFactory(\"OpenLineageEmitter-%d\"),\n          new DiscardWithWarningPolicy(discardedEventCount)\n      );\n    } else {\n      this.httpClient = null;","sourceCodeStart":125,"sourceCodeEnd":161,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-contrib/openlineage-emitter/src/main/java/org/apache/druid/extensions/openlineage/OpenLineageRequestLogger.java#L125-L161","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before (runtime.properties)\ndruid.request.logging.transportType=HTTP\n// after\ndruid.request.logging.transportType=HTTP\ndruid.request.logging.transportUrl=http://openlineage:5000","handlingStrategy":"validation","validationCode":"Properties props = loadRuntimeProperties();\nif (\"HTTP\".equalsIgnoreCase(props.getProperty(\"druid.request.logging.transportType\", \"\"))\n    && props.getProperty(\"druid.request.logging.transportUrl\") == null) {\n  throw new IllegalStateException(\"transportUrl required for HTTP transport\");\n}","typeGuard":null,"tryCatchPattern":"try { startService(); } catch (IllegalStateException e) { if (e.getMessage().contains(\"transportUrl\")) { fixConfigAndRestart(); } }","preventionTips":["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"],"tags":["java","configuration","openlineage"],"backgroundTag":"missing-required-config-field","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}