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
- Do not call this method directly; use the collection-based record() overload that the embedded history supports.
- 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.
- 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
- Use the EmbeddedDatabaseHistory only through the API surface it implements
- For jobs capturing DDL, configure a schema-history store that supports recording
- Check the Debezium connector's schema-history usage before switching to embedded history
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
- The table changes should only have one element
- Unable to instantiate the database history class " + config.
- Multiple incremental splits are not supported
- not supported create new Offset by committed offset.
- The SplitChange type of %s is not supported.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/93d15abb32416202.
Report an issue: GitHub.