{"record":{"id":"a8372debf68148a2","repo":"apache/seatunnel","slug":"tables-configs-d-start-mode-timestamp-must-be-a8372d","errorCode":null,"errorMessage":"tables_configs[%d]: 'start.mode.timestamp' must be >= 0, got: %d","messagePattern":"tables_configs\\[(.+?)\\]: 'start\\.mode\\.timestamp' must be >= 0, got: (.+?)","errorType":"error_code","errorClass":"OptionValidationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-rocketmq/src/main/java/org/apache/seatunnel/connectors/seatunnel/rocketmq/source/RocketMqSourceFactory.java","lineNumber":149,"sourceCode":"                if (topics == null || topics.trim().isEmpty()) {\n                    throw new OptionValidationException(\n                            \"tables_configs[%d]: 'topics' must not be empty\", i);\n                }\n                StartMode startMode =\n                        tableConfig.getOptional(RocketMqSourceOptions.START_MODE).orElse(null);\n                if (startMode == StartMode.CONSUME_FROM_TIMESTAMP) {\n                    Long ts =\n                            tableConfig\n                                    .getOptional(RocketMqSourceOptions.START_MODE_TIMESTAMP)\n                                    .orElse(null);\n                    if (ts == null) {\n                        throw new OptionValidationException(\n                                \"tables_configs[%d]: 'start.mode.timestamp' required \"\n                                        + \"when start.mode=CONSUME_FROM_TIMESTAMP\",\n                                i);\n                    }\n                    if (ts < 0) {\n                        throw new OptionValidationException(\n                                \"tables_configs[%d]: 'start.mode.timestamp' must be >= 0, got: %d\",\n                                i, ts);\n                    }\n                } else if (startMode == StartMode.CONSUME_FROM_SPECIFIC_OFFSETS) {\n                    Map<String, Long> offsets =\n                            tableConfig\n                                    .getOptional(RocketMqSourceOptions.START_MODE_OFFSETS)\n                                    .orElse(null);\n                    if (offsets == null || offsets.isEmpty()) {\n                        throw new OptionValidationException(\n                                \"tables_configs[%d]: 'start.mode.offsets' must not be empty \"\n                                        + \"when start.mode=CONSUME_FROM_SPECIFIC_OFFSETS\",\n                                i);\n                    }\n                }\n            }\n            return true;\n        }","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-rocketmq/src/main/java/org/apache/seatunnel/connectors/seatunnel/rocketmq/source/RocketMqSourceFactory.java#L131-L167","documentation":"Along with requiring start.mode.timestamp, evaluate() rejects negative values: the timestamp must be >= 0 epoch millis. A negative value throws OptionValidationException with the offending value interpolated.","triggerScenarios":"A tables_configs entry with start.mode=CONSUME_FROM_TIMESTAMP and start.mode.timestamp < 0, e.g. -1 or a miscalculated epoch.","commonSituations":"Using -1 as a sentinel for 'auto', subtracting in ms-epoch arithmetic and underflowing, or writing a seconds-based value with a stray minus sign.","solutions":["Set start.mode.timestamp to a valid non-negative epoch-millisecond value","If 'latest' was intended, use start.mode=CONSUME_FROM_LATEST instead of a negative sentinel","Compute the timestamp with System.currentTimeMillis() or `date +%s%3N` rather than by hand"],"exampleFix":"// before\nstart.mode = \"CONSUME_FROM_TIMESTAMP\"\nstart.mode.timestamp = -1\n// after\nstart.mode = \"CONSUME_FROM_LATEST\"","handlingStrategy":"validation","validationCode":"long ts = Long.parseLong(cfg.get(\"start.mode.timestamp\"));\nif (ts < 0) throw new IllegalArgumentException(\"start.mode.timestamp must be >= 0\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Generate timestamps programmatically (System.currentTimeMillis())","Never use -1 or negative sentinels for 'latest'; use the proper start mode enum","Double-check unit: the option expects epoch milliseconds"],"tags":["config","validation","rocketmq"],"backgroundTag":"value-out-of-range","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"}