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

  1. Verify the transportUrl is correct and reachable: curl -X POST <transportUrl> from the Druid host
  2. Check that the OpenLineage backend (Marquez/OpenLineage server) is running and healthy
  3. Review network/firewall/TLS configuration between Druid and the collector
  4. Confirm events are being produced at all — note this is at-most-once delivery; dropped events are not re-sent
  5. 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

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


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