{"record":{"id":"ca29c1b4c39d03b5","repo":"apache/flink","slug":"missing-jobid-specify-a-job-id-to-trigger-a-savep","errorCode":null,"errorMessage":"Missing JobID. Specify a Job ID to trigger a savepoint.","messagePattern":"Missing JobID\\. Specify a Job ID to trigger a savepoint\\.","errorType":"validation","errorClass":"CliArgsException","httpStatus":null,"severity":"critical","filePath":"flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java","lineNumber":758,"sourceCode":"            runClusterAction(\n                    activeCommandLine,\n                    commandLine,\n                    (clusterClient, effectiveConfiguration) ->\n                            disposeSavepoint(\n                                    clusterClient,\n                                    savepointOptions.getSavepointPath(),\n                                    getClientTimeout(effectiveConfiguration)));\n        } else {\n            String[] cleanedArgs = savepointOptions.getArgs();\n\n            final JobID jobId;\n\n            if (cleanedArgs.length >= 1) {\n                String jobIdString = cleanedArgs[0];\n\n                jobId = parseJobId(jobIdString);\n            } else {\n                throw new CliArgsException(\n                        \"Missing JobID. \" + \"Specify a Job ID to trigger a savepoint.\");\n            }\n\n            final String savepointDirectory;\n            if (cleanedArgs.length >= 2) {\n                savepointDirectory = cleanedArgs[1];\n            } else {\n                savepointDirectory = null;\n            }\n\n            // Print superfluous arguments\n            if (cleanedArgs.length >= 3) {\n                logAndSysout(\n                        \"Provided more arguments than required. Ignoring not needed arguments.\");\n            }\n\n            runClusterAction(\n                    activeCommandLine,","sourceCodeStart":740,"sourceCodeEnd":776,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java#L740-L776","documentation":"Thrown from NestedPrimitiveColumnReader.initDictionary when the Parquet dictionary page for a nested column fails to decode — encoding.initDictionary(descriptor, dictionaryPage) threw an IOException. The dictionary page is corrupt, uses an unsupported dictionary encoding, or its declared size does not match its bytes. The descriptor identifies the column.","triggerScenarios":"A nested (list/map/struct) column's DICTIONARY_PAGE with truncated bytes or invalid plain-data length; dictionary page encoding not supported by parquet-mr's initDictionary; decompression producing wrong-sized dictionary data.","commonSituations":"Corrupt files in HDFS/S3; codec/version mismatch where the writer's compression codec differs from what the reader applies; dictionary pages exceeding size limits written malformed.","solutions":["Check the cause: decompression failures point to a codec/bundling issue; EOF points to truncation","Ensure the Parquet file's compression codec is supported by the Flink parquet format's classpath (snappy/zstd/lz4/gzip natives available)","Verify with `parquet-tools meta` that the dictionary page parses in a reference implementation; regenerate the file if malformed","Re-obtain the file if transfer corruption is possible"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    nestedReader.initDictionaryPage(pageReader, ...);\n} catch (IOException e) {\n    // 'Could not decode the dictionary for %s' — check cause for codec vs truncation\n    if (ExceptionUtils.getRootCause(e) instanceof DecompressionException) fixCodecClasspath();\n    else quarantine(file);\n}","preventionTips":["Ship the exact compression codec dependencies (snappy, zstd, lz4) your files use inside the Flink Parquet format's classpath","Verify dictionary pages with parquet-tools during onboarding of new data producers","Treat decode failures as file defects: quarantine and re-produce, never silently skip"],"tags":["parquet","nested","dictionary","data-corruption"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}