This is an automated email from the ASF dual-hosted git repository.

victoria pushed a commit to branch 27.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/27.0.0 by this push:
     new b59c463d61 [Backport 27.0.0] Service status API documentation refactor 
(#14673)
b59c463d61 is described below

commit b59c463d61fcd8904097c083fb4f01d0cb2fef4a
Author: Nhi Pham <[email protected]>
AuthorDate: Fri Jul 28 14:18:04 2023 -0700

    [Backport 27.0.0] Service status API documentation refactor (#14673)
    
    Co-authored-by: Katya Macedo <[email protected]>
    Co-authored-by: Charles Smith <[email protected]>
---
 docs/api-reference/service-status-api.md | 1214 +++++++++++++++++++++++++++---
 website/.spelling                        |    3 +
 2 files changed, 1132 insertions(+), 85 deletions(-)

diff --git a/docs/api-reference/service-status-api.md 
b/docs/api-reference/service-status-api.md
index 614d216ca0..88059b1450 100644
--- a/docs/api-reference/service-status-api.md
+++ b/docs/api-reference/service-status-api.md
@@ -23,154 +23,1198 @@ sidebar_label: Service status
   ~ under the License.
   -->
 
-This document describes the API endpoints to retrieve service (process) 
status, cluster information for Apache Druid
+
+This document describes the API endpoints to retrieve service status, cluster 
information for Apache Druid.
+
+In this document, `http://SERVICE_IP:SERVICE_PORT` is a placeholder for the 
server address of deployment and the service port. For example, on the 
quickstart configuration, replace `http://ROUTER_IP:ROUTER_PORT` with 
`http://localhost:8888`.
 
 ## Common
 
-All processes support the following endpoints.
+All services support the following endpoints.
+
+You can use each endpoint with the ports for each type of service.  The 
following table contains port addresses for a local configuration:
+
+|Service|Port address|
+| ------ | ------------ |
+| Coordinator|8081|
+| Overlord|8081|
+| Router|8888|
+| Broker|8082|
+| Historical|8083|
+| MiddleManager|8091|
+
+### Get service information
+
+Retrieves the Druid version, loaded extensions, memory used, total memory, and 
other useful information about the individual service. 
+
+Modify the host and port for the endpoint to match the service to query. Refer 
to the [default service ports](#common) for the port numbers.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully retrieved service information*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status";
+```
+
+<!--HTTP-->
+
+```http
+GET /status HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+  
+  ```json
+  {
+    "version": "26.0.0",
+    "modules": [
+        {
+            "name": "org.apache.druid.common.aws.AWSModule",
+            "artifact": "druid-aws-common",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.common.gcp.GcpModule",
+            "artifact": "druid-gcp-common",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.storage.hdfs.HdfsStorageDruidModule",
+            "artifact": "druid-hdfs-storage",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.indexing.kafka.KafkaIndexTaskModule",
+            "artifact": "druid-kafka-indexing-service",
+            "version": "26.0.0"
+        },
+        {
+            "name": 
"org.apache.druid.query.aggregation.datasketches.theta.SketchModule",
+            "artifact": "druid-datasketches",
+            "version": "26.0.0"
+        },
+        {
+            "name": 
"org.apache.druid.query.aggregation.datasketches.theta.oldapi.OldApiSketchModule",
+            "artifact": "druid-datasketches",
+            "version": "26.0.0"
+        },
+        {
+            "name": 
"org.apache.druid.query.aggregation.datasketches.quantiles.DoublesSketchModule",
+            "artifact": "druid-datasketches",
+            "version": "26.0.0"
+        },
+        {
+            "name": 
"org.apache.druid.query.aggregation.datasketches.tuple.ArrayOfDoublesSketchModule",
+            "artifact": "druid-datasketches",
+            "version": "26.0.0"
+        },
+        {
+            "name": 
"org.apache.druid.query.aggregation.datasketches.hll.HllSketchModule",
+            "artifact": "druid-datasketches",
+            "version": "26.0.0"
+        },
+        {
+            "name": 
"org.apache.druid.query.aggregation.datasketches.kll.KllSketchModule",
+            "artifact": "druid-datasketches",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.msq.guice.MSQExternalDataSourceModule",
+            "artifact": "druid-multi-stage-query",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.msq.guice.MSQIndexingModule",
+            "artifact": "druid-multi-stage-query",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.msq.guice.MSQDurableStorageModule",
+            "artifact": "druid-multi-stage-query",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.msq.guice.MSQServiceClientModule",
+            "artifact": "druid-multi-stage-query",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.msq.guice.MSQSqlModule",
+            "artifact": "druid-multi-stage-query",
+            "version": "26.0.0"
+        },
+        {
+            "name": "org.apache.druid.msq.guice.SqlTaskModule",
+            "artifact": "druid-multi-stage-query",
+            "version": "26.0.0"
+        }
+    ],
+    "memory": {
+        "maxMemory": 268435456,
+        "totalMemory": 268435456,
+        "freeMemory": 139060688,
+        "usedMemory": 129374768,
+        "directMemory": 134217728
+    }
+  }
+  ```
+</details>
+
+### Get service health
+
+Retrieves the online status of the individual Druid service. It is a simple 
health check to determine if the service is running and accessible. If online, 
it will always return a boolean `true` value, indicating that the service can 
receive API calls. This endpoint is suitable for automated health checks.
+
+Modify the host and port for the endpoint to match the service to query. Refer 
to the [default service ports](#common) for the port numbers.
+
+Additional checks for readiness should use the [Historical segment 
readiness](#get-segment-readiness) and [Broker query 
readiness](#get-broker-query-readiness) endpoints. 
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status/health</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully retrieved service health*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/health";
+```
+
+<!--HTTP-->
+
+```http
+GET /status/health HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
 
-### Process information
+<details>
+  <summary>Click to show sample response</summary>
 
-`GET /status`
+  ```json
+  true
+  ```
 
-Returns the Druid version, loaded extensions, memory used, total memory, and 
other useful information about the process.
+</details>
 
-`GET /status/health`
 
-Always returns a boolean `true` value with a 200 OK response, useful for 
automated health checks.
+### Get configuration properties
 
-`GET /status/properties`
+Retrieves the current configuration properties of the individual service 
queried. 
 
-Returns the current configuration properties of the process.
+Modify the host and port for the endpoint to match the service to query. Refer 
to the [default service ports](#common) for the port numbers.
 
-`GET /status/selfDiscovered/status`
+#### URL
 
-Returns a JSON map of the form `{"selfDiscovered": true/false}`, indicating 
whether the node has received a confirmation
-from the central node discovery mechanism (currently ZooKeeper) of the Druid 
cluster that the node has been added to the
-cluster. It is recommended to not consider a Druid node "healthy" or "ready" 
in automated deployment/container
-management systems until it returns `{"selfDiscovered": true}` from this 
endpoint. This is because a node may be
-isolated from the rest of the cluster due to network issues and it doesn't 
make sense to consider nodes "healthy" in
-this case. Also, when nodes such as Brokers use ZooKeeper segment discovery 
for building their view of the Druid cluster
-(as opposed to HTTP segment discovery), they may be unusable until the 
ZooKeeper client is fully initialized and starts
-to receive data from the ZooKeeper cluster. `{"selfDiscovered": true}` is a 
proxy event indicating that the ZooKeeper
-client on the node has started to receive data from the ZooKeeper cluster and 
it's expected that all segments and other
-nodes will be discovered by this node timely from this point.
+<code class="getAPI">GET</code> <code>/status/properties</code>
 
-`GET /status/selfDiscovered`
+#### Responses
 
-Similar to `/status/selfDiscovered/status`, but returns 200 OK response with 
empty body if the node has discovered itself
-and 503 SERVICE UNAVAILABLE if the node hasn't discovered itself yet. This 
endpoint might be useful because some
-monitoring checks such as AWS load balancer health checks are not able to look 
at the response body.
+<!--DOCUSAURUS_CODE_TABS-->
 
-## Master server
+<!--200 SUCCESS-->
 
-### Coordinator
+<br/>
 
-#### Leadership
+*Successfully retrieved service configuration properties* 
 
-`GET /druid/coordinator/v1/leader`
+<!--END_DOCUSAURUS_CODE_TABS-->
 
-Returns the current leader Coordinator of the cluster.
+#### Sample request
 
-`GET /druid/coordinator/v1/isLeader`
+<!--DOCUSAURUS_CODE_TABS-->
 
-Returns a JSON object with `leader` parameter, either true or false, 
indicating if this server is the current leader
-Coordinator of the cluster. In addition, returns HTTP 200 if the server is the 
current leader and HTTP 404 if not.
-This is suitable for use as a load balancer status check if you only want the 
active leader to be considered in-service
-at the load balancer.
+<!--cURL-->
 
-<a name="coordinator-segment-loading"></a>
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/properties";
+```
+
+<!--HTTP-->
+
+```http
+GET /status/properties HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+
+  ```json
+  {
+{
+    "gopherProxySet": "false",
+    "awt.toolkit": "sun.lwawt.macosx.LWCToolkit",
+    "druid.monitoring.monitors": 
"[\"org.apache.druid.java.util.metrics.JvmMonitor\"]",
+    "java.specification.version": "11",
+    "sun.cpu.isalist": "",
+    "druid.plaintextPort": "8888",
+    "sun.jnu.encoding": "UTF-8",
+    "druid.indexing.doubleStorage": "double",
+    "druid.metadata.storage.connector.port": "1527",
+    "java.class.path": "/Users/genericUserPath",
+    "log4j.shutdownHookEnabled": "true",
+    "java.vm.vendor": "Homebrew",
+    "sun.arch.data.model": "64",
+    "druid.extensions.loadList": "[\"druid-hdfs-storage\", 
\"druid-kafka-indexing-service\", \"druid-datasketches\", 
\"druid-multi-stage-query\"]",
+    "java.vendor.url": "https://github.com/Homebrew/homebrew-core/issues";,
+    "druid.router.coordinatorServiceName": "druid/coordinator",
+    "user.timezone": "UTC",
+    "druid.global.http.eagerInitialization": "false",
+    "os.name": "Mac OS X",
+    "java.vm.specification.version": "11",
+    "sun.java.launcher": "SUN_STANDARD",
+    "user.country": "US",
+    "sun.boot.library.path": 
"/opt/homebrew/Cellar/openjdk@11/11.0.19/libexec/openjdk.jdk/Contents/Home/lib",
+    "sun.java.command": "org.apache.druid.cli.Main server router",
+    "http.nonProxyHosts": "local|*.local|169.254/16|*.169.254/16",
+    "jdk.debug": "release",
+    "druid.metadata.storage.connector.host": "localhost",
+    "sun.cpu.endian": "little",
+    "druid.zk.paths.base": "/druid",
+    "user.home": "/Users/genericUser",
+    "user.language": "en",
+    "java.specification.vendor": "Oracle Corporation",
+    "java.version.date": "2023-04-18",
+    "java.home": 
"/opt/homebrew/Cellar/openjdk@11/11.0.19/libexec/openjdk.jdk/Contents/Home",
+    "druid.service": "druid/router",
+    "druid.selectors.coordinator.serviceName": "druid/coordinator",
+    "druid.metadata.storage.connector.connectURI": 
"jdbc:derby://localhost:1527/var/druid/metadata.db;create=true",
+    "file.separator": "/",
+    "druid.selectors.indexing.serviceName": "druid/overlord",
+    "java.vm.compressedOopsMode": "Zero based",
+    "druid.metadata.storage.type": "derby",
+    "line.separator": "\n",
+    "druid.log.path": "/Users/genericUserPath",
+    "java.vm.specification.vendor": "Oracle Corporation",
+    "java.specification.name": "Java Platform API Specification",
+    "druid.indexer.logs.directory": "var/druid/indexing-logs",
+    "java.awt.graphicsenv": "sun.awt.CGraphicsEnvironment",
+    "druid.router.defaultBrokerServiceName": "druid/broker",
+    "druid.storage.storageDirectory": "var/druid/segments",
+    "sun.management.compiler": "HotSpot 64-Bit Tiered Compilers",
+    "ftp.nonProxyHosts": "local|*.local|169.254/16|*.169.254/16",
+    "java.runtime.version": "11.0.19+0",
+    "user.name": "genericUser",
+    "druid.indexer.logs.type": "file",
+    "druid.host": "localhost",
+    "log4j2.is.webapp": "false",
+    "path.separator": ":",
+    "os.version": "12.6.5",
+    "druid.lookup.enableLookupSyncOnStartup": "false",
+    "java.runtime.name": "OpenJDK Runtime Environment",
+    "druid.zk.service.host": "localhost",
+    "file.encoding": "UTF-8",
+    "druid.sql.planner.useGroupingSetForExactDistinct": "true",
+    "druid.router.managementProxy.enabled": "true",
+    "java.vm.name": "OpenJDK 64-Bit Server VM",
+    "java.vendor.version": "Homebrew",
+    "druid.startup.logging.logProperties": "true",
+    "java.vendor.url.bug": "https://github.com/Homebrew/homebrew-core/issues";,
+    "log4j.shutdownCallbackRegistry": 
"org.apache.druid.common.config.Log4jShutdown",
+    "java.io.tmpdir": "var/tmp",
+    "druid.sql.enable": "true",
+    "druid.emitter.logging.logLevel": "info",
+    "java.version": "11.0.19",
+    "user.dir": "/Users/genericUser/Downloads/apache-druid-26.0.0",
+    "os.arch": "aarch64",
+    "java.vm.specification.name": "Java Virtual Machine Specification",
+    "druid.node.type": "router",
+    "java.awt.printerjob": "sun.lwawt.macosx.CPrinterJob",
+    "sun.os.patch.level": "unknown",
+    "java.util.logging.manager": "org.apache.logging.log4j.jul.LogManager",
+    "java.library.path": "/Users/genericUserPath",
+    "java.vendor": "Homebrew",
+    "java.vm.info": "mixed mode",
+    "java.vm.version": "11.0.19+0",
+    "druid.emitter": "noop",
+    "sun.io.unicode.encoding": "UnicodeBig",
+    "druid.storage.type": "local",
+    "druid.expressions.useStrictBooleans": "true",
+    "java.class.version": "55.0",
+    "socksNonProxyHosts": "local|*.local|169.254/16|*.169.254/16",
+    "druid.server.hiddenProperties": 
"[\"druid.s3.accessKey\",\"druid.s3.secretKey\",\"druid.metadata.storage.connector.password\",
 \"password\", \"key\", \"token\", \"pwd\"]"
+}
+```
+
+</details>
+
+
+### Get node discovery status and cluster integration confirmation
+
+Retrieves a JSON map of the form `{"selfDiscovered": true/false}`, indicating 
whether the node has received a confirmation from the central node discovery 
mechanism (currently ZooKeeper) of the Druid cluster that the node has been 
added to the cluster. 
+
+Only consider a Druid node "healthy" or "ready" in automated 
deployment/container management systems when this endpoint returns 
`{"selfDiscovered": true}`. Nodes experiencing network issues may become 
isolated and are not healthy.
+For nodes that use Zookeeper segment discovery, a response of 
`{"selfDiscovered": true}` indicates that the node's Zookeeper client has 
started receiving data from the Zookeeper cluster, enabling timely discovery of 
segments and other nodes.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status/selfDiscovered/status</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Node was successfully added to the cluster*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
 
-### Overlord
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/selfDiscovered/status";
+```
+
+<!--HTTP-->
+
+```http
+GET /status/selfDiscovered/status HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+
+  ```json
+  {
+    "selfDiscovered": true
+  }
+  ```
+
+</details>
+
+
+### Get node self-discovery status
+
+Returns an HTTP status code to indicate node discovery within the Druid 
cluster. This endpoint is similar to the `status/selfDiscovered/status` 
endpoint, but relies on HTTP status codes alone.
+Use this endpoint for monitoring checks that are unable to examine the 
response body. For example, AWS load balancer health checks.
+
+#### URL
 
-#### Leadership
+<code class="getAPI">GET</code> <code>/status/selfDiscovered</code>
 
-`GET /druid/indexer/v1/leader`
+#### Responses
 
-Returns the current leader Overlord of the cluster. If you have multiple 
Overlords, just one is leading at any given time. The others are on standby.
+<!--DOCUSAURUS_CODE_TABS-->
 
-`GET /druid/indexer/v1/isLeader`
+<!--200 SUCCESS-->
 
-This returns a JSON object with field `leader`, either true or false. In 
addition, this call returns HTTP 200 if the
-server is the current leader and HTTP 404 if not. This is suitable for use as 
a load balancer status check if you
-only want the active leader to be considered in-service at the load balancer.
+<br/>
 
-## Data server
+*Successfully retrieved node status*  
 
-### MiddleManager
+<!--503 SERVICE UNAVAILABLE-->
 
-`GET /druid/worker/v1/enabled`
+<br/>
 
-Check whether a MiddleManager is in an enabled or disabled state. Returns JSON 
object keyed by the combined `druid.host`
-and `druid.port` with the boolean state as the value.
+*Unsuccessful node self-discovery*  
 
-```json
-{"localhost:8091":true}
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/selfDiscovered";
+```
+
+<!--HTTP-->
+
+```http
+GET /status/selfDiscovered HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
 ```
 
-`GET /druid/worker/v1/tasks`
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+A successful response to this endpoint results in an empty response body.
+
+## Coordinator
+
+### Get Coordinator leader address
+
+Retrieves the address of the current leader Coordinator of the cluster. If any 
request is sent to a non-leader Coordinator, the request is automatically 
redirected to the leader Coordinator. 
 
-Retrieve a list of active tasks being run on MiddleManager. Returns JSON list 
of taskid strings. Normal usage should
-prefer to use the `/druid/indexer/v1/tasks` [Tasks API](./tasks-api.md) or one 
of it's task state specific variants instead.
+#### URL
 
-```json
-["index_wikiticker_2019-02-11T02:20:15.316Z"]
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/leader</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully retrieved leader Coordinator address* 
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/leader";
 ```
 
-`GET /druid/worker/v1/task/{taskid}/log`
+<!--HTTP-->
+
+```http
+GET /druid/coordinator/v1/leader HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+
+  ```json
+  http://localhost:8081
+  ```
+
+</details>
+
+### Get Coordinator leader status
+
+Retrieves a JSON object with a `leader` key. Returns `true` if this server is 
the current leader Coordinator of the cluster. To get the individual address of 
the leader Coordinator node, see the [leader 
endpoint](#get-coordinator-leader-address).
+
+Use this endpoint as a load balancer status check when you only want the 
active leader to be considered in-service at the load balancer.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/isLeader</code>
+
+#### Responses
 
-Retrieve task log output stream by task id. Normal usage should prefer to use 
the `/druid/indexer/v1/task/{taskId}/log`
-[Tasks API](./tasks-api.md) instead.
+<!--DOCUSAURUS_CODE_TABS-->
 
-`POST /druid/worker/v1/disable`
+<!--200 SUCCESS-->
 
-Disable a MiddleManager, causing it to stop accepting new tasks but complete 
all existing tasks. Returns JSON  object
-keyed by the combined `druid.host` and `druid.port`:
+<br/>
 
-```json
-{"localhost:8091":"disabled"}
+*Current server is the leader*  
+
+<!--404 NOT FOUND->
+
+<br/>
+
+*Current server is not the leader*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://COORDINATOR_IP:COORDINATOR_PORT/druid/coordinator/v1/isLeader";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/coordinator/v1/isLeader HTTP/1.1
+Host: http://COORDINATOR_IP:COORDINATOR_PORT
 ```
 
-`POST /druid/worker/v1/enable`
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+
+  ```json
+  {
+    "leader": true
+  }
+  ```
+
+</details>
+
+## Overlord
+
+### Get Overlord leader address
+
+Retrieves the address of the current leader Overlord of the cluster. In a 
cluster of multiple Overlords, only one Overlord assumes the leading role, 
while the remaining Overlords remain on standby.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/leader</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
 
-Enable a MiddleManager, allowing it to accept new tasks again if it was 
previously disabled. Returns JSON  object
-keyed by the combined `druid.host` and `druid.port`:
+<br/>
 
-```json
-{"localhost:8091":"enabled"}
+*Successfully retrieved leader Overlord address*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/leader";
 ```
 
-`POST /druid/worker/v1/task/{taskid}/shutdown`
+<!--HTTP-->
+
+```http
+GET /druid/indexer/v1/leader HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+
+  ```json
+  http://localhost:8081
+  ```
+
+</details>
+
+
+### Get Overlord leader status
+
+Retrieves a JSON object with a `leader` property. The value can be `true` or 
`false`, indicating if this server is the current leader Overlord of the 
cluster. To get the individual address of the leader Overlord node, see the 
[leader endpoint](#get-overlord-leader-address).
+
+Use this endpoint as a load balancer status check when you only want the 
active leader to be considered in-service at the load balancer.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/isLeader</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Current server is the leader*  
 
-Shutdown a running task by `taskid`. Normal usage should prefer to use the 
`/druid/indexer/v1/task/{taskId}/shutdown`
-[Tasks API](./tasks-api.md) instead. Returns JSON:
+<!--404 NOT FOUND-->
 
-```json
-{"task":"index_kafka_wikiticker_f7011f8ffba384b_fpeclode"}
+<br/>
+
+*Current server is not the leader*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://OVERLORD_IP:OVERLORD_PORT/druid/indexer/v1/isLeader";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/indexer/v1/isLeader HTTP/1.1
+Host: http://OVERLORD_IP:OVERLORD_PORT
 ```
 
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+
+  ```json
+  {
+    "leader": true
+  }
+  ```
+
+</details>
+
+
+## MiddleManager
+
+### Get MiddleManager state status
+
+Retrieves the enabled state of the MiddleManager. Returns JSON object keyed by 
the combined `druid.host` and `druid.port` with a boolean `true` or `false` 
state as the value.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/worker/v1/enabled</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully retrieved MiddleManager state*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/enabled";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/worker/v1/enabled HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+  
+  ```json
+  {
+    "localhost:8091": true
+  }
+  ```
+
+</details>
+
+### Get active tasks 
+
+Retrieves a list of active tasks being run on MiddleManager. Returns JSON list 
of task ID strings. Note that for normal usage, you should use the 
`/druid/indexer/v1/tasks` [Tasks API](./tasks-api.md) endpoint or one of the 
task state specific variants instead.
+
+#### URL 
+
+<code class="getAPI">GET</code> <code>/druid/worker/v1/tasks</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully retrieved active tasks*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/tasks";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/worker/v1/tasks HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+  
+  ```json
+  [
+    "index_parallel_wikipedia_mgchefio_2023-06-13T22:18:05.360Z"
+  ]
+  ```
+
+</details>
+
+### Get task log
+
+Retrieves task log output stream by task ID. For normal usage, you should use 
the `/druid/indexer/v1/task/{taskId}/log`
+[Tasks API](./tasks-api.md) endpoint instead.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/worker/v1/task/:taskId/log</code>
+
+### Shut down running task
+
+Shuts down a running task by ID. For normal usage, you should use the 
`/druid/indexer/v1/task/:taskId/shutdown`
+[Tasks API](./tasks-api.md) endpoint instead.
+
+#### URL
+
+<code class="postAPI">POST</code> 
<code>/druid/worker/v1/task/:taskId/shutdown</code>
+
+#### Responses
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully shut down a task*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+---
+
+#### Sample request
+
+The following example shuts down a task with specified ID 
`index_kafka_wikiticker_f7011f8ffba384b_fpeclode`.
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl 
"http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/task/index_kafka_wikiticker_f7011f8ffba384b_fpeclode/shutdown";
+```
+
+<!--HTTP-->
+
+```http
+POST 
/druid/worker/v1/task/index_kafka_wikiticker_f7011f8ffba384b_fpeclode/shutdown 
HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+  
+  ```json
+  {
+    "task":"index_kafka_wikiticker_f7011f8ffba384b_fpeclode"
+  }
+  ```
+
+</details>
+
+### Disable MiddleManager
+
+Disables a MiddleManager, causing it to stop accepting new tasks but complete 
all existing tasks. Returns a JSON  object
+keyed by the combined `druid.host` and `druid.port`.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/worker/v1/disable</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully disabled MiddleManager*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/disable";
+```
+
+<!--HTTP-->
+
+```http
+POST /druid/worker/v1/disable HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+  
+  ```json
+  {
+    "localhost:8091":"disabled"
+  }
+  ```
+
+</details>
+
+### Enable MiddleManager
+
+Enables a MiddleManager, allowing it to accept new tasks again if it was 
previously disabled. Returns a JSON  object
+keyed by the combined `druid.host` and `druid.port`.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/worker/v1/enable</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully enabled MiddleManager*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/enable";
+```
+
+<!--HTTP-->
+
+```http
+POST /druid/worker/v1/enable HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+  
+  ```json
+  {
+    "localhost:8091":"enabled"
+  }
+  ```
+
+</details>
 
 ## Historical  
-### Segment loading
 
-`GET /druid/historical/v1/loadstatus`
+### Get segment load status
+
+Retrieves a JSON object of the form `{"cacheInitialized":value}`, where value 
is either `true` or `false` indicating if all segments in the local cache have 
been loaded. 
+
+Use this endpoint to know when a Broker service is ready to accept queries 
after a restart.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/historical/v1/loadstatus</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Successfully retrieved status*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
 
-Returns JSON of the form `{"cacheInitialized":<value>}`, where value is either 
`true` or `false` indicating if all
-segments in the local cache have been loaded. This can be used to know when a 
Historical process is ready
-to be queried after a restart.
+```shell
+curl "http://HISTORICAL_IP:HISTORICAL_PORT/druid/historical/v1/loadstatus";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/historical/v1/loadstatus HTTP/1.1
+Host: http://HISTORICAL_IP:HISTORICAL_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+  
+  ```json
+  {
+    "cacheInitialized": true
+  }
+  ```
+
+</details>
+
+### Get segment readiness
+
+Retrieves a status code to indicate if all segments in the local cache have 
been loaded. Similar to `/druid/historical/v1/loadstatus`, but instead of 
returning JSON with a flag, it returns status codes.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/historical/v1/readiness</code>
+
+#### Responses
 
-`GET /druid/historical/v1/readiness`
+<!--DOCUSAURUS_CODE_TABS-->
 
-Similar to `/druid/historical/v1/loadstatus`, but instead of returning JSON 
with a flag, responses 200 OK if segments
-in the local cache have been loaded, and 503 SERVICE UNAVAILABLE, if they 
haven't.
+<!--200 SUCCESS-->
 
+<br/>
+
+*Segments in local cache successfully loaded*  
+
+<!--503 SERVICE UNAVAILABLE-->
+
+<br/>
+
+*Segments in local cache have not been loaded*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://HISTORICAL_IP:HISTORICAL_PORT/druid/historical/v1/readiness";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/historical/v1/readiness HTTP/1.1
+Host: http://HISTORICAL_IP:HISTORICAL_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+A successful response to this endpoint results in an empty response body.
 
 ## Load Status
 
-`GET /druid/broker/v1/loadstatus`
+### Get Broker query load status
+
+Retrieves a flag indicating if the Broker knows about all segments in the 
cluster. Use this endpoint to know when a Broker service is ready to accept 
queries after a restart.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/broker/v1/loadstatus</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Segments successfully loaded*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://BROKER_IP:BROKER_PORT/druid/broker/v1/loadstatus";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/broker/v1/loadstatus HTTP/1.1
+Host: http://<BROKER_IP>:<BROKER_PORT>
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
+
+<details>
+  <summary>Click to show sample response</summary>
+
+  ```json
+  {
+    "inventoryInitialized": true
+  }
+  ```
+
+</details>
+
+### Get Broker query readiness
+
+Retrieves a status code to indicate Broker readiness. Readiness signifies the 
Broker knows about all segments in the cluster and is ready to accept queries 
after a restart. Similar to `/druid/broker/v1/loadstatus`, but instead of 
returning a JSON, it returns status codes.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/broker/v1/readiness</code>
+
+#### Responses
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--200 SUCCESS-->
+
+<br/>
+
+*Segments successfully loaded*  
+
+<!--503 SERVICE UNAVAILABLE-->
+
+<br/>
+
+*Segments have not been loaded*  
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample request
+
+<!--DOCUSAURUS_CODE_TABS-->
+
+<!--cURL-->
+
+```shell
+curl "http://BROKER_IP:BROKER_PORT/druid/broker/v1/readiness";
+```
+
+<!--HTTP-->
+
+```http
+GET /druid/broker/v1/readiness HTTP/1.1
+Host: http://BROKER_IP:BROKER_PORT
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+#### Sample response
 
-Returns a flag indicating if the Broker knows about all segments in the 
cluster. This can be used to know when a Broker process is ready to be queried 
after a restart.
+A successful response to this endpoint results in an empty response body.
 
-`GET /druid/broker/v1/readiness`
 
-Similar to `/druid/broker/v1/loadstatus`, but instead of returning a JSON, 
responses 200 OK if its ready and otherwise 503 SERVICE UNAVAILABLE.
diff --git a/website/.spelling b/website/.spelling
index 63573f94a8..ad7e2f4ac8 100644
--- a/website/.spelling
+++ b/website/.spelling
@@ -2276,3 +2276,6 @@ prometheus-emitter
 kubernetes-overlord-extensions
 UCS
 ISO646-US
+selfDiscovered
+isLeader
+loadstatus
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to