Removed AliasMissingException, get alias api will now just return an empty map. In the rest layer a 404 is returned when map is empty.

This commit is contained in:
Martijn van Groningen 2013-08-02 17:01:44 +02:00
parent 1f71890e10
commit bd324676bc
5 changed files with 35 additions and 79 deletions

View File

@ -26,7 +26,6 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.metadata.AliasMetaData;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.indices.AliasMissingException;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.TransportService;
@ -68,10 +67,8 @@ public class TransportGetAliasesAction extends TransportMasterNodeOperationActio
String[] concreteIndices = state.metaData().concreteIndices(request.indices(), request.ignoreIndices(), true);
request.indices(concreteIndices);
@SuppressWarnings("unchecked") // ImmutableList to List results incompatible type
Map<String, List<AliasMetaData>> result = (Map) state.metaData().findAliases(request.aliases(), request.indices());
if (result.isEmpty()) {
throw new AliasMissingException(request.aliases());
}
listener.onResponse(new GetAliasesResponse(result));
}

View File

@ -1,59 +0,0 @@
/*
* Licensed to ElasticSearch and Shay Banon under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. ElasticSearch licenses this
* file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.elasticsearch.indices;
import java.util.Locale;
import org.elasticsearch.ElasticSearchException;
import org.elasticsearch.rest.RestStatus;
/**
*/
public class AliasMissingException extends ElasticSearchException {
private final String[] names;
public AliasMissingException(String... names) {
super(String.format(Locale.ROOT, "alias [%s] missing", toNamesString(names)));
this.names = names;
}
public String[] getName() {
return names;
}
@Override
public RestStatus status() {
return RestStatus.NOT_FOUND;
}
private static String toNamesString(String... names) {
if (names == null || names.length == 0) {
return "";
} else if (names.length == 1) {
return names[0];
} else {
StringBuilder builder = new StringBuilder(names[0]);
for (int i = 1; i < names.length; i++) {
builder.append(',').append(names[i]);
}
return builder.toString();
}
}
}

View File

@ -37,6 +37,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import static org.elasticsearch.rest.RestRequest.Method.GET;
@ -57,7 +58,7 @@ public class RestGetAliasesAction extends BaseRestHandler {
public void handleRequest(final RestRequest request, final RestChannel channel) {
String[] aliases = request.paramAsStringArray("name", Strings.EMPTY_ARRAY);
final String[] indices = RestActions.splitIndices(request.param("index"));
GetAliasesRequest getAliasesRequest = new GetAliasesRequest(aliases);
final GetAliasesRequest getAliasesRequest = new GetAliasesRequest(aliases);
getAliasesRequest.indices(indices);
if (request.hasParam("ignore_indices")) {
@ -70,6 +71,16 @@ public class RestGetAliasesAction extends BaseRestHandler {
public void onResponse(GetAliasesResponse response) {
try {
XContentBuilder builder = RestXContentBuilder.restContentBuilder(request);
if (response.getAliases().isEmpty()) {
String message = String.format(Locale.ROOT, "alias [%s] missing", toNamesString(getAliasesRequest.aliases()));
builder.startObject()
.field("error", message)
.field("status", RestStatus.NOT_FOUND.getStatus())
.endObject();
channel.sendResponse(new XContentRestResponse(request, RestStatus.NOT_FOUND, builder));
return;
}
builder.startObject();
for (Map.Entry<String, List<AliasMetaData>> entry : response.getAliases().entrySet()) {
builder.startObject(entry.getKey(), XContentBuilder.FieldCaseConversion.NONE);
@ -98,6 +109,20 @@ public class RestGetAliasesAction extends BaseRestHandler {
});
}
private static String toNamesString(String... names) {
if (names == null || names.length == 0) {
return "";
} else if (names.length == 1) {
return names[0];
} else {
StringBuilder builder = new StringBuilder(names[0]);
for (int i = 1; i < names.length; i++) {
builder.append(',').append(names[i]);
}
return builder.toString();
}
}
static class Fields {
static final XContentBuilderString ALIASES = new XContentBuilderString("aliases");

View File

@ -24,7 +24,6 @@ import org.elasticsearch.action.admin.indices.alias.get.GetAliasesResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.indices.AliasMissingException;
import org.elasticsearch.indices.IndexAlreadyExistsException;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;
@ -120,13 +119,13 @@ public class AliasesBenchmark {
}
private static int countAliases(Client client) {
try {
GetAliasesResponse response = client.admin().indices().prepareGetAliases("a*")
.addIndices(INDEX_NAME)
.execute().actionGet();
return response.getAliases().get(INDEX_NAME).size();
} catch (AliasMissingException e) {
GetAliasesResponse response = client.admin().indices().prepareGetAliases("a*")
.addIndices(INDEX_NAME)
.execute().actionGet();
if (response.getAliases().isEmpty()) {
return 0;
} else {
return response.getAliases().get(INDEX_NAME).size();
}
}

View File

@ -37,14 +37,12 @@ import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.indices.AliasMissingException;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.facet.FacetBuilders;
import org.elasticsearch.search.facet.terms.TermsFacet;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.test.integration.AbstractSharedClusterTest;
import org.junit.Assert;
import org.junit.Test;
import java.util.Set;
@ -777,12 +775,8 @@ public class IndexAliasesTests extends AbstractSharedClusterTest {
.execute().actionGet();
assertThat(indicesAliasesResponse.isAcknowledged(), equalTo(true));
try {
client().admin().indices().prepareGetAliases("foo").addIndices("foobar").execute().actionGet();
Assert.fail("Exception should have been thrown");
} catch (AliasMissingException e) {
assertThat(e.getMessage(), equalTo("alias [foo] missing"));
}
getResponse = client().admin().indices().prepareGetAliases("foo").addIndices("foobar").execute().actionGet();
assertThat(getResponse.getAliases().isEmpty(), equalTo(true));
existsResponse = client().admin().indices().prepareAliasesExist("foo")
.addIndices("foobar").execute().actionGet();
assertThat(existsResponse.exists(), equalTo(false));