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:
parent
1f71890e10
commit
bd324676bc
|
@ -26,7 +26,6 @@ import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.metadata.AliasMetaData;
|
import org.elasticsearch.cluster.metadata.AliasMetaData;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.indices.AliasMissingException;
|
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.transport.TransportService;
|
import org.elasticsearch.transport.TransportService;
|
||||||
|
|
||||||
|
@ -68,10 +67,8 @@ public class TransportGetAliasesAction extends TransportMasterNodeOperationActio
|
||||||
String[] concreteIndices = state.metaData().concreteIndices(request.indices(), request.ignoreIndices(), true);
|
String[] concreteIndices = state.metaData().concreteIndices(request.indices(), request.ignoreIndices(), true);
|
||||||
request.indices(concreteIndices);
|
request.indices(concreteIndices);
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked") // ImmutableList to List results incompatible type
|
||||||
Map<String, List<AliasMetaData>> result = (Map) state.metaData().findAliases(request.aliases(), request.indices());
|
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));
|
listener.onResponse(new GetAliasesResponse(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -37,6 +37,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.GET;
|
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) {
|
public void handleRequest(final RestRequest request, final RestChannel channel) {
|
||||||
String[] aliases = request.paramAsStringArray("name", Strings.EMPTY_ARRAY);
|
String[] aliases = request.paramAsStringArray("name", Strings.EMPTY_ARRAY);
|
||||||
final String[] indices = RestActions.splitIndices(request.param("index"));
|
final String[] indices = RestActions.splitIndices(request.param("index"));
|
||||||
GetAliasesRequest getAliasesRequest = new GetAliasesRequest(aliases);
|
final GetAliasesRequest getAliasesRequest = new GetAliasesRequest(aliases);
|
||||||
getAliasesRequest.indices(indices);
|
getAliasesRequest.indices(indices);
|
||||||
|
|
||||||
if (request.hasParam("ignore_indices")) {
|
if (request.hasParam("ignore_indices")) {
|
||||||
|
@ -70,6 +71,16 @@ public class RestGetAliasesAction extends BaseRestHandler {
|
||||||
public void onResponse(GetAliasesResponse response) {
|
public void onResponse(GetAliasesResponse response) {
|
||||||
try {
|
try {
|
||||||
XContentBuilder builder = RestXContentBuilder.restContentBuilder(request);
|
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();
|
builder.startObject();
|
||||||
for (Map.Entry<String, List<AliasMetaData>> entry : response.getAliases().entrySet()) {
|
for (Map.Entry<String, List<AliasMetaData>> entry : response.getAliases().entrySet()) {
|
||||||
builder.startObject(entry.getKey(), XContentBuilder.FieldCaseConversion.NONE);
|
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 class Fields {
|
||||||
|
|
||||||
static final XContentBuilderString ALIASES = new XContentBuilderString("aliases");
|
static final XContentBuilderString ALIASES = new XContentBuilderString("aliases");
|
||||||
|
|
|
@ -24,7 +24,6 @@ import org.elasticsearch.action.admin.indices.alias.get.GetAliasesResponse;
|
||||||
import org.elasticsearch.client.Client;
|
import org.elasticsearch.client.Client;
|
||||||
import org.elasticsearch.common.settings.ImmutableSettings;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.indices.AliasMissingException;
|
|
||||||
import org.elasticsearch.indices.IndexAlreadyExistsException;
|
import org.elasticsearch.indices.IndexAlreadyExistsException;
|
||||||
import org.elasticsearch.node.Node;
|
import org.elasticsearch.node.Node;
|
||||||
import org.elasticsearch.node.NodeBuilder;
|
import org.elasticsearch.node.NodeBuilder;
|
||||||
|
@ -120,13 +119,13 @@ public class AliasesBenchmark {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int countAliases(Client client) {
|
private static int countAliases(Client client) {
|
||||||
try {
|
|
||||||
GetAliasesResponse response = client.admin().indices().prepareGetAliases("a*")
|
GetAliasesResponse response = client.admin().indices().prepareGetAliases("a*")
|
||||||
.addIndices(INDEX_NAME)
|
.addIndices(INDEX_NAME)
|
||||||
.execute().actionGet();
|
.execute().actionGet();
|
||||||
return response.getAliases().get(INDEX_NAME).size();
|
if (response.getAliases().isEmpty()) {
|
||||||
} catch (AliasMissingException e) {
|
|
||||||
return 0;
|
return 0;
|
||||||
|
} else {
|
||||||
|
return response.getAliases().get(INDEX_NAME).size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,14 +37,12 @@ import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.index.query.FilterBuilder;
|
import org.elasticsearch.index.query.FilterBuilder;
|
||||||
import org.elasticsearch.index.query.QueryBuilders;
|
import org.elasticsearch.index.query.QueryBuilders;
|
||||||
import org.elasticsearch.indices.AliasMissingException;
|
|
||||||
import org.elasticsearch.search.SearchHit;
|
import org.elasticsearch.search.SearchHit;
|
||||||
import org.elasticsearch.search.SearchHits;
|
import org.elasticsearch.search.SearchHits;
|
||||||
import org.elasticsearch.search.facet.FacetBuilders;
|
import org.elasticsearch.search.facet.FacetBuilders;
|
||||||
import org.elasticsearch.search.facet.terms.TermsFacet;
|
import org.elasticsearch.search.facet.terms.TermsFacet;
|
||||||
import org.elasticsearch.search.sort.SortOrder;
|
import org.elasticsearch.search.sort.SortOrder;
|
||||||
import org.elasticsearch.test.integration.AbstractSharedClusterTest;
|
import org.elasticsearch.test.integration.AbstractSharedClusterTest;
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -777,12 +775,8 @@ public class IndexAliasesTests extends AbstractSharedClusterTest {
|
||||||
.execute().actionGet();
|
.execute().actionGet();
|
||||||
assertThat(indicesAliasesResponse.isAcknowledged(), equalTo(true));
|
assertThat(indicesAliasesResponse.isAcknowledged(), equalTo(true));
|
||||||
|
|
||||||
try {
|
getResponse = client().admin().indices().prepareGetAliases("foo").addIndices("foobar").execute().actionGet();
|
||||||
client().admin().indices().prepareGetAliases("foo").addIndices("foobar").execute().actionGet();
|
assertThat(getResponse.getAliases().isEmpty(), equalTo(true));
|
||||||
Assert.fail("Exception should have been thrown");
|
|
||||||
} catch (AliasMissingException e) {
|
|
||||||
assertThat(e.getMessage(), equalTo("alias [foo] missing"));
|
|
||||||
}
|
|
||||||
existsResponse = client().admin().indices().prepareAliasesExist("foo")
|
existsResponse = client().admin().indices().prepareAliasesExist("foo")
|
||||||
.addIndices("foobar").execute().actionGet();
|
.addIndices("foobar").execute().actionGet();
|
||||||
assertThat(existsResponse.exists(), equalTo(false));
|
assertThat(existsResponse.exists(), equalTo(false));
|
||||||
|
|
Loading…
Reference in New Issue