From a53006fa3717dd22a8d45d089440ec9589ec2da7 Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Tue, 3 Apr 2012 14:35:10 +0300 Subject: [PATCH] Getting _settings or _mapping for non-existing index returns 200 OK, closes #1828. --- .../mapping/get/RestGetMappingAction.java | 16 +++++++++++----- .../indices/settings/RestGetSettingsAction.java | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java index b99c4863d48c9..59ae9364608ab 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java @@ -41,6 +41,7 @@ import java.util.Set; import static org.elasticsearch.rest.RestRequest.Method.GET; +import static org.elasticsearch.rest.RestStatus.NOT_FOUND; import static org.elasticsearch.rest.RestStatus.OK; import static org.elasticsearch.rest.action.support.RestActions.splitIndices; import static org.elasticsearch.rest.action.support.RestActions.splitTypes; @@ -72,15 +73,18 @@ public void handleRequest(final RestRequest request, final RestChannel channel) @Override public void onResponse(ClusterStateResponse response) { try { + boolean foundAny = false; + MetaData metaData = response.state().metaData(); XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); builder.startObject(); + if (indices.length == 1 && metaData.indices().isEmpty()) { + channel.sendResponse(new XContentThrowableRestResponse(request, new IndexMissingException(new Index(indices[0])))); + return; + } + if (indices.length == 1 && types.size() == 1) { - if (metaData.indices().isEmpty()) { - channel.sendResponse(new XContentThrowableRestResponse(request, new IndexMissingException(new Index(indices[0])))); - return; - } boolean foundType = false; IndexMetaData indexMetaData = metaData.iterator().next(); for (MappingMetaData mappingMd : indexMetaData.mappings().values()) { @@ -88,6 +92,7 @@ public void onResponse(ClusterStateResponse response) { // filter this type out... continue; } + foundAny = true; foundType = true; builder.field(mappingMd.type()); builder.map(mappingMd.sourceAsMap()); @@ -105,6 +110,7 @@ public void onResponse(ClusterStateResponse response) { // filter this type out... continue; } + foundAny = true; builder.field(mappingMd.type()); builder.map(mappingMd.sourceAsMap()); } @@ -115,7 +121,7 @@ public void onResponse(ClusterStateResponse response) { builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new XContentRestResponse(request, foundAny ? OK : NOT_FOUND, builder)); } catch (Exception e) { onFailure(e); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java index 1f435a2e67b1d..f170025222185 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java @@ -30,6 +30,8 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.SettingsFilter; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.index.Index; +import org.elasticsearch.indices.IndexMissingException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; @@ -37,6 +39,7 @@ import java.util.Map; import static org.elasticsearch.rest.RestRequest.Method.GET; +import static org.elasticsearch.rest.RestStatus.NOT_FOUND; import static org.elasticsearch.rest.RestStatus.OK; import static org.elasticsearch.rest.action.support.RestActions.splitIndices; @@ -67,12 +70,19 @@ public void handleRequest(final RestRequest request, final RestChannel channel) public void onResponse(ClusterStateResponse response) { try { MetaData metaData = response.state().metaData(); + + if (metaData.indices().isEmpty()) { + channel.sendResponse(new XContentThrowableRestResponse(request, new IndexMissingException(new Index(indices[0])))); + return; + } + + boolean foundAny = false; XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); builder.startObject(); for (IndexMetaData indexMetaData : metaData) { builder.startObject(indexMetaData.index(), XContentBuilder.FieldCaseConversion.NONE); - + foundAny = true; builder.startObject("settings"); Settings settings = settingsFilter.filterSettings(indexMetaData.settings()); for (Map.Entry entry : settings.getAsMap().entrySet()) { @@ -85,7 +95,7 @@ public void onResponse(ClusterStateResponse response) { builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new XContentRestResponse(request, foundAny ? OK : NOT_FOUND, builder)); } catch (Exception e) { onFailure(e); }