apache/seatunnel · warning · IOException
Interrupted during Doris retry backoff
Error message
Interrupted during Doris retry backoff
What it means
The Doris committer sleeps with exponential backoff (1s, 2s, 4s, 8s, 16s capped) between HTTP retries. If the sleeping thread is interrupted, it re-asserts the interrupt flag and throws this IOException so the commit/abort operation unwinds promptly instead of silently resuming retries.
Source
Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/sink/committer/DorisCommitter.java:276
} else {
log.info("load result {}", loadResult);
}
}
}
private void sleepBeforeNextAttempt(int attempt) throws IOException {
if (attempt < maxRetry) {
retrySleeper.sleep(attempt + 1);
}
}
private static void sleepBeforeRetry(int retry) throws IOException {
try {
int shift = Math.min(Math.max(retry - 1, 0), 4);
Thread.sleep(1000L * (1L << shift));
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new IOException("Interrupted during Doris retry backoff", ie);
}
}
private void handleAbortSuccess(DorisCommitInfo committable, CloseableHttpResponse response)
throws IOException {
ObjectMapper mapper = new ObjectMapper();
String loadResult = EntityUtils.toString(response.getEntity());
Map<String, String> res =
mapper.readValue(loadResult, new TypeReference<HashMap<String, String>>() {});
if (!LoadStatus.SUCCESS.equals(res.get("status"))) {
if (ResponseUtil.isCommitted(res.get("msg"))) {
throw new DorisConnectorException(
DorisConnectorErrorCode.STREAM_LOAD_FAILED,
"try abort committed transaction, " + "do you recover from old savepoint?");
}
log.warn(
"Fail to abort transaction. txnId: {}, error: {}",
committable.getTxbID(),View on GitHub (pinned to cf67b549a7)
Solutions
- This usually accompanies an intentional cancellation — check the job/engine logs for the original cancel reason
- If it happens during long retries, fix the underlying Doris connectivity so retries don't stack up
- Reduce checkpoint/transaction timeout mismatch so the job fails cleanly rather than retrying until cancellation
- No code fix needed; the interrupt flag is properly restored by the connector
Defensive patterns
Strategy: retry
Try / catch
try { committer.commit(c); } catch (IOException e) { if (e.getMessage().contains("Interrupted during Doris retry backoff")) { /* job is being cancelled; do not swallow — restore/cleanup and exit */ Thread.currentThread().interrupt(); } } Prevention
- Fix underlying Doris connectivity so retries rarely trigger
- Align checkpoint timeouts with retry budget to fail fast instead of being interrupted
- Treat this as a cancellation signal, not a Doris failure
When it happens
Trigger: Thread.interrupt() is delivered while sleepBeforeRetry is in Thread.sleep — typically when the SeaTunnel engine cancels the job, a checkpoint timeout triggers task cancellation, or the JVM is shutting down.
Common situations: User cancels the SeaTunnel job while a Doris retry backoff is in progress; checkpoint expired and the engine interrupts the task thread; cluster shutdown.
Understand the failure class
Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.
Related errors
- Interrupted during retry
- Failed to get connection, interrupted while doing another at
- Thread interrupted
- The status of open scanner result from {} is '{}', error mes
- Failed to execute HTTP request to %s after %d attempts
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/04f3140294c392e3.
Report an issue: GitHub.