apache/druid · error
OpenLineage event dropped: all [%d] attempts to POST to [%s]
Error message
OpenLineage event dropped: all [%d] attempts to POST to [%s] failed with an exception
What it means
OpenLineageRequestLogger.emitHttp POSTs the lineage event to the configured transport URL with up to MAX_SEND_RETRIES+1 attempts. If every attempt throws an exception (connection failure, timeout, IO error), the event is dropped (at-most-once delivery) and this warning names the URL and attempt count.
Source
Thrown at extensions-contrib/openlineage-emitter/src/main/java/org/apache/druid/extensions/openlineage/OpenLineageRequestLogger.java:519
}
catch (IOException e) {
lastException = e;
log.debug(
e,
"OpenLineage HTTP attempt [%d/%d] failed posting to [%s]",
attempt + 1,
MAX_SEND_RETRIES + 1,
transportUrl
);
}
finally {
post.releaseConnection();
}
}
// All attempts exhausted — delivery guarantee is at-most-once.
if (lastException != null) {
log.warn(
lastException,
"OpenLineage event dropped: all [%d] attempts to POST to [%s] failed with an exception",
MAX_SEND_RETRIES + 1,
transportUrl
);
} else {
log.warn(
"OpenLineage event dropped: all [%d] attempts to POST to [%s] returned non-2xx status [%d]",
MAX_SEND_RETRIES + 1,
transportUrl,
lastStatusCode
);
}
}
private void putLongStat(ObjectNode node, String targetKey, Map<String, Object> stats, String... sourceKeys)
{
for (String key : sourceKeys) {View on GitHub (pinned to 9b90983fd2)
Solutions
- Verify the transportUrl is correct and reachable: curl -X POST <transportUrl> from the Druid host
- Check that the OpenLineage backend (Marquez/OpenLineage server) is running and healthy
- Review network/firewall/TLS configuration between Druid and the collector
- Confirm events are being produced at all — note this is at-most-once delivery; dropped events are not re-sent
- Increase logging verbosity to capture the underlying lastException cause
Example fix
// before
url = "http://localhost:5000" // Marquez not running on this host/port
// after
url = "http://marquez.internal:5000/api/v1/lineage" // verified reachable
curl -s -o /dev/null -w '%{http_code}' -X POST http://marquez.internal:5000/api/v1/lineage Defensive patterns
Strategy: retry
Validate before calling
// before emitting
try (Socket s = new Socket()) {
s.connect(new InetSocketAddress(host, port), 3000); // verify endpoint reachable
} catch (IOException e) { log.warn("OpenLineage endpoint unreachable"); } Try / catch
try { logger.emit(event); } catch (Exception e) { log.warn("OpenLineage emit failed; event is at-most-once", e); } Prevention
- Health-check the OpenLineage collector before heavy query bursts
- Pin and verify transportUrl in runtime.properties
- Monitor for dropped-event warnings and alert
When it happens
Trigger: All POST attempts throwing exceptions: target host unreachable, DNS failure, TLS handshake errors, connection refused/reset, or request timeouts against the OpenLineage endpoint.
Common situations: OpenLineage collector (e.g. Marquez) down or wrong port; wrong transportUrl in runtime.properties; firewalls blocking egress; TLS certificate mismatch; collector restarting.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- Requested to skip [%s] bytes, but actual number of bytes ski
- Exception while getting active tasks from Overlord. Will ret
- OpenLineage event dropped: all [%d] attempts to POST to [%s]
- Error reading response
- Error reading response from GET on url [%s]
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/49091f4a0ee9ca89.
Report an issue: GitHub.