parent
12a2808168
commit
35f5ca915d
|
@ -22,6 +22,7 @@ package org.elasticsearch.action.support.replication;
|
|||
import org.elasticsearch.action.ActionRequest;
|
||||
import org.elasticsearch.action.ActionRequestValidationException;
|
||||
import org.elasticsearch.action.WriteConsistencyLevel;
|
||||
import org.elasticsearch.action.support.IgnoreIndices;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
|
@ -35,6 +36,8 @@ public class IndicesReplicationOperationRequest<T extends IndicesReplicationOper
|
|||
|
||||
protected TimeValue timeout = ShardReplicationOperationRequest.DEFAULT_TIMEOUT;
|
||||
protected String[] indices;
|
||||
private IgnoreIndices ignoreIndices = IgnoreIndices.DEFAULT;
|
||||
|
||||
protected ReplicationType replicationType = ReplicationType.DEFAULT;
|
||||
protected WriteConsistencyLevel consistencyLevel = WriteConsistencyLevel.DEFAULT;
|
||||
|
||||
|
@ -64,6 +67,15 @@ public class IndicesReplicationOperationRequest<T extends IndicesReplicationOper
|
|||
return this.indices;
|
||||
}
|
||||
|
||||
public IgnoreIndices ignoreIndices() {
|
||||
return ignoreIndices;
|
||||
}
|
||||
|
||||
public T ignoreIndices(IgnoreIndices ignoreIndices) {
|
||||
this.ignoreIndices = ignoreIndices;
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The indices the request will execute against.
|
||||
*/
|
||||
|
@ -118,6 +130,7 @@ public class IndicesReplicationOperationRequest<T extends IndicesReplicationOper
|
|||
consistencyLevel = WriteConsistencyLevel.fromId(in.readByte());
|
||||
timeout = TimeValue.readTimeValue(in);
|
||||
indices = in.readStringArray();
|
||||
ignoreIndices = IgnoreIndices.fromId(in.readByte());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -127,5 +140,6 @@ public class IndicesReplicationOperationRequest<T extends IndicesReplicationOper
|
|||
out.writeByte(consistencyLevel.id());
|
||||
timeout.writeTo(out);
|
||||
out.writeStringArrayNullable(indices);
|
||||
out.writeByte(ignoreIndices.id());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.elasticsearch.action.support.replication;
|
|||
import org.elasticsearch.action.ActionRequestBuilder;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
import org.elasticsearch.action.WriteConsistencyLevel;
|
||||
import org.elasticsearch.action.support.IgnoreIndices;
|
||||
import org.elasticsearch.client.internal.InternalGenericClient;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
|
||||
|
@ -58,6 +59,14 @@ public abstract class IndicesReplicationOperationRequestBuilder<Request extends
|
|||
return (RequestBuilder) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies what type of requested indices to ignore. For example indices that don't exist.
|
||||
*/
|
||||
public RequestBuilder setIgnoreIndices(IgnoreIndices ignoreIndices) {
|
||||
request().ignoreIndices(ignoreIndices);
|
||||
return (RequestBuilder) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the replication type.
|
||||
*/
|
||||
|
|
|
@ -75,7 +75,7 @@ public abstract class TransportIndicesReplicationOperationAction<Request extends
|
|||
throw blockException;
|
||||
}
|
||||
// get actual indices
|
||||
String[] concreteIndices = clusterState.metaData().concreteIndices(request.indices());
|
||||
String[] concreteIndices = clusterState.metaData().concreteIndices(request.indices(), request.ignoreIndices(), false);
|
||||
blockException = checkRequestBlock(clusterState, request, concreteIndices);
|
||||
if (blockException != null) {
|
||||
throw blockException;
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.elasticsearch.action.deletebyquery.DeleteByQueryRequest;
|
|||
import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse;
|
||||
import org.elasticsearch.action.deletebyquery.IndexDeleteByQueryResponse;
|
||||
import org.elasticsearch.action.deletebyquery.ShardDeleteByQueryRequest;
|
||||
import org.elasticsearch.action.support.IgnoreIndices;
|
||||
import org.elasticsearch.action.support.replication.ReplicationType;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
|
@ -83,6 +84,9 @@ public class RestDeleteByQueryAction extends BaseRestHandler {
|
|||
if (consistencyLevel != null) {
|
||||
deleteByQueryRequest.consistencyLevel(WriteConsistencyLevel.fromString(consistencyLevel));
|
||||
}
|
||||
if (request.hasParam("ignore_indices")) {
|
||||
deleteByQueryRequest.ignoreIndices(IgnoreIndices.fromString(request.param("ignore_indices")));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
XContentBuilder builder = RestXContentBuilder.restContentBuilder(request);
|
||||
|
|
|
@ -22,8 +22,10 @@ package org.elasticsearch.test.integration.deleteByQuery;
|
|||
import org.elasticsearch.action.deletebyquery.DeleteByQueryRequestBuilder;
|
||||
import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
import org.elasticsearch.action.support.IgnoreIndices;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.indices.IndexMissingException;
|
||||
import org.elasticsearch.test.integration.AbstractNodesTests;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
|
@ -32,6 +34,7 @@ import org.testng.annotations.Test;
|
|||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.notNullValue;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
public class DeleteByQueryTests extends AbstractNodesTests {
|
||||
|
||||
|
@ -85,4 +88,34 @@ public class DeleteByQueryTests extends AbstractNodesTests {
|
|||
search = client.prepareSearch().setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
|
||||
assertThat(search.getHits().totalHits(), equalTo(0l));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMissing() {
|
||||
client.admin().indices().prepareDelete().execute().actionGet();
|
||||
|
||||
String json = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elastic Search\"" + "}";
|
||||
|
||||
client.prepareIndex("twitter", "tweet").setSource(json).setRefresh(true).execute().actionGet();
|
||||
|
||||
SearchResponse search = client.prepareSearch().setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
|
||||
assertThat(search.getHits().totalHits(), equalTo(1l));
|
||||
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = new DeleteByQueryRequestBuilder(client);
|
||||
deleteByQueryRequestBuilder.setIndices("twitter", "missing");
|
||||
deleteByQueryRequestBuilder.setQuery(QueryBuilders.matchAllQuery());
|
||||
|
||||
try {
|
||||
DeleteByQueryResponse actionGet = deleteByQueryRequestBuilder.execute().actionGet();
|
||||
fail("Exception should have been thrown.");
|
||||
} catch (IndexMissingException e) {
|
||||
}
|
||||
|
||||
deleteByQueryRequestBuilder.setIgnoreIndices(IgnoreIndices.MISSING);
|
||||
DeleteByQueryResponse actionGet = deleteByQueryRequestBuilder.execute().actionGet();
|
||||
assertThat(actionGet.getIndex("twitter").getFailedShards(), equalTo(0));
|
||||
assertThat(actionGet.getIndex("twitter"), notNullValue());
|
||||
|
||||
client.admin().indices().prepareRefresh().execute().actionGet();
|
||||
search = client.prepareSearch().setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
|
||||
assertThat(search.getHits().totalHits(), equalTo(0l));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue