prestodb/presto · error · WebApplicationException

Invalid 'state' parameter. Must be one of %s

Error message

Invalid 'state' parameter. Must be one of %s

What it means

getQueryStateInfos validates the 'state' query parameter against known QueryState values; an unrecognized state string cannot be compiled to a filter and is rejected with this BadRequestException listing valid states.

Source

Thrown at presto-main/src/main/java/com/facebook/presto/server/QueryStateInfoResource.java:120

            @HeaderParam(X_FORWARDED_PROTO) String xForwardedProto,
            @Context UriInfo uriInfo,
            @Context HttpServletRequest servletRequest,
            @Suspended AsyncResponse asyncResponse)
    {
        if (resourceManagerEnabled && !includeLocalQueryOnly) {
            proxyQueryStateInfo(servletRequest, asyncResponse, xForwardedProto, uriInfo);
        }
        else {
            List<BasicQueryInfo> queryInfos = dispatchManager.getQueries();
            Optional<Pattern> userPattern = isNullOrEmpty(user) ? Optional.empty() : Optional.of(Pattern.compile(user));

            final QueryState expectedQueryState = Optional.ofNullable(stateFilter)
                    .map(filter -> {
                        try {
                            return QueryState.valueOf(filter.toUpperCase(Locale.ENGLISH));
                        }
                        catch (IllegalArgumentException e) {
                            throw new WebApplicationException(Response.status(BAD_REQUEST)
                                    .type(MediaType.TEXT_PLAIN)
                                    .entity(format("Invalid 'state' parameter. Must be one of %s", Arrays.toString(QueryState.values())))
                                    .build());
                        }
                    })
                    .orElse(null);

            List<QueryStateInfo> queryStateInfos = queryInfos.stream()
                    .filter(queryInfo -> {
                        boolean includeQuery = includeAllQueries ||
                                (expectedQueryState == null ? !queryInfo.getState().isDone() : queryInfo.getState().equals(expectedQueryState));
                        return includeQuery;
                    })
                    .filter(queryInfo -> userPattern.map(pattern -> pattern.matcher(Slices.utf8Slice(queryInfo.getSession().getUser())).matches()).orElse(true))
                    .map(queryInfo -> getQueryStateInfo(
                            queryInfo,
                            includeAllQueryProgressStats,
                            excludeResourceGroupPathInfo,

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Use one of the listed QueryState names (e.g. QUEUED, RUNNING, FINISHED) or drop the state parameter
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-main/src/main/java/com/facebook/presto/server/QueryStateInfoResource.java:120 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/172a28ffb451a2f1. Report an issue: GitHub.