apache/seatunnel · warning
Unsupported row kind
Error message
Unsupported row kind: {} What it means
This warning is logged by HugeGraphSinkWriter.write() when a SeaTunnelRow arrives with a RowKind the writer does not explicitly handle. The switch covers INSERT, UPDATE_AFTER (via UPDATE_BEFORE pairing / upsert handling) and DELETE; any other kind (e.g. unexpected changelog types) falls into the default branch and the row is skipped without being written.
Solutions
- Check the source/transform producing the rows and confirm the changelog kind contract (INSERT/UPDATE_BEFORE/UPDATE_AFTER/DELETE).
- Adjust the source or insert a transform so rows are normalized to supported kinds.
- If the kind is legitimately unsupported for HugeGraph (e.g. cannot express the op), accept the skip or filter those rows upstream to silence the warning.
Example fix
// before: source emits kinds the sink ignores
// after: normalize with a transform or filter
source {
...
transform {
Filter {
# drop rows whose kind is not representable in HugeGraph
}
}
} Defensive patterns
Strategy: validation
Validate before calling
import static org.apache.seatunnel.api.table.type.RowKind;
Set<String> supported = Set.of("INSERT", "UPDATE_BEFORE", "UPDATE_AFTER", "DELETE");
assert supported.contains(row.getRowKind().name()) : "Sink cannot handle kind " + row.getRowKind(); Prevention
- Pair the sink with sources/transes that emit the standard CDC changelog kinds
- Normalize unsupported kinds upstream with a transform
- Test the full source->sink pipeline with a CDC scenario including updates and deletes
When it happens
Trigger: A row with an unhandled SeaTunnelRowKind reaches write()'s switch default — typically rows outside the connector's expected CDC/upsert contract (kind not INSERT/UPDATE_BEFORE/UPDATE_AFTER/DELETE).
Common situations: Sources emitting row kinds the sink's changelog contract does not anticipate (e.g. unusual transform outputs or connector translations); misuse of the connector with a non-CDC source producing unsupported kinds; version mismatches between API row kinds and connector handling.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- COMMON_UNSUPPORTED_OPERATION
- COMMON_UNSUPPORTED_OPERATION
- Need to add support for executed GTIDs for versions prior…
- Unknown row kind:
- Unknown row kind
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/0decc7202c2d2faa.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-hugegraph/src/main/java/org/apache/seatunnel/connectors/seatunnel/hugegraph/sink/HugeGraphSinkWriter.java:382
switch (row.getRowKind()) {
case INSERT:
handleUpsert(row);
break;
case UPDATE_AFTER:
handleUpdate(pendingUpdateBefore, row);
pendingUpdateBefore = null;
break;
case DELETE:
handleDelete(row);
break;
case UPDATE_BEFORE:
// Correlated with the immediately following UPDATE_AFTER (changelog contract) and
// handled together in handleUpdate, so a key-changing update deletes the
// pre-update element instead of leaving it orphaned.
pendingUpdateBefore = row;
break;
default:
LOG.warn("Unsupported row kind: {}", row.getRowKind());
break;
}
}
private void handleUpsert(SeaTunnelRow row) throws IOException {
List<GraphElementEnvelope> vertexEnvelopes = new ArrayList<>();
List<GraphElementEnvelope> edgeEnvelopes = new ArrayList<>();
for (MappingEntry entry : mappingEntries) {
// mapToEnvelopes returns 1 element normally, or N when unfold expands a list cell.
for (GraphElementEnvelope envelope : mapToEnvelopes(entry, row)) {
if (entry.config.getType() == LabelType.VERTEX) {
vertexEnvelopes.add(envelope);
} else {
edgeEnvelopes.add(envelope);
}
}
}View on GitHub (pinned to cf67b549a7)