apache/seatunnel · error · java.lang.UnsupportedOperationException

should not call here, error

Error message

should not call here, error

What it means

EmbeddedDatabaseHistory.record(Map, Map, String, String) is a hard no-op stub that always throws UnsupportedOperationException('should not call here, error'). The embedded schema-history implementation used by SeaTunnel's in-engine Debezium only supports the other record() overload; hitting this means Debezium invoked an API path the embedded history does not implement.

Source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/debezium/EmbeddedDatabaseHistory.java:85

        // recover
        String instanceName = config.getString(DATABASE_HISTORY_INSTANCE_NAME);
        this.tableSchemas = new HashMap<>();
        for (TableChange tableChange : removeHistory(instanceName)) {
            tableSchemas.put(tableChange.getId(), tableChange);
        }
    }

    @Override
    public void start() {
        listener.started();
    }

    @Override
    public void record(
            Map<String, ?> source, Map<String, ?> position, String databaseName, String ddl)
            throws DatabaseHistoryException {
        throw new UnsupportedOperationException("should not call here, error");
    }

    @Override
    public void record(
            Map<String, ?> source,
            Map<String, ?> position,
            String databaseName,
            String schemaName,
            String ddl,
            TableChanges changes)
            throws DatabaseHistoryException {
        final HistoryRecord record =
                new HistoryRecord(source, position, databaseName, schemaName, ddl, changes);
        listener.onChangeApplied(record);
    }

    @Override
    public void recover(

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Do not call this method directly; use the collection-based record() overload that the embedded history supports.
  2. If triggered by Debezium internals during a schema change, ensure the job does full snapshot/recovery via a path that uses the supported record() variant, or switch schema.history.internal to a store that supports DDL recording.
  3. Check the SeaTunnel CDC connector version for known issues with DDL events during streaming; upgrade to a version handling them.
Defensive patterns

Strategy: try-catch

Try / catch

try {
    databaseHistory.record(source, position, databaseName, ddl);
} catch (UnsupportedOperationException e) {
    // embedded history does not support this overload; use the collection-based record() or alternate history store
    log.debug("embedded history ignored DDL record: {}", ddl);
}

Prevention

When it happens

Trigger: Debezium's schema-history mechanism calls the 4-arg record(source, position, databaseName, ddl) during DDL capture; EmbeddedDatabaseHistory intentionally rejects it.

Common situations: Using a connector/Debezium code path that records DDL through the unsupported overload, e.g. schema changes during incremental snapshot or a connector not storing DDL events as expected.

Related errors


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