apache/seatunnel · error · HugeGraphConnectorException
OPERATION_RETRY_INTERRUPTED
OPERATION_RETRY_INTERRUPTED
Error message
Graph operation retry was interrupted
What it means
Thrown by HugeGraphClient.sleepBeforeRetry when the retry backoff sleep between graph operation attempts is interrupted (InterruptedException), aborting the retry loop for a HugeGraph REST/graph operation.
Solutions
- Check whether the job/task was intentionally cancelled; if so, treat interruption as shutdown
- Avoid saturating HugeGraph so operations succeed on the first attempt and no backoff sleep occurs
- Restore the interrupt status in a catch block and propagate a clean shutdown
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at seatunnel-connectors-v2/connector-hugegraph/src/main/java/org/apache/seatunnel/connectors/seatunnel/hugegraph/client/HugeGraphClient.java:390 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/bb308a11917a41f6.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-hugegraph/src/main/java/org/apache/seatunnel/connectors/seatunnel/hugegraph/client/HugeGraphClient.java:390
throw new HugeGraphConnectorException(
HugeGraphConnectorErrorCode.GRAPH_OPERATION_FAILED,
"Non-retryable error executing graph read operation",
e);
}
}
throw new HugeGraphConnectorException(
HugeGraphConnectorErrorCode.GRAPH_OPERATION_FAILED,
"Failed to execute graph read operation");
}
private void sleepBeforeRetry(int attempt) {
long delay = computeBackoffMs(retryBackoffMs, retryBackoffMaxMs, attempt);
try {
LOG.info("Will retry in {} ms (attempt {})...", delay, attempt);
Thread.sleep(delay);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new HugeGraphConnectorException(
HugeGraphConnectorErrorCode.OPERATION_RETRY_INTERRUPTED,
"Graph operation retry was interrupted",
ie);
}
}
/**
* Exponential backoff: {@code baseMs * 2^(attempt-1)}, capped at {@code maxMs} (a non-positive
* {@code maxMs} means no cap). The shift is bounded so a large {@code maxRetries} cannot
* overflow. {@code attempt} is 1-based (the first retry uses the base delay).
*/
static long computeBackoffMs(long baseMs, long maxMs, int attempt) {
if (baseMs <= 0) {
return 0;
}
int shift = Math.min(Math.max(attempt - 1, 0), 30);
long scaled = baseMs << shift;
if (scaled < 0) {View on GitHub (pinned to cf67b549a7)