{"record":{"id":"ca9f7e0e0f580874","repo":"apache/seatunnel","slug":"unsupported-operation-ca9f7e","errorCode":"UNSUPPORTED_OPERATION","errorMessage":"Unsupported write row kind: ","messagePattern":"Unsupported write row kind: ","errorType":"error_code","errorClass":"KuduConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/serialize/KuduRowSerializer.java","lineNumber":68,"sourceCode":"    @Override\n    public Operation serializeRow(SeaTunnelRow row) {\n        Operation operation;\n        switch (row.getRowKind()) {\n            case INSERT:\n                if (saveMode == KuduSinkConfig.SaveMode.OVERWRITE) {\n                    operation = kuduTable.newUpsert();\n                    break;\n                }\n                operation = kuduTable.newInsert();\n                break;\n            case UPDATE_AFTER:\n                operation = kuduTable.newUpsert();\n                break;\n            case DELETE:\n                operation = kuduTable.newDelete();\n                break;\n            default:\n                throw new KuduConnectorException(\n                        CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,\n                        \"Unsupported write row kind: \" + row.getRowKind());\n        }\n        transform(operation, row);\n        return operation;\n    }\n\n    private void transform(Operation operation, SeaTunnelRow element) {\n        PartialRow row = operation.getRow();\n        for (int columnIndex = 0; columnIndex < seaTunnelRowType.getTotalFields(); columnIndex++) {\n            SeaTunnelDataType<?> type = seaTunnelRowType.getFieldType(columnIndex);\n            try {\n                switch (type.getSqlType()) {\n                    case BOOLEAN:\n                    case TINYINT:\n                    case SMALLINT:\n                    case INT:\n                    case BIGINT:","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/serialize/KuduRowSerializer.java#L50-L86","documentation":"KuduRowSerializer.serializeRow() maps a SeaTunnelRow's RowKind to a Kudu write operation (INSERT/UPSERT/DELETE). RowKinds outside the supported set fall into the default branch and throw KuduConnectorException with UNSUPPORTED_OPERATION, naming the offending RowKind.","triggerScenarios":"Writing a row whose RowKind is UPDATE_BEFORE, UPDATE_AFTER, or any kind not mapped to a Kudu operation when using the Kudu sink.","commonSituations":"CDC pipelines (e.g. MySQL CDC) emitting UPDATE_BEFORE/UPDATE_AFTER rows directly into a Kudu sink without aggregation or without configuring sink support for update semantics.","solutions":["Preprocess the stream so only INSERT/UPDATE_AFTER/DELETE rows reach the sink (e.g. use a deduplicate transform)","Configure the sink to upsert (UPDATE_AFTER maps to UPSERT)","Filter out unsupported RowKinds before the sink"],"exampleFix":"// before\n// UPDATE_BEFORE rows sent to kudu sink\n// after\n// add transform/dropRowKind or route UPDATE_AFTER -> UPSERT before sink","handlingStrategy":"validation","validationCode":"// Filter unsupported RowKinds before the sink\nif (row.getRowKind() == RowKind.INSERT || row.getRowKind() == RowKind.UPDATE_AFTER || row.getRowKind() == RowKind.DELETE) { /* send to sink */ } else { /* drop or route */ }","typeGuard":null,"tryCatchPattern":"try { serializer.serializeRow(row); } catch (KuduConnectorException e) {\n  if (\"UNSUPPORTED_OPERATION\".equals(e.getSeaTunnelErrorCode())) { /* drop/transform row */ }\n}","preventionTips":["Use a deduplicate/transform to collapse CDC UPDATE_BEFORE+UPDATE_AFTER pairs","Route UPDATE_AFTER rows as upserts","Filter RowKind before the Kudu sink"],"tags":["kudu","sink","rowkind"],"backgroundTag":"unsupported-operation","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}