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

  1. Read the embedded errorMessageByStreamLoad detail — it names the actual Doris failure (schema, label, data quality)
  2. Verify table schema matches the sink's column list and SeaTunnel row types
  3. Check Doris BE logs and the load error URL in the message for bad-row details
  4. 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

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.