apache/seatunnel · warning

The status of get next result from {} is '{}', error message

Error message

The status of get next result from {} is '{}', error message is: {}.

What it means

Doris BackendClient.getNext() fetches the next scan batch from a backend via Thrift; when TScanNextResult status is not OK it logs 'The status of get next result from {} is ...' at WARN and tries the next routing. This indicates the backend failed mid-scan (after openScanner succeeded).

Source

Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/backend/BackendClient.java:186

     * @throws DorisConnectorException throw if cannot connect to Doris BE
     */
    public TScanBatchResult getNext(TScanNextBatchParams nextBatchParams) {
        log.debug("GetNext to '{}', parameter is '{}'.", routing, nextBatchParams);
        if (!isConnected) {
            open();
        }
        TException ex = null;
        TScanBatchResult result = null;
        for (int attempt = 0; attempt < retries; ++attempt) {
            log.debug("Attempt {} to getNext {}.", attempt, routing);
            try {
                result = client.getNext(nextBatchParams);
                if (result == null) {
                    log.warn("GetNext result from {} is null.", routing);
                    continue;
                }
                if (!TStatusCode.OK.equals(result.getStatus().getStatusCode())) {
                    log.warn(
                            "The status of get next result from {} is '{}', error message is: {}.",
                            routing,
                            result.getStatus().getStatusCode(),
                            result.getStatus().getErrorMsgs());
                    continue;
                }
                return result;
            } catch (TException e) {
                log.warn("Get next from {} failed.", routing, e);
                ex = e;
            }
        }
        if (result != null && (TStatusCode.OK != (result.getStatus().getStatusCode()))) {
            log.error(
                    ErrorMessages.DORIS_INTERNAL_FAIL_MESSAGE,
                    routing,
                    result.getStatus().getStatusCode(),
                    result.getStatus().getErrorMsgs());

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Read errorMsgs in the log line for the Doris-side cause (timeout, memory limit, cancelled).
  2. Increase Doris query timeout / memory limits (query_timeout, mem_limit) for large scans.
  3. Check BE stability (SHOW BACKENDS, BE logs) and retry after the cluster is healthy.
  4. Retry the job; the client rotates to another backend, but a persistent error requires fixing the Doris-side condition.
Defensive patterns

Strategy: retry

Validate before calling

// pre-check cluster capacity for long scans
// SHOW VARIABLES LIKE 'query_timeout';
// SHOW VARIABLES LIKE 'mem_limit';
// SHOW BACKENDS; -- ensure stable BEs

Try / catch

try {
    client.getNext(nextBatchParams);
} catch (TException e) {
    // reconnect / reopen scanner, rotate to next routing
}

Prevention

When it happens

Trigger: Non-OK TStatusCode on getNext: scan timeout on the BE, query cancelled, memory limit exceeded on the backend, or BE lost the scanner context (BE restart) between openScanner and getNext.

Common situations: Large scans hitting Doris query timeout or mem limits; BE restarting/OOM mid-scan; long-running read where the scanner context expires; cluster instability during bulk reads.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/08205a146be198f2. Report an issue: GitHub.