{"record":{"id":"0109d5c5d02d9f1a","repo":"apache/seatunnel","slug":"invalid-mysqlincrementalsourceoptions-startup-s","errorCode":null,"errorMessage":"Invalid '${MySqlIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_GTID_SET.key()}' value '${gtidSet}'.","messagePattern":"Invalid '(.+?)' value '(.+?)'\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/source/MySqlIncrementalSource.java","lineNumber":171,"sourceCode":"    private static Optional<String> getValidatedGtidSet(ReadonlyConfig config) {\n        Optional<String> configuredGtidSet =\n                config.getOptional(MySqlIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_GTID_SET);\n        if (!configuredGtidSet.isPresent()) {\n            return Optional.empty();\n        }\n\n        String gtidSet = configuredGtidSet.get().trim();\n        if (StringUtils.isBlank(gtidSet)) {\n            throw new IllegalArgumentException(\n                    String.format(\n                            \"'%s' must not be blank.\",\n                            MySqlIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_GTID_SET.key()));\n        }\n\n        try {\n            new GtidSet(gtidSet);\n        } catch (Exception e) {\n            throw new IllegalArgumentException(\n                    String.format(\n                            \"Invalid '%s' value '%s'.\",\n                            MySqlIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_GTID_SET.key(),\n                            gtidSet),\n                    e);\n        }\n        return Optional.of(gtidSet);\n    }\n\n    private static long getNonNegativeSkipValue(ReadonlyConfig config, Option<Long> option) {\n        long value = config.getOptional(option).orElse(0L);\n        if (value < 0) {\n            throw new IllegalArgumentException(\n                    String.format(\"'%s' must be greater than or equal to 0.\", option.key()));\n        }\n        return value;\n    }\n","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/source/MySqlIncrementalSource.java#L153-L189","documentation":"The configured GTID set string failed parsing by Debezium's GtidSet constructor. The connector wraps the parse exception in an IllegalArgumentException naming the option and the offending value, so bad GTID syntax is rejected before the job starts.","triggerScenarios":"getValidatedGtidSet with specific-offset.gtid-set whose value cannot be parsed by new GtidSet(...) — e.g. malformed UUID, missing ':' interval, invalid characters.","commonSituations":"Typos in UUID (wrong length/hex chars); using comma-separated single UUIDs without :n-m ranges incorrectly; pasting output from a different MySQL tooling format; extra spaces or semicolons.","solutions":["Fix the GTID set to canonical form 'uuid:1-5,uuid2:1-3' (comma-separated, each uuid:range)","Validate with SELECT @@GLOBAL.gtid_executed on the MySQL server and copy it verbatim","Remove the option to fall back to file/position-based specific offsets"],"exampleFix":"// before\nspecific-offset.gtid-set = \"3E11FA47-71CA-11E1-9E33-C80AA9429562\"\n// after\nspecific-offset.gtid-set = \"3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5\"","handlingStrategy":"validation","validationCode":"try {\n    new io.debezium.connector.mysql.GtidSet(gtid.trim());\n} catch (Exception e) {\n    throw new IllegalArgumentException(\"Invalid gtid-set: \" + gtid, e);\n}","typeGuard":"boolean looksLikeGtidSet(String s) { return s != null && s.matches(\"[0-9a-fA-F-]{36}(:[0-9]+(-[0-9]+)?)(,[0-9a-fA-F-]{36}(:[0-9]+(-[0-9]+)?)*)*\"); }","tryCatchPattern":"try { createSource(config); } catch (IllegalArgumentException e) { LOG.error(\"Unparseable gtid-set: {}\", e.getMessage()); throw new ConfigException(e); }","preventionTips":["Copy GTID sets verbatim from SELECT @@GLOBAL.gtid_executed","Use uuid:range pairs; validate format before submission","Test GTID parsing in unit tests with representative values"],"tags":["cdc","mysql","gtid","invalid-format"],"backgroundTag":"invalid-argument-format","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}