{"record":{"id":"8b1e4ac4962b26b8","repo":"prestodb/presto","slug":"error-reading-dictionary-page","errorCode":null,"errorMessage":"Error reading dictionary page","messagePattern":"Error reading dictionary page","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PageReader.java","lineNumber":153,"sourceCode":"        catch (IOException e) {\n            throw new RuntimeException(\"Could not decompress page\", e);\n        }\n    }\n\n    public DictionaryPage readDictionaryPage()\n    {\n        if (compressedDictionaryPage == null) {\n            return null;\n        }\n        try {\n            Slice slice = decryptSliceIfNeeded(compressedDictionaryPage.getSlice(), dictionaryPageAdditionalAuthenticationData);\n            return new DictionaryPage(\n                    decompress(codec, slice, compressedDictionaryPage.getUncompressedSize()),\n                    compressedDictionaryPage.getDictionarySize(),\n                    compressedDictionaryPage.getEncoding());\n        }\n        catch (IOException e) {\n            throw new RuntimeException(\"Error reading dictionary page\", e);\n        }\n    }\n\n    public long getRetainedSizeInBytes()\n    {\n        return INSTANCE_SIZE +\n                (compressedDictionaryPage == null ? 0 : compressedDictionaryPage.getRetainedSizeInBytes()) +\n                sizeOf(dataPageAdditionalAuthenticationData) +\n                sizeOf(dictionaryPageAdditionalAuthenticationData);\n    }\n\n    // additional authenticated data for AES cipher\n    private Slice decryptSliceIfNeeded(Slice slice, byte[] additionalAuthenticationData)\n            throws IOException\n    {\n        if (!blockDecryptor.isPresent()) {\n            return slice;\n        }","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PageReader.java#L135-L171","documentation":"Wraps an IOException raised while decrypting/decompressing the dictionary page in readDictionaryPage — the modular-encryption AAD or the compressed payload failed, meaning the dictionary page is corrupt or the decryption context (keys, AAD) is wrong.","triggerScenarios":"Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PageReader.java:153 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify encryption keys and footer/key metadata are correct for this file","Restore the file if corrupt (checksum the object)","Confirm writer and reader agree on Parquet modular encryption settings"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}