{"record":{"id":"e470af30456cf4aa","repo":"apache/shardingsphere","slug":"unknown-roweventtype-s","errorCode":null,"errorMessage":"Unknown rowEventType: %s","messagePattern":"Unknown rowEventType: (.+?)","errorType":"exception","errorClass":"IngestException","httpStatus":null,"severity":"error","filePath":"kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/ingest/incremental/wal/decode/MppdbDecodingPlugin.java","lineNumber":128,"sourceCode":"        } else if (dataText.startsWith(\"{\")) {\n            result = readTableEvent(dataText);\n        }\n        return result;\n    }\n    \n    private AbstractWALEvent decodeDataIgnoreTX(final String dataText) {\n        return dataText.startsWith(\"{\") ? readTableEvent(dataText) : new PlaceholderEvent();\n    }\n    \n    private AbstractRowEvent readTableEvent(final String mppData) {\n        MppTableData mppTableData;\n        mppTableData = JsonUtils.fromJsonString(mppData, MppTableData.class);\n        String rowEventType = mppTableData.getOpType();\n        PipelineSQLOperationType type;\n        try {\n            type = PipelineSQLOperationType.valueOf(rowEventType);\n        } catch (final IllegalArgumentException ex) {\n            throw new IngestException(\"Unknown rowEventType: \" + rowEventType);\n        }\n        AbstractRowEvent result;\n        switch (type) {\n            case INSERT:\n                result = readWriteRowEvent(mppTableData);\n                break;\n            case UPDATE:\n                result = readUpdateRowEvent(mppTableData);\n                break;\n            case DELETE:\n                result = readDeleteRowEvent(mppTableData);\n                break;\n            default:\n                throw new IngestException(\"Unknown rowEventType: \" + rowEventType);\n        }\n        String[] tableMetaData = mppTableData.getTableName().split(\"\\\\.\");\n        result.setSchemaName(tableMetaData[0]);\n        result.setTableName(tableMetaData[1]);","sourceCodeStart":110,"sourceCodeEnd":146,"githubUrl":"https://github.com/apache/shardingsphere/blob/e952770a215630a3659c75d64369168cd3e26b82/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/ingest/incremental/wal/decode/MppdbDecodingPlugin.java#L110-L146","documentation":"MppdbDecodingPlugin (openGauss incremental ingest) parses each WAL logical-decoding message into MppTableData and maps its opType string to PipelineSQLOperationType with valueOf. If the plugin emits an op type not present in that enum, an IngestException('Unknown rowEventType: <opType>') is thrown, aborting the incremental channel. It signals a mismatch between the decoding plugin's output vocabulary and what ShardingSphere can interpret.","triggerScenarios":"The openGauss logical replication slot sends a message whose opType field is not INSERT/UPDATE/DELETE (or differs in casing/format), e.g. TRUNCATE, BEGIN-like tags, or a plugin version that uses different operation codes; also malformed JSON whose opType parses as null.","commonSituations":"openGauss or mppdb_decoding plugin version emitting operation types ShardingSphere's PipelineSQLOperationType enum does not contain; TRUNCATE-heavy workloads on the source; upgrades on either side that add new op codes; mixed plugin output formats.","solutions":["Identify the emitted opType from the message and confirm against PipelineSQLOperationType values supported by your ShardingSphere version.","Avoid unsupported operations (notably TRUNCATE) on replicated tables, or handle them outside the pipeline.","Align versions: use an openGauss/mppdb_decoding plugin whose output matches the ShardingSphere release, or upgrade ShardingSphere to one supporting the new op type.","If the slot output is corrupted (JSON parse oddities), recreate the replication slot and restart incremental ingestion from a fresh snapshot."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"Set<String> known = Arrays.stream(PipelineSQLOperationType.values()).map(Enum::name).collect(Collectors.toSet());\n// validate emitted opType before feeding the decoder (in tests / plugin contract checks)\nif (!known.contains(opType)) { /* unsupported operation on source */ }","typeGuard":null,"tryCatchPattern":"try {\n    plugin.decode(dataText);\n} catch (final IngestException ex) {\n    if (ex.getMessage().startsWith(\"Unknown rowEventType\")) {\n        // identify the op, remove/avoid it on source, recreate slot, restart incremental\n    }\n}","preventionTips":["Pin the openGauss/mppdb_decoding plugin version to one validated against your ShardingSphere release.","Prohibit TRUNCATE and unusual DDL on tables participating in an openGauss pipeline.","Watch incremental-task logs for the first unknown opType so corrective action starts early."],"tags":["pipeline","opengauss","wal","incremental","enum"],"backgroundTag":null,"analyzedSha":"e952770a215630a3659c75d64369168cd3e26b82","analyzedAt":"2026-08-14T13:54:53.392Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}