From ddbeb910be5686d0e58bcd4ed050e7871d2f8066 Mon Sep 17 00:00:00 2001 From: uboness Date: Tue, 30 Sep 2014 15:55:03 +0200 Subject: [PATCH] Changed the root rest endpoint ('/') to use cluster service Instead of issuing a redundant cluster state request. Closes #7899 --- .../rest/action/main/RestMainAction.java | 88 +++++++++---------- 1 file changed, 40 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java b/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java index 58bf9551860..dfc231e219f 100644 --- a/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java +++ b/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java @@ -22,16 +22,13 @@ package org.elasticsearch.rest.action.main; import org.apache.lucene.util.Constants; import org.elasticsearch.Build; import org.elasticsearch.Version; -import org.elasticsearch.action.admin.cluster.state.ClusterStateRequest; -import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.cluster.ClusterName; +import org.elasticsearch.cluster.ClusterService; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.rest.*; -import org.elasticsearch.rest.action.support.RestResponseListener; import static org.elasticsearch.rest.RestRequest.Method.GET; import static org.elasticsearch.rest.RestRequest.Method.HEAD; @@ -43,62 +40,57 @@ public class RestMainAction extends BaseRestHandler { private final Version version; private final ClusterName clusterName; + private final ClusterService clusterService; @Inject - public RestMainAction(Settings settings, Version version, RestController controller, ClusterName clusterName, Client client) { + public RestMainAction(Settings settings, Version version, RestController controller, ClusterName clusterName, Client client, ClusterService clusterService) { super(settings, controller, client); this.version = version; this.clusterName = clusterName; + this.clusterService = clusterService; controller.registerHandler(GET, "/", this); controller.registerHandler(HEAD, "/", this); } @Override - public void handleRequest(final RestRequest request, final RestChannel channel, final Client client) { - ClusterStateRequest clusterStateRequest = new ClusterStateRequest(); - clusterStateRequest.listenerThreaded(false); - clusterStateRequest.masterNodeTimeout(TimeValue.timeValueMillis(0)); - clusterStateRequest.local(true); - clusterStateRequest.clear().blocks(true); - client.admin().cluster().state(clusterStateRequest, new RestResponseListener(channel) { - @Override - public RestResponse buildResponse(ClusterStateResponse response) throws Exception { - RestStatus status = RestStatus.OK; - if (response.getState().blocks().hasGlobalBlock(RestStatus.SERVICE_UNAVAILABLE)) { - status = RestStatus.SERVICE_UNAVAILABLE; - } - if (request.method() == RestRequest.Method.HEAD) { - return new BytesRestResponse(status); - } + public void handleRequest(final RestRequest request, RestChannel channel, final Client client) throws Exception { - XContentBuilder builder = channel.newBuilder(); + RestStatus status = RestStatus.OK; + if (clusterService.state().blocks().hasGlobalBlock(RestStatus.SERVICE_UNAVAILABLE)) { + status = RestStatus.SERVICE_UNAVAILABLE; + } + if (request.method() == RestRequest.Method.HEAD) { + channel.sendResponse(new BytesRestResponse(status)); + return; + } - // Default to pretty printing, but allow ?pretty=false to disable - if (!request.hasParam("pretty")) { - builder.prettyPrint().lfAtEnd(); - } + XContentBuilder builder = channel.newBuilder(); - builder.startObject(); - builder.field("status", status.getStatus()); - if (settings.get("name") != null) { - builder.field("name", settings.get("name")); - } - builder.field("cluster_name", clusterName.value()); - builder.startObject("version") - .field("number", version.number()) - .field("build_hash", Build.CURRENT.hash()) - .field("build_timestamp", Build.CURRENT.timestamp()) - .field("build_snapshot", version.snapshot) - // We use the lucene version from lucene constants since - // this includes bugfix release version as well and is already in - // the right format. We can also be sure that the format is maitained - // since this is also recorded in lucene segments and has BW compat - .field("lucene_version", Constants.LUCENE_MAIN_VERSION) - .endObject(); - builder.field("tagline", "You Know, for Search"); - builder.endObject(); - return new BytesRestResponse(status, builder); - } - }); + // Default to pretty printing, but allow ?pretty=false to disable + if (!request.hasParam("pretty")) { + builder.prettyPrint().lfAtEnd(); + } + + builder.startObject(); + builder.field("status", status.getStatus()); + if (settings.get("name") != null) { + builder.field("name", settings.get("name")); + } + builder.field("cluster_name", clusterName.value()); + builder.startObject("version") + .field("number", version.number()) + .field("build_hash", Build.CURRENT.hash()) + .field("build_timestamp", Build.CURRENT.timestamp()) + .field("build_snapshot", version.snapshot) + // We use the lucene version from lucene constants since + // this includes bugfix release version as well and is already in + // the right format. We can also be sure that the format is maitained + // since this is also recorded in lucene segments and has BW compat + .field("lucene_version", Constants.LUCENE_MAIN_VERSION) + .endObject(); + builder.field("tagline", "You Know, for Search"); + builder.endObject(); + + channel.sendResponse(new BytesRestResponse(status, builder)); } }