apache/seatunnel · warning

Unsupported row type:

Error message

Unsupported row type:

What it means

While consuming TiKV CDC streaming events, TiDBSourceReader.handleRow only handles specific row event types (e.g. PREWRITE, COMMIT, ROLLBACK in the prewrite handling switch). An event row of an unrecognized type falls into the default branch and this warning is logged; the row is skipped but streaming continues (returns true).

Source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-tidb/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/tidb/source/reader/TiDBSourceReader.java:385

            return false;
        }
        log.debug("binlog record, type: {}, data: {}", row.getType(), row);
        switch (row.getType()) {
            case COMMITTED:
                preWrites.put(RowKeyWithTs.ofStart(row), row);
                commits.put(RowKeyWithTs.ofCommit(row), row);
                break;
            case COMMIT:
                commits.put(RowKeyWithTs.ofCommit(row), row);
                break;
            case PREWRITE:
                preWrites.put(RowKeyWithTs.ofStart(row), row);
                break;
            case ROLLBACK:
                preWrites.remove(RowKeyWithTs.ofStart(row));
                break;
            default:
                log.warn("Unsupported row type:" + row.getType());
        }
        return true;
    }

    protected void flushRows(final long resolvedTs) throws Exception {
        flushRowsAndGetSafeResolvedTs(resolvedTs);
    }

    private long flushRowsAndGetSafeResolvedTs(final long resolvedTs) throws Exception {
        long safeResolvedTs = resolvedTs;
        while (!commits.isEmpty() && commits.firstKey().getTimestamp() <= resolvedTs) {
            final RowKeyWithTs commitKey = commits.firstKey();
            final Cdcpb.Event.Row commitRow = commits.firstEntry().getValue();
            final Cdcpb.Event.Row prewriteRow = preWrites.remove(RowKeyWithTs.ofStart(commitRow));
            if (prewriteRow == null) {
                safeResolvedTs = Math.min(safeResolvedTs, commitKey.getTimestamp() - 1);
                log.warn(
                        "Commit row has no matched prewrite row yet, hold it and stop advancing resolvedTs. "

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Verify TiDB/TiKV cluster version compatibility with the connector version; upgrade the seatunnel connector-cdc-tidb plugin if the cluster is newer.
  2. Inspect the logged row type; if it corresponds to a known TiKV event type that should be handled, file/apply a patch adding that case.
  3. No immediate action required — the event is skipped, but monitor for data loss if the type is significant.

Example fix

// before
default:
    log.warn("Unsupported row type:" + row.getType());
// after
case TYPE_UNKNOWN:
case INT_EVENT:
    // ignore non-data events
    break;
default:
    log.warn("Unsupported row type:" + row.getType());
Defensive patterns

Strategy: fallback

Validate before calling

// verify cluster/connector compatibility before running
// ensure TiDB/TiKV version is within the connector's supported matrix

Prevention

When it happens

Trigger: A Cdcpb.Event.Row arrives whose getType() is not one of the types handled by the switch (e.g. newer TiKV event types or marker/unknown types).

Common situations: Connecting to a newer TiDB/TiKV version that emits event types this connector version does not know about; unusual raft/txn event propagation during region merges.

Related errors


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