apache/seatunnel · critical · DorisConnectorException
STREAM_LOAD_FAILED
STREAM_LOAD_FAILED
Error message
${errorMessageByStreamLoad} What it means
RecordBuffer stores an asynchronous error message captured from the Doris stream load HTTP response (set by a background reader thread) and rethrows it as a DorisConnectorException on the next buffer operation via checkErrorMessageByStreamLoad. It surfaces a stream load that Doris rejected mid-flight on the thread performing data writes.
Source
Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/sink/writer/RecordBuffer.java:143
if (currentReadBuffer.limit() == 0) {
recycleBuffer(currentReadBuffer);
currentReadBuffer = null;
checkState(readQueue.isEmpty());
return -1;
}
int available = currentReadBuffer.remaining();
int nRead = Math.min(available, buf.length);
currentReadBuffer.get(buf, 0, nRead);
if (currentReadBuffer.remaining() == 0) {
recycleBuffer(currentReadBuffer);
currentReadBuffer = null;
}
return nRead;
}
private void checkErrorMessageByStreamLoad() {
if (errorMessageByStreamLoad != null) {
throw new DorisConnectorException(
DorisConnectorErrorCode.STREAM_LOAD_FAILED, errorMessageByStreamLoad);
}
}
private void recycleBuffer(ByteBuffer buffer) throws InterruptedException {
((Buffer) buffer).clear();
while (!writeQueue.offer(buffer, 100, TimeUnit.MILLISECONDS)) {
checkErrorMessageByStreamLoad();
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Read the embedded errorMessageByStreamLoad detail — it names the actual Doris failure (schema, label, data quality)
- Verify table schema matches the sink's column list and SeaTunnel row types
- Check Doris BE logs and the load error URL in the message for bad-row details
- Ensure the label generator avoids duplicate labels after restarts
Defensive patterns
Strategy: try-catch
Validate before calling
// validate schema/data before sink // ensure row arity and types match the Doris target table schema
Try / catch
try { writer.write(row); } catch (DorisConnectorException e) { LOG.error("stream load rejected: {}", e.getMessage()); throw e; } Prevention
- Match SeaTunnel row schema exactly to Doris table columns
- Set max_filter_ratio appropriately or clean bad data
- Ensure unique load labels across restarts
- Monitor BE availability during writes
When it happens
Trigger: stopBufferData, write, read, or recycleBuffer run while errorMessageByStreamLoad was populated by a failed HTTP stream load (e.g. non-200, 'Fail', label conflict, OLAP_ERR errors).
Common situations: Doris rejected the load due to schema mismatch (column count/type), bad data format (unselectable/failed rows exceeding max_filter_ratio), label already exists, or BE unavailable during flush.
Related errors
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/acdb1f29aeddd52e.
Report an issue: GitHub.