apache/seatunnel · error · IOException
Failed to send Airtable API request
Error message
Failed to send Airtable API request
What it means
sendWithRateLimitRetry wraps any non-IOException failure while executing the Airtable HTTP request into an IOException with message 'Failed to send Airtable API request' and the original as cause. This covers client-side errors (connection failures, timeouts, serialization issues) rather than Airtable-returned error statuses.
Source
Thrown at seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSinkWriter.java:158
retryCount,
rateLimitMaxRetries,
backoffMillis);
try {
Thread.sleep(backoffMillis);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}
continue;
}
throw new IOException(
String.format(
"Airtable API request failed, status code:[%s], content:[%s]",
response.getCode(), response.getContent()));
} catch (IOException e) {
throw e;
} catch (Exception e) {
throw new IOException("Failed to send Airtable API request", e);
}
}
}
private void waitForRequestSlot() {
if (requestIntervalMs <= 0) {
return;
}
long now = System.currentTimeMillis();
long elapsed = now - lastRequestTimeMillis;
if (elapsed < requestIntervalMs) {
try {
Thread.sleep(requestIntervalMs - elapsed);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}
}View on GitHub (pinned to cf67b549a7)
Solutions
- Inspect the cause chain for the root exception (UnknownHostException, SSLException, ConnectException).
- Verify network/DNS/proxy connectivity from the SeaTunnel worker node to api.airtable.com:443.
- Fix proxy settings (-Dhttps.proxyHost/-Dhttps.proxyPort) if behind a corporate proxy.
- Retry the job once connectivity is restored; the writer is checkpoint-aware so it will resume.
Example fix
// before: worker has no egress to api.airtable.com // after: set JVM proxy args on the worker -Dhttps.proxyHost=proxy.corp.internal -Dhttps.proxyPort=3128
Defensive patterns
Strategy: try-catch
Validate before calling
// From the worker node before running curl -sS --max-time 5 https://api.airtable.com/v0/meta/whoami -H "Authorization: Bearer $AIRTABLE_TOKEN"
Try / catch
try { writer.write(row); } catch (IOException e) { if (getRootCause(e) instanceof java.net.ConnectException || getRootCause(e) instanceof java.net.UnknownHostException) { /* check network/proxy */ } } Prevention
- Verify egress to api.airtable.com:443 from workers
- Configure JVM proxy properties in containerized/VPN networks
- Check DNS resolution inside the cluster
When it happens
Trigger: The HTTP client call itself throws a non-IO exception: DNS/connect failures surfaced as runtime exceptions, SSL handshake errors, request building failures, or interruptions during the HTTP call.
Common situations: Network outages or firewall blocking airtable.com from the SeaTunnel worker, TLS/proxy misconfiguration, or hostname resolution failures in containers.
Related errors
- Failed to fetch metadata from Gravitino for metadata: %s
- fail get tableSchema:
- SEND_RESPONSE_FAILED
- REST_SERVICE_FAILED
- Failed to get response from Doris
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/68841c57cc924bce.
Report an issue: GitHub.