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] returned non-2xx status [%d]

What it means

Like the exception variant, but here every retry of the OpenLineage POST completed and received a non-2xx HTTP status. The event is dropped (at-most-once) and the final status code is reported in the warning.

Source

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

            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) {
      Object val = stats.get(key);
      if (val instanceof Number) {
        node.put(targetKey, ((Number) val).longValue());
        return;
      }
    }
  }

View on GitHub (pinned to 9b90983fd2)

Solutions

  1. Read lastStatusCode in the warning: 404 → fix URL path; 401/403 → configure auth; 429 → slow down or raise limits; 5xx → check collector health
  2. Verify the transportUrl points at the lineage ingest endpoint (e.g. http://host:5000/api/v1/lineage)
  3. If 413, reduce event/SQL facet size (see SQL facet truncation) or raise collector body limit
  4. Test the exact payload against the endpoint with curl to reproduce the status code

Example fix

// before
transportUrl = "http://marquez:5000" // returns 404
// after
transportUrl = "http://marquez:5000/api/v1/lineage"
Defensive patterns

Strategy: retry

Validate before calling

int code = curlStatus(transportUrl); // expect 2xx before enabling emission
if (code < 200 || code >= 300) { log.warn("OpenLineage endpoint returned %d", code); }

Try / catch

try { logger.emit(event); } catch (Exception e) { /* check logged lastStatusCode; 4xx means fix config, 5xx retry later */ }

Prevention

When it happens

Trigger: The OpenLineage endpoint consistently responds with 4xx/5xx — e.g. 404 for a wrong path, 401/403 for auth-protected collectors, 413 for oversized payloads, 429 rate limiting, or 5xx server errors on every attempt.

Common situations: Wrong URL path (missing /api/v1/lineage); API key/token required but not configured; event payload too large for the collector; collector rate limiting bursts of lineage events.

Related errors


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