This is an automated email from the ASF dual-hosted git repository.
mchades pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new aad5763c13 [#10856] docs: Add health check endpoint documentation
(#11261)
aad5763c13 is described below
commit aad5763c137cd6c188ad43a20b3f178b48559b82
Author: Jerry Shao <[email protected]>
AuthorDate: Thu May 28 11:17:58 2026 +0800
[#10856] docs: Add health check endpoint documentation (#11261)
### What changes were proposed in this pull request?
Add user-facing documentation for the health check REST endpoints
introduced in #10840, #10847, and #11102.
- **`docs/gravitino-server-config.md`**: New `### Health check
endpoints` section (after Metrics configuration) covering `GET
/api/health/live`, `GET /api/health/ready`, `GET /api/health`, the
root-level GTM aliases (`/health`, `/health/live`, `/health/ready`,
`/health.html`), the
`gravitino.server.health.entityStore.probeTimeoutMs` configuration
property, and UP/DOWN JSON response examples.
- **`docs/iceberg-rest-service.md`**: New `### Health check endpoints`
section (after Misc configurations) covering `GET /iceberg/health/live`,
`GET /iceberg/health/ready`, `GET /iceberg/health`, the same root-level
GTM aliases forwarding to `/iceberg/health*`, and UP/DOWN JSON response
examples.
### Why are the changes needed?
The health endpoints were implemented but lacked user-facing
documentation, making it difficult for operators deploying Gravitino in
containerized or enterprise environments to discover and configure the
probe endpoints.
Fix: #10856
### Does this PR introduce _any_ user-facing change?
No code changes. Documentation only.
### How was this patch tested?
Documentation change only; no test required.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
---
docs/gravitino-server-config.md | 75 ++++++++++++++++++++++++++++++++++++-----
docs/iceberg-rest-service.md | 49 +++++++++++++++++++++++++++
2 files changed, 115 insertions(+), 9 deletions(-)
diff --git a/docs/gravitino-server-config.md b/docs/gravitino-server-config.md
index 1a2ac29f60..2aec2d9183 100644
--- a/docs/gravitino-server-config.md
+++ b/docs/gravitino-server-config.md
@@ -248,11 +248,11 @@ The audit log framework defines how audit logs are
formatted and written to vari
Gravitino provides a default implementation to log basic audit information to
a file. You can extend the audit system by implementing the corresponding
interfaces.
-| Property name | Description
| Default value | Required | Since Version
|
-|---------------------------------------|----------------------------------------|------------------------------------------------|----------|------------------|
-| `gravitino.audit.enabled` | The audit log enable flag.
| false | NO |
0.7.0-incubating |
-| `gravitino.audit.writer.className` | The class name of audit log writer.
| org.apache.gravitino.audit.FileAuditWriter | NO |
0.7.0-incubating |
-| `gravitino.audit.formatter.className` | The class name of audit log
formatter. | org.apache.gravitino.audit.v2.SimpleFormatterV2 | NO |
0.7.0-incubating |
+| Property name | Description
| Default value | Required | Since Version
|
+|---------------------------------------|----------------------------------------|-------------------------------------------------|----------|-------------------|
+| `gravitino.audit.enabled` | The audit log enable flag.
| false | NO |
0.7.0-incubating |
+| `gravitino.audit.writer.className` | The class name of audit log writer.
| org.apache.gravitino.audit.FileAuditWriter | NO |
0.7.0-incubating |
+| `gravitino.audit.formatter.className` | The class name of audit log
formatter. | org.apache.gravitino.audit.v2.SimpleFormatterV2 | NO |
0.7.0-incubating |
#### Audit log formatter
@@ -269,10 +269,10 @@ The `AuditLogWriter` interface enables writing audit logs
to different storage m
The following `gravitino.audit.writer.file.*` properties were accepted in
earlier versions but are now **deprecated** and have no effect.
`FileAuditWriter` emits a `WARN` log at startup if any of them are present.
Configure the equivalent behavior directly in `conf/log4j2.properties` instead.
| Deprecated property | Migration: configure in
`conf/log4j2.properties` |
-|-------------------------------------------------|--------------------------------------------------------------------|
-| `gravitino.audit.writer.file.fileName` |
`appender.audit_file.fileName` |
-| `gravitino.audit.writer.file.append` |
`appender.audit_file.append` |
-| `gravitino.audit.writer.file.flushIntervalSecs` | Use `immediateFlush` on
the appender or an async appender wrapper |
+|-------------------------------------------------|-------------------------------------------------------------------|
+| `gravitino.audit.writer.file.fileName` |
`appender.audit_file.fileName` |
+| `gravitino.audit.writer.file.append` |
`appender.audit_file.append` |
+| `gravitino.audit.writer.file.flushIntervalSecs` | Use `immediateFlush` on
the appender or an async appender wrapper |
Example — change the audit log path:
@@ -298,6 +298,63 @@ Refer to [security](security/security.md) for HTTPS and
authentication configura
|-------------------------------------------|------------------------------------------------------|---------------|----------|---------------|
| `gravitino.metrics.timeSlidingWindowSecs` | The seconds of Gravitino metrics
time sliding window | 60 | No | 0.5.1 |
+### Health check endpoints
+
+Gravitino exposes three health check endpoints following [MicroProfile
Health](https://microprofile.io/project/eclipse/microprofile-health) semantics.
All endpoints are exempt from authentication so that Kubernetes probes, load
balancers, and global traffic managers can reach them without credentials.
+
+| Endpoint | Description
| HTTP status |
+|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|
+| `GET /api/health/live` | Liveness probe. Returns 200 as long as the HTTP
server thread can respond. Use this to determine whether to restart a pod.
| 200 |
+| `GET /api/health/ready` | Readiness probe. Returns 200 when the entity store
is reachable within the configured timeout; 503 when the entity store is
unavailable or slow. Use this to control traffic routing. | 200 / 503 |
+| `GET /api/health` | Aggregate check. Returns 200 when both liveness
and readiness pass; 503 when any check fails.
| 200 / 503 |
+
+Root-level aliases are also available for global traffic managers that require
probes at well-known root paths:
+
+| Alias | Forwards to |
+|---------------------|-------------------------|
+| `GET /health` | `GET /api/health` |
+| `GET /health/live` | `GET /api/health/live` |
+| `GET /health/ready` | `GET /api/health/ready` |
+| `GET /health.html` | `GET /api/health` |
+
+**Configuration:**
+
+| Property name | Description
| Default
value | Required | Since version |
+|------------------------------------------------------|-------------------------------------------------------------------------------------------|---------------|----------|---------------|
+| `gravitino.server.health.entityStore.probeTimeoutMs` | Timeout in
milliseconds for the entity-store readiness probe used by `/api/health/ready`.
| `2000` | No | 1.3.0 |
+
+**Response format:**
+
+All endpoints return a JSON body with the same shape. The `code` field is
always `0`. `status` is `UP` or `DOWN`. `checks` lists per-component results;
liveness reports `httpServer` and readiness reports `entityStore`.
+
+Healthy response (HTTP 200):
+
+```json
+{
+ "code": 0,
+ "status": "UP",
+ "checks": [
+ { "name": "httpServer", "status": "UP", "details": {} },
+ { "name": "entityStore", "status": "UP", "details": {} }
+ ]
+}
+```
+
+Unhealthy response (HTTP 503):
+
+```json
+{
+ "code": 0,
+ "status": "DOWN",
+ "checks": [
+ { "name": "httpServer", "status": "UP", "details": {} },
+ { "name": "entityStore", "status": "DOWN", "details": { "reason":
"timeout" } }
+ ]
+}
+```
+
+Possible `reason` values in the `entityStore` DOWN check: `timeout`,
`interrupted`, `probe-rejected`, or the class name of an unexpected exception.
+
### Memory settings
`GRAVITINO_MEM` sets JVM heap/metaspace flags for the Gravitino server and is
also read by the Iceberg REST server and Lance REST server launchers.
diff --git a/docs/iceberg-rest-service.md b/docs/iceberg-rest-service.md
index 03289cbee8..d623fba839 100644
--- a/docs/iceberg-rest-service.md
+++ b/docs/iceberg-rest-service.md
@@ -592,6 +592,55 @@ Gravitino provides the built-in
`org.apache.gravitino.iceberg.service.cache.Loca
|---------------------------------------------|--------------------------------------------------------------|---------------|----------|------------------|
| `gravitino.iceberg-rest.extension-packages` | Comma-separated list of
Iceberg REST API packages to expand. | (none) | No |
0.7.0-incubating |
+### Health check endpoints
+
+The Iceberg REST server exposes three health check endpoints following the
same [MicroProfile
Health](https://microprofile.io/project/eclipse/microprofile-health) semantics
as the main Gravitino server. All endpoints are exempt from authentication. The
readiness probe checks whether the `IcebergCatalogWrapperManager` has been
initialized — it performs no I/O and has no configurable timeout.
+
+| Endpoint | Description
|
HTTP status |
+|------------------------------|----------------------------------------------------------------------------------------------------------------------------|-------------|
+| `GET /iceberg/health/live` | Liveness probe. Returns 200 as long as the
HTTP server thread can respond.
| 200 |
+| `GET /iceberg/health/ready` | Readiness probe. Returns 200 when the catalog
wrapper manager is initialized; 503 when initialization is not yet complete. |
200 / 503 |
+| `GET /iceberg/health` | Aggregate check. Returns 200 when both
liveness and readiness pass; 503 when any check fails.
| 200 / 503 |
+
+Root-level aliases are also available for global traffic managers that require
probes at well-known root paths:
+
+| Alias | Forwards to |
+|---------------------|-----------------------------|
+| `GET /health` | `GET /iceberg/health` |
+| `GET /health/live` | `GET /iceberg/health/live` |
+| `GET /health/ready` | `GET /iceberg/health/ready` |
+| `GET /health.html` | `GET /iceberg/health` |
+
+**Response format:**
+
+All endpoints return a JSON body with the same shape as the main Gravitino
server. The `code` field is always `0`. `status` is `UP` or `DOWN`. Liveness
reports `httpServer` and readiness reports `catalogWrapperManager`.
+
+Healthy response (HTTP 200):
+
+```json
+{
+ "code": 0,
+ "status": "UP",
+ "checks": [
+ { "name": "httpServer", "status": "UP", "details": {} },
+ { "name": "catalogWrapperManager", "status": "UP", "details": {} }
+ ]
+}
+```
+
+Unhealthy response (HTTP 503):
+
+```json
+{
+ "code": 0,
+ "status": "DOWN",
+ "checks": [
+ { "name": "httpServer", "status": "UP", "details": {} },
+ { "name": "catalogWrapperManager", "status": "DOWN", "details": {
"reason": "catalog wrapper manager not initialized" } }
+ ]
+}
+```
+
### Memory settings
The Iceberg REST server uses `GRAVITINO_MEM` for JVM heap/metaspace flags.
Default: `-Xms1024m -Xmx1024m -XX:MaxMetaspaceSize=512m`. Launch scripts append
`GRAVITINO_MEM` to `JAVA_OPTS`; set it to adjust heap/metaspace sizes.