{"record":{"id":"f240dfc997cdc851","repo":"apache/seatunnel","slug":"response-json-has-no-s-field","errorCode":null,"errorMessage":"Response JSON has no '%s' field","messagePattern":"Response JSON has no '(.+?)' field","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/gravitino/GravitinoClient.java","lineNumber":220,"sourceCode":"            Thread.sleep(millis);\n        } catch (InterruptedException e) {\n            Thread.currentThread().interrupt();\n            log.debug(\"Sleep interrupted during retry backoff\", e);\n        }\n    }\n\n    /**\n     * Get a required child node from parent node, throw exception if not found.\n     *\n     * @param parentNode the parent JSON node\n     * @param fieldName the field name to retrieve\n     * @return the child node\n     * @throws RuntimeException if the field is not present\n     */\n    private JsonNode getRequiredNode(JsonNode parentNode, String fieldName) {\n        JsonNode node = parentNode.get(fieldName);\n        if (node == null) {\n            throw new RuntimeException(String.format(ERROR_MISSING_FIELD_TEMPLATE, fieldName));\n        }\n        return node;\n    }\n\n    /** Close the HTTP client and release resources. Safe to call multiple times. */\n    @Override\n    public void close() {\n        if (httpClient != null) {\n            try {\n                httpClient.close();\n            } catch (IOException e) {\n                // Ignore close exception as HttpClient is being shut down anyway\n                log.debug(\"Failed to close HTTP client, ignoring\", e);\n            }\n        }\n    }\n}\n","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/gravitino/GravitinoClient.java#L202-L238","documentation":"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.","triggerScenarios":"Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/gravitino/GravitinoClient.java:220 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Enable debug logging of the raw Gravitino HTTP response to see the actual JSON body returned","Check that the Gravitino server version matches the API shape this client expects (upgrade the client or server)","If the response is an error payload, address the underlying Gravitino-side error (auth, missing metalake/catalog) that produced it"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}