You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by jo...@apache.org on 2019/12/13 04:07:31 UTC

[incubator-druid] branch 0.17.0-incubating updated: add readiness endpoints to processes having initialization delays (#8841) (#9025)

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

jonwei pushed a commit to branch 0.17.0-incubating
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/0.17.0-incubating by this push:
     new b6e6a58  add readiness endpoints to processes having initialization delays (#8841) (#9025)
b6e6a58 is described below

commit b6e6a58c51db78f5eb2794dca34966ee7c64a01d
Author: Jonathan Wei <jo...@users.noreply.github.com>
AuthorDate: Thu Dec 12 20:07:23 2019 -0800

    add readiness endpoints to processes having initialization delays (#8841) (#9025)
---
 docs/operations/api-reference.md                            |  6 +++++-
 .../java/org/apache/druid/server/http/BrokerResource.java   | 13 ++++++++++++-
 .../org/apache/druid/server/http/HistoricalResource.java    |  2 +-
 .../org/apache/druid/cli/QueryJettyServerInitializer.java   |  9 +++++++--
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/docs/operations/api-reference.md b/docs/operations/api-reference.md
index 085a571..4537b5f 100644
--- a/docs/operations/api-reference.md
+++ b/docs/operations/api-reference.md
@@ -772,7 +772,11 @@ Returns segment information lists including server locations for the given datas
 
 * `/druid/broker/v1/loadstatus`
 
-Returns a flag indicating if the Broker knows about all segments in Zookeeper. This can be used to know when a Broker process is ready to be queried after a restart.
+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.
+
+* `/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.
 
 #### Queries
 
diff --git a/server/src/main/java/org/apache/druid/server/http/BrokerResource.java b/server/src/main/java/org/apache/druid/server/http/BrokerResource.java
index ddbe19e..e50b04e 100644
--- a/server/src/main/java/org/apache/druid/server/http/BrokerResource.java
+++ b/server/src/main/java/org/apache/druid/server/http/BrokerResource.java
@@ -32,7 +32,6 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 @Path("/druid/broker/v1")
-@ResourceFilters(StateResourceFilter.class)
 public class BrokerResource
 {
   private final BrokerServerView brokerServerView;
@@ -45,9 +44,21 @@ public class BrokerResource
 
   @GET
   @Path("/loadstatus")
+  @ResourceFilters(StateResourceFilter.class)
   @Produces(MediaType.APPLICATION_JSON)
   public Response getLoadStatus()
   {
     return Response.ok(ImmutableMap.of("inventoryInitialized", brokerServerView.isInitialized())).build();
   }
+
+  @GET
+  @Path("/readiness")
+  public Response getReadiness()
+  {
+    if (brokerServerView.isInitialized()) {
+      return Response.ok().build();
+    } else {
+      return Response.status(Response.Status.SERVICE_UNAVAILABLE).build();
+    }
+  }
 }
diff --git a/server/src/main/java/org/apache/druid/server/http/HistoricalResource.java b/server/src/main/java/org/apache/druid/server/http/HistoricalResource.java
index dcaa434..c338854 100644
--- a/server/src/main/java/org/apache/druid/server/http/HistoricalResource.java
+++ b/server/src/main/java/org/apache/druid/server/http/HistoricalResource.java
@@ -32,7 +32,6 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 @Path("/druid/historical/v1")
-@ResourceFilters(StateResourceFilter.class)
 public class HistoricalResource
 {
   private final ZkCoordinator coordinator;
@@ -47,6 +46,7 @@ public class HistoricalResource
 
   @GET
   @Path("/loadstatus")
+  @ResourceFilters(StateResourceFilter.class)
   @Produces(MediaType.APPLICATION_JSON)
   public Response getLoadStatus()
   {
diff --git a/services/src/main/java/org/apache/druid/cli/QueryJettyServerInitializer.java b/services/src/main/java/org/apache/druid/cli/QueryJettyServerInitializer.java
index 9282ca3..431b3a0 100644
--- a/services/src/main/java/org/apache/druid/cli/QueryJettyServerInitializer.java
+++ b/services/src/main/java/org/apache/druid/cli/QueryJettyServerInitializer.java
@@ -22,6 +22,7 @@ package org.apache.druid.cli;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Key;
@@ -45,16 +46,20 @@ import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
 /**
+ *
  */
 public class QueryJettyServerInitializer implements JettyServerInitializer
 {
   private static final Logger log = new Logger(QueryJettyServerInitializer.class);
-  private static List<String> UNSECURED_PATHS = Collections.singletonList("/status/health");
+  private static List<String> UNSECURED_PATHS = Lists.newArrayList(
+      "/status/health",
+      "/druid/historical/v1/readiness",
+      "/druid/broker/v1/readiness"
+  );
 
   private final List<Handler> extensionHandlers;
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org