prestodb/presto · error · PrestoException
SERIALIZED_PAGE_CHECKSUM_ERROR
SERIALIZED_PAGE_CHECKSUM_ERROR
Error message
Received corrupted serialized page from host %s
What it means
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.
Source
Thrown at presto-spark-base/src/main/java/com/facebook/presto/spark/execution/nativeprocess/HttpNativeExecutionTaskResultFetcher.java:169
try {
PageBufferClient.PagesResponse pagesResponse = getFutureValue(
workerClient.getResults(taskId, token, MAX_RESPONSE_SIZE));
onSuccess(pagesResponse);
}
catch (Throwable t) {
onFailure(t);
}
}
private void onSuccess(PageBufferClient.PagesResponse pagesResponse)
{
List<SerializedPage> pages = pagesResponse.getPages();
long bytes = 0;
long positionCount = 0;
for (SerializedPage page : pages) {
if (!isChecksumValid(page)) {
throw new PrestoException(
SERIALIZED_PAGE_CHECKSUM_ERROR,
format("Received corrupted serialized page from host %s",
HostAddress.fromUri(workerClient.getLocation())));
}
bytes += page.getSizeInBytes();
positionCount += page.getPositionCount();
}
log.info("Received %s rows in %s pages from %s", positionCount, pages.size(),
workerClient.getTaskUri(taskId));
pageBuffer.addAll(pages);
bufferMemoryBytes.addAndGet(bytes);
long nextToken = pagesResponse.getNextToken();
if (pages.size() > 0) {
workerClient.acknowledgeResultsAsync(taskId, nextToken);
}
token = nextToken;
if (pagesResponse.isClientComplete()) {View on GitHub (pinned to 55bb57d202)
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
Defensive patterns
Strategy: try-catch
Try / catch
try {
pages = fetcher.getNextPage(token, timeout);
} catch (PrestoException e) {
if (e.getErrorCode().getName().equals("SERIALIZED_PAGE_CHECKSUM_ERROR")) {
// mark host unhealthy and retry query on another worker
}
} Prevention
- 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)
When it happens
Trigger: 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().
Common situations: 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.
Related errors
- SERIALIZED_PAGE_CHECKSUM_ERROR
- STORAGE_ERROR
- Failed to acquire port on host
- ARROW_FLIGHT_CLIENT_ERROR
- Failed to resolve host:
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/cb95d1f401d2ac06.
Report an issue: GitHub.