This is an automated email from the ASF dual-hosted git repository. xiangfu pushed a commit to branch pinotSM_flag_for_health_check in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit 01419655e077675768a9e641258a8313be767b13 Author: Xiang Fu <fx19880...@gmail.com> AuthorDate: Mon Oct 12 12:51:04 2020 -0700 Adding a flag in PinotServiceManager to allow health check includes all components health check --- .../tools/admin/command/StartServiceManagerCommand.java | 12 +++++++++++- .../apache/pinot/tools/service/PinotServiceManager.java | 16 +++++++++++----- .../api/resources/PinotServiceManagerHealthCheck.java | 15 +++++++++++++++ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/StartServiceManagerCommand.java b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/StartServiceManagerCommand.java index caa1ca0..a470efd 100644 --- a/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/StartServiceManagerCommand.java +++ b/pinot-tools/src/main/java/org/apache/pinot/tools/admin/command/StartServiceManagerCommand.java @@ -69,6 +69,8 @@ public class StartServiceManagerCommand extends AbstractBaseAdminCommand impleme private String _clusterName = DEFAULT_CLUSTER_NAME; @Option(name = "-port", required = true, metaVar = "<int>", usage = "Pinot service manager admin port, -1 means disable, 0 means a random available port.") private int _port; + @Option(name = "-healthCheckAllComponents", metaVar = "<boolean>", usage = "Pinot service manager health check returns the all components health check. The health check returns OK when all the components are returning OK.") + private boolean _healthCheckAllComponents; @Option(name = "-bootstrapConfigPaths", handler = StringArrayOptionHandler.class, required = false, usage = "A list of Pinot service config file paths. Each config file requires an extra config: 'pinot.service.role' to indicate which service to start.", forbids = {"-bootstrapServices"}) private String[] _bootstrapConfigPaths; @Option(name = "-bootstrapServices", handler = StringArrayOptionHandler.class, required = false, usage = "A list of Pinot service roles to start with default config. E.g. CONTROLLER/BROKER/SERVER", forbids = {"-bootstrapConfigPaths"}) @@ -195,7 +197,7 @@ public class StartServiceManagerCommand extends AbstractBaseAdminCommand impleme } private String startServiceManager() { - _pinotServiceManager = new PinotServiceManager(_zkAddress, _clusterName, _port); + _pinotServiceManager = new PinotServiceManager(_zkAddress, _clusterName, _port, _healthCheckAllComponents); _pinotServiceManager.start(); return _pinotServiceManager.getInstanceId(); } @@ -303,4 +305,12 @@ public class StartServiceManagerCommand extends AbstractBaseAdminCommand impleme _bootstrapConfigurations.add(new SimpleImmutableEntry<>(role, config)); return this; } + + public boolean isHealthCheckAllComponents() { + return _healthCheckAllComponents; + } + + public void setHealthCheckAllComponents(boolean healthCheckAllComponents) { + _healthCheckAllComponents = healthCheckAllComponents; + } } diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/service/PinotServiceManager.java b/pinot-tools/src/main/java/org/apache/pinot/tools/service/PinotServiceManager.java index 63fa3ea..ed8305f 100644 --- a/pinot-tools/src/main/java/org/apache/pinot/tools/service/PinotServiceManager.java +++ b/pinot-tools/src/main/java/org/apache/pinot/tools/service/PinotServiceManager.java @@ -54,18 +54,19 @@ public class PinotServiceManager { private final String _clusterName; private final int _port; private final String _instanceId; + private final boolean _healthCheckAllComponents; private PinotServiceManagerAdminApiApplication _pinotServiceManagerAdminApplication; private boolean _isStarted = false; public PinotServiceManager(String zkAddress, String clusterName) { - this(zkAddress, clusterName, 0); + this(zkAddress, clusterName, 0, false); } - public PinotServiceManager(String zkAddress, String clusterName, int port) { - this(zkAddress, clusterName, null, port); + public PinotServiceManager(String zkAddress, String clusterName, int port, boolean healthCheckAllComponents) { + this(zkAddress, clusterName, null, port, healthCheckAllComponents); } - public PinotServiceManager(String zkAddress, String clusterName, String hostname, int port) { + public PinotServiceManager(String zkAddress, String clusterName, String hostname, int port, boolean healthCheckAllComponents) { _zkAddress = zkAddress; _clusterName = clusterName; if (port == 0) { @@ -76,10 +77,11 @@ public class PinotServiceManager { hostname = NetUtil.getHostnameOrAddress(); } _instanceId = String.format("ServiceManager_%s_%d", hostname, port); + _healthCheckAllComponents = healthCheckAllComponents; } public static void main(String[] args) { - PinotServiceManager pinotServiceManager = new PinotServiceManager("localhost:2181", "pinot-demo", 8085); + PinotServiceManager pinotServiceManager = new PinotServiceManager("localhost:2181", "pinot-demo", 8085, false); pinotServiceManager.start(); } @@ -228,4 +230,8 @@ public class PinotServiceManager { public boolean stopPinotInstanceById(String instanceName) { return stopPinotInstance(_runningInstanceMap.get(instanceName)); } + + public boolean isHealthCheckAllComponents() { + return _healthCheckAllComponents; + } } diff --git a/pinot-tools/src/main/java/org/apache/pinot/tools/service/api/resources/PinotServiceManagerHealthCheck.java b/pinot-tools/src/main/java/org/apache/pinot/tools/service/api/resources/PinotServiceManagerHealthCheck.java index bd3ac36..bed4bc7 100644 --- a/pinot-tools/src/main/java/org/apache/pinot/tools/service/api/resources/PinotServiceManagerHealthCheck.java +++ b/pinot-tools/src/main/java/org/apache/pinot/tools/service/api/resources/PinotServiceManagerHealthCheck.java @@ -25,6 +25,7 @@ import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import java.util.Map; +import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -33,18 +34,32 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.apache.pinot.common.utils.ServiceStatus; +import org.apache.pinot.tools.service.PinotServiceManager; @Api(tags = "Health") @Path("/") public class PinotServiceManagerHealthCheck { + @Inject + private PinotServiceManager _pinotServiceManager; + @GET @Produces(MediaType.TEXT_PLAIN) @Path("health") @ApiOperation(value = "Checking Pinot Service health") @ApiResponses(value = {@ApiResponse(code = 200, message = "Pinot Starter is healthy"), @ApiResponse(code = 503, message = "Pinot Starter is not healthy")}) public String getStarterHealth() { + if (_pinotServiceManager.isHealthCheckAllComponents()) { + Map<String, Map<String, String>> serviceStatusMap = ServiceStatus.getServiceStatusMap(); + for (String instanceName : serviceStatusMap.keySet()) { + ServiceStatus.Status status = ServiceStatus.getServiceStatus(instanceName); + if (status != ServiceStatus.Status.GOOD) { + throw new WebApplicationException(String.format("Pinot instance [ %s ] status is [ %s ]", instanceName, status), + Response.Status.SERVICE_UNAVAILABLE); + } + } + } ServiceStatus.Status status = ServiceStatus.getServiceStatus(); if (status == ServiceStatus.Status.GOOD) { return "OK"; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org