{"record":{"id":"cb95d1f401d2ac06","repo":"prestodb/presto","slug":"serialized-page-checksum-error-cb95d1","errorCode":"SERIALIZED_PAGE_CHECKSUM_ERROR","errorMessage":"Received corrupted serialized page from host %s","messagePattern":"Received corrupted serialized page from host (.+?)","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-spark-base/src/main/java/com/facebook/presto/spark/execution/nativeprocess/HttpNativeExecutionTaskResultFetcher.java","lineNumber":169,"sourceCode":"\n        try {\n            PageBufferClient.PagesResponse pagesResponse = getFutureValue(\n                    workerClient.getResults(taskId, token, MAX_RESPONSE_SIZE));\n            onSuccess(pagesResponse);\n        }\n        catch (Throwable t) {\n            onFailure(t);\n        }\n    }\n\n    private void onSuccess(PageBufferClient.PagesResponse pagesResponse)\n    {\n        List<SerializedPage> pages = pagesResponse.getPages();\n        long bytes = 0;\n        long positionCount = 0;\n        for (SerializedPage page : pages) {\n            if (!isChecksumValid(page)) {\n                throw new PrestoException(\n                        SERIALIZED_PAGE_CHECKSUM_ERROR,\n                        format(\"Received corrupted serialized page from host %s\",\n                                HostAddress.fromUri(workerClient.getLocation())));\n            }\n            bytes += page.getSizeInBytes();\n            positionCount += page.getPositionCount();\n        }\n        log.info(\"Received %s rows in %s pages from %s\", positionCount, pages.size(),\n                workerClient.getTaskUri(taskId));\n\n        pageBuffer.addAll(pages);\n        bufferMemoryBytes.addAndGet(bytes);\n        long nextToken = pagesResponse.getNextToken();\n        if (pages.size() > 0) {\n            workerClient.acknowledgeResultsAsync(taskId, nextToken);\n        }\n        token = nextToken;\n        if (pagesResponse.isClientComplete()) {","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-spark-base/src/main/java/com/facebook/presto/spark/execution/nativeprocess/HttpNativeExecutionTaskResultFetcher.java#L151-L187","documentation":"Each SerializedPage received from a native worker carries a checksum. In onSuccess (invoked from doGetResults when the HTTP response arrives), Presto validates each page with isChecksumValid; a mismatch means the page bytes were corrupted in transit or in memory, and SERIALIZED_PAGE_CHECKSUM_ERROR is thrown naming the host it was received from.","triggerScenarios":"doGetResults receives a pages response from the native worker's HTTP endpoint; onSuccess iterates the returned pages and one fails isChecksumValid — corrupt or truncated serialized page payload from the host returned by workerClient.getLocation().","commonSituations":"Faulty network between coordinator/driver and native worker, worker-side memory corruption or buggy native serialization build, or a misbehaving proxy/load balancer truncating HTTP bodies.","solutions":["Retry the query/task; checksum corruption on a specific host often indicates that host's native worker is unhealthy","Inspect/replace the worker at the reported host address and check its native binary version matches the coordinator","Check network path (NIC offloading, proxies, MTU) between driver and worker for corruption","File with the serialized page checksum and host info if reproducible — may be a native engine serialization bug"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    pages = fetcher.getNextPage(token, timeout);\n} catch (PrestoException e) {\n    if (e.getErrorCode().getName().equals(\"SERIALIZED_PAGE_CHECKSUM_ERROR\")) {\n        // mark host unhealthy and retry query on another worker\n    }\n}","preventionTips":["Keep native worker binaries and coordinator on matching versions","Monitor for repeated checksum errors from the same host and decommission it","Audit network path for corrupting middleboxes (proxies, offloading bugs)"],"tags":["checksum","data-corruption","network","native-execution"],"backgroundTag":"serialized-page-checksum-mismatch","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"}