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

  1. Retry the query/task; checksum corruption on a specific host often indicates that host's native worker is unhealthy
  2. Inspect/replace the worker at the reported host address and check its native binary version matches the coordinator
  3. Check network path (NIC offloading, proxies, MTU) between driver and worker for corruption
  4. 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

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


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/cb95d1f401d2ac06. Report an issue: GitHub.