apache/seatunnel · error · RuntimeException

Response JSON has no '%s' field

Error message

Response JSON has no '%s' field

What it means

GravitinoClient.getRequiredNode walked the JSON response returned by the Gravitino REST API and could not find the named child field on the expected node — e.g. a 'catalog', 'schema', or 'metadata' field missing from an otherwise successful response. This usually means an API version/shape mismatch between the client and the Gravitino server, or the server returned an error body where the client expected a success payload. Callers such as getTableSchema, getMetaInfo, and catalogNode rely on this helper.

Source

Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/gravitino/GravitinoClient.java:220

            Thread.sleep(millis);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            log.debug("Sleep interrupted during retry backoff", e);
        }
    }

    /**
     * Get a required child node from parent node, throw exception if not found.
     *
     * @param parentNode the parent JSON node
     * @param fieldName the field name to retrieve
     * @return the child node
     * @throws RuntimeException if the field is not present
     */
    private JsonNode getRequiredNode(JsonNode parentNode, String fieldName) {
        JsonNode node = parentNode.get(fieldName);
        if (node == null) {
            throw new RuntimeException(String.format(ERROR_MISSING_FIELD_TEMPLATE, fieldName));
        }
        return node;
    }

    /** Close the HTTP client and release resources. Safe to call multiple times. */
    @Override
    public void close() {
        if (httpClient != null) {
            try {
                httpClient.close();
            } catch (IOException e) {
                // Ignore close exception as HttpClient is being shut down anyway
                log.debug("Failed to close HTTP client, ignoring", e);
            }
        }
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Enable debug logging of the raw Gravitino HTTP response to see the actual JSON body returned
  2. Check that the Gravitino server version matches the API shape this client expects (upgrade the client or server)
  3. If the response is an error payload, address the underlying Gravitino-side error (auth, missing metalake/catalog) that produced it
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/gravitino/GravitinoClient.java:220 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/f240dfc997cdc851. Report an issue: GitHub.