| commit | 081c0affd196fb5e77b6190b0bedc31babf6a619 | [log] [tgz] |
|---|---|---|
| author | Luca Milanesio <luca.milanesio@gmail.com> | Tue Dec 16 23:41:30 2025 +0000 |
| committer | Luca Milanesio <luca.milanesio@gmail.com> | Wed Dec 17 00:07:33 2025 -0800 |
| tree | afc52b026dcc827d7648634f0cb7f39fdbc0ec05 | |
| parent | cb960e61e95c69207a1038d36829e67c90202b43 [diff] |
Throw HealthCheckFailedException upon failures or timeouts Throw a proper exception whenever a health check fails or does not complete within the expected time limit. Previously, the check was returning a 500 status code with a JSON payload, which Gerrit Response API tolerated; however, since the introduction of Ib1a259f9c05, the response cannot be a 500. All APIs are expected to throw a proper exception to notify that the execution has failed. To keep the response JSON payload, the healthcheck plugin needs to register an exception hook that recognises its HealthCheckFailedException and properly format the JSON payload. Bug: Issue 469458273 Change-Id: Ic6aca61070457b79c52579284a7931bb6d2963b5
Allow having a single entry point to check the availability of the services that Gerrit exposes.
Clone or link this plugin to the plugins directory of Gerrit‘s source tree, and then run bazel build on the plugin’s directory.
Example:
git clone --recursive https://gerrit.googlesource.com/gerrit git clone https://gerrit.googlesource.com/plugins/healthcheck pushd gerrit/plugins && ln -s ../../healthcheck . && popd cd gerrit && bazel build plugins/healthcheck
The output plugin jar is created in:
bazel-genfiles/plugins/healthcheck/healthcheck.jar
Copy the healthcheck.jar into the Gerrit's /plugins directory and wait for the plugin to be automatically loaded. The healthcheck plugin is compatible with both primary Gerrit setups and Gerrit replicas. The only difference to bear in mind is that some checks will be automatically disabled on replicas (e.g. query changes) because the associated subsystem is switched off.
The healthcheck plugin exposes a single endpoint under its root URL and provides a JSON output of the Gerrit health status.
The HTTP status code returned indicates whether Gerrit is healthy (HTTP status 200) or has some issues (HTTP status 500).
The HTTP response payload is a JSON output that contains the details of the checks performed.
Each check returns a JSON payload with the following information:
ts: epoch timestamp in millis of the individual check
elapsed: elapsed time in millis to complete the check
result: result of the health check
Example of a healthy Gerrit response:
GET /config/server/healthcheck~status
200 OK
Content-Type: application/json
)]}'
{
"ts": 139402910202,
"elapsed": 100,
"querychanges": {
"ts": 139402910202,
"elapsed": 20,
"result": "passed"
},
"reviewdb": {
"ts": 139402910202,
"elapsed": 50,
"result": "passed"
},
"projectslist": {
"ts": 139402910202,
"elapsed": 100,
"result": "passed"
},
"jgit": {
"ts": 139402910202,
"elapsed": 80,
"result": "passed"
}
}
Example of a Gerrit instance with the projects list timing out:
GET /config/server/healthcheck~status
500 ERROR
Content-Type: application/json
)]}'
{
"ts": 139402910202,
"elapsed": 100,
"querychanges": {
"ts": 139402910202,
"elapsed": 20,
"result": "passed"
},
"reviewdb": {
"ts": 139402910202,
"elapsed": 50,
"result": "passed"
},
"projectslist": {
"ts": 139402910202,
"elapsed": 100,
"result": "timeout"
},
"jgit": {
"ts": 139402910202,
"elapsed": 80,
"result": "passed"
}
}
It's also possible to artificially make the healthcheck fail by placing a file at a configurable path specified like:
[healtcheck] failFileFlagPath="data/healthcheck/fail"
This will make the healthcheck endpoint return 500 even if the node is otherwise healthy. This is useful when a node needs to be removed from the pool of available Gerrit instance while it undergoes maintenance.
NOTE: If the path starts with / then even paths outside of Gerrit‘s home will be checked. If the path starts WITHOUT / then the path is relative to Gerrit’s home.
NOTE: The file needs to be a real file rather than a symlink.
As for all other endpoints in Gerrit, some metrics are automatically emitted when the /config/server/healthcheck~status endpoint is hit (thanks to the Dropwizard library).
Some additional metrics are also produced to give extra insights on their result about results and latency of healthcheck sub component, such as jgit, reviewdb, etc.
More information can be found in the metrics.md file.