prestodb/presto · error · PageTransportErrorException

%s header is not set: %s

Error message

%s header is not set: %s

What it means

HttpRpcShuffleClient response validation: an expected HTTP header (e.g. the page-size/content header on shuffle exchange responses) is missing or unset, so the client cannot trust the response and raises PageTransportErrorException.

Source

Thrown at presto-main/src/main/java/com/facebook/presto/operator/HttpRpcShuffleClient.java:175

                                break;
                            }
                            body.append(line + "\n");
                        }
                    }
                    catch (RuntimeException | IOException e) {
                        // Ignored. Just return whatever message we were able to decode
                    }
                    throw new PageTransportErrorException(
                            HostAddress.fromUri(request.getUri()),
                            format("Expected response code to be 200, but was %s:%n%s",
                                    response.getStatusCode(),
                                    body.toString()));
                }

                // invalid content type can happen when an error page is returned, but is unlikely given the above 200
                String contentType = response.getHeader(CONTENT_TYPE);
                if (contentType == null) {
                    throw new PageTransportErrorException(
                            HostAddress.fromUri(request.getUri()),
                            format("%s header is not set: %s", CONTENT_TYPE, response));
                }
                if (!mediaTypeMatches(contentType, PRESTO_PAGES_TYPE)) {
                    throw new PageTransportErrorException(
                            HostAddress.fromUri(request.getUri()),
                            format("Expected %s response from server but got %s", PRESTO_PAGES_TYPE, contentType));
                }

                String taskInstanceId = getTaskInstanceId(request, response);
                long token = getToken(request, response);
                long nextToken = getNextToken(request, response);
                boolean complete = getComplete(request, response);

                try (SliceInput input = new InputStreamSliceInput(response.getInputStream())) {
                    List<SerializedPage> pages = ImmutableList.copyOf(readSerializedPages(input));
                    return createPagesResponse(taskInstanceId, token, nextToken, pages, complete);
                }

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Check for version mismatch between coordinator and workers
  2. Inspect the worker logs for errors in the page buffer servlet
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-main/src/main/java/com/facebook/presto/operator/HttpRpcShuffleClient.java:175 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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