Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,30 @@
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.support.ActiveShardCount;
import org.elasticsearch.action.support.replication.ReplicationRequest;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.xcontent.XContentHelper;
import org.elasticsearch.core.Nullable;
import org.elasticsearch.core.TimeValue;
import org.elasticsearch.features.NodeFeature;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.tasks.Task;
import org.elasticsearch.tasks.TaskId;
import org.elasticsearch.transport.RemoteClusterAware;
import org.elasticsearch.xcontent.XContentBuilder;
import org.elasticsearch.xcontent.XContentFactory;
import org.elasticsearch.xcontent.XContentParser;
import org.elasticsearch.xcontent.XContentParserConfiguration;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Predicate;

import static org.elasticsearch.action.ValidateActions.addValidationError;
import static org.elasticsearch.core.TimeValue.timeValueMillis;
Expand Down Expand Up @@ -171,6 +180,34 @@ public AbstractBulkByPaginatedSearchRequest(SearchRequest searchRequest, boolean
}
}

static <Request extends AbstractBulkByPaginatedSearchRequest<Request>> Request parseXContent(
Request request,
XContentParser parser,
Predicate<NodeFeature> clusterSupportsFeature,
Map<String, Consumer<Object>> bodyConsumers
) throws IOException {
Map<String, Object> body = parser.map();
for (Map.Entry<String, Consumer<Object>> consumer : bodyConsumers.entrySet()) {
Object value = body.remove(consumer.getKey());
if (value != null) {
consumer.getValue().accept(value);
}
}
XContentBuilder builder = XContentFactory.contentBuilder(parser.contentType());
builder.map(body);
try (
XContentParser innerParser = XContentHelper.createParserNotCompressed(
XContentParserConfiguration.EMPTY.withRegistry(parser.getXContentRegistry())
.withDeprecationHandler(parser.getDeprecationHandler()),
BytesReference.bytes(builder),
parser.contentType()
)
) {
request.getSearchRequest().source().parseXContent(request.getSearchRequest(), innerParser, false, clusterSupportsFeature);
}
return request;
}

/**
* `this` cast to Self. Used for building fluent methods without cast
* warnings.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,18 @@
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.features.NodeFeature;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.tasks.TaskId;
import org.elasticsearch.xcontent.ToXContentObject;
import org.elasticsearch.xcontent.XContentBuilder;
import org.elasticsearch.xcontent.XContentParser;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Predicate;

import static org.elasticsearch.action.ValidateActions.addValidationError;

Expand Down Expand Up @@ -181,7 +187,22 @@ public IndicesOptions indicesOptions() {
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
getSearchRequest().source().innerToXContent(builder, params);
if (getMaxDocs() != MAX_DOCS_ALL_MATCHES) {
builder.field("max_docs", getMaxDocs());
}
if (isAbortOnVersionConflict() == false) {
builder.field("conflicts", "proceed");
}
builder.endObject();
return builder;
}

public static DeleteByQueryRequest fromXContent(XContentParser parser, Predicate<NodeFeature> clusterSupportsFeature)
throws IOException {
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest();
Map<String, Consumer<Object>> consumers = new HashMap<>();
consumers.put("conflicts", o -> deleteByQueryRequest.setConflicts((String) o));
consumers.put("max_docs", s -> ReindexRequest.setMaxDocsValidateIdentical(deleteByQueryRequest, ((Number) s).intValue()));
return parseXContent(deleteByQueryRequest, parser, clusterSupportsFeature, consumers);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,19 @@
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.features.NodeFeature;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.script.Script;
import org.elasticsearch.tasks.TaskId;
import org.elasticsearch.xcontent.ToXContentObject;
import org.elasticsearch.xcontent.XContentBuilder;
import org.elasticsearch.xcontent.XContentParser;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
* Request to update some documents. That means you can't change their type, id, index, or anything like that. This implements
Expand Down Expand Up @@ -182,7 +189,23 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
getScript().toXContent(builder, params);
}
getSearchRequest().source().innerToXContent(builder, params);
if (getMaxDocs() != MAX_DOCS_ALL_MATCHES) {
builder.field("max_docs", getMaxDocs());
}
if (isAbortOnVersionConflict() == false) {
builder.field("conflicts", "proceed");
}
builder.endObject();
return builder;
}

public static UpdateByQueryRequest fromXContent(XContentParser parser, Predicate<NodeFeature> clusterSupportsFeature)
throws IOException {
UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest();
Map<String, Consumer<Object>> consumers = new HashMap<>();
consumers.put("conflicts", o -> updateByQueryRequest.setConflicts((String) o));
consumers.put("script", o -> updateByQueryRequest.setScript(Script.parse(o)));
consumers.put("max_docs", s -> ReindexRequest.setMaxDocsValidateIdentical(updateByQueryRequest, ((Number) s).intValue()));
return parseXContent(updateByQueryRequest, parser, clusterSupportsFeature, consumers);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@
import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.core.Predicates;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchModule;
import org.elasticsearch.xcontent.NamedXContentRegistry;
import org.elasticsearch.xcontent.XContentParser;

import java.io.IOException;
import java.util.Collections;

import static org.apache.lucene.tests.util.TestUtil.randomSimpleString;
import static org.hamcrest.Matchers.containsString;
Expand All @@ -24,6 +30,13 @@
import static org.hamcrest.Matchers.nullValue;

public class DeleteByQueryRequestTests extends AbstractBulkByPaginatedSearchRequestTestCase<DeleteByQueryRequest> {

@Override
protected NamedXContentRegistry xContentRegistry() {
SearchModule searchModule = new SearchModule(Settings.EMPTY, Collections.emptyList());
return new NamedXContentRegistry(searchModule.getNamedXContents());
}

public void testDeleteteByQueryRequestImplementsIndicesRequestReplaceable() {
int numIndices = between(1, 100);
String[] indices = new String[numIndices];
Expand Down Expand Up @@ -109,19 +122,25 @@ public void testValidateGivenRemoteIndex() {
);
}

// TODO: Implement standard to/from x-content parsing tests

@Override
protected DeleteByQueryRequest createTestInstance() {
return newRequest();
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest();
if (randomBoolean()) {
deleteByQueryRequest.setMaxDocs(randomIntBetween(1, 1000));
}
if (randomBoolean()) {
deleteByQueryRequest.setAbortOnVersionConflict(false);
}
if (randomBoolean()) {
deleteByQueryRequest.setBatchSize(randomIntBetween(1, 1000));
}
deleteByQueryRequest.setQuery(new TermQueryBuilder("foo", "fooval"));
return deleteByQueryRequest;
}

@Override
protected DeleteByQueryRequest doParseInstance(XContentParser parser) throws IOException {
XContentParser.Token token;
while ((token = parser.nextToken()) != null) {
}
return newRequest();
return DeleteByQueryRequest.fromXContent(parser, Predicates.never());
}

@Override
Expand All @@ -130,5 +149,10 @@ protected boolean supportsUnknownFields() {
}

@Override
protected void assertEqualInstances(DeleteByQueryRequest expectedInstance, DeleteByQueryRequest newInstance) {}
protected void assertEqualInstances(DeleteByQueryRequest expectedInstance, DeleteByQueryRequest newInstance) {
assertNotSame(newInstance, expectedInstance);
assertEquals(expectedInstance.getSearchRequest(), newInstance.getSearchRequest());
assertEquals(expectedInstance.getMaxDocs(), newInstance.getMaxDocs());
assertEquals(expectedInstance.isAbortOnVersionConflict(), newInstance.isAbortOnVersionConflict());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@
import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.core.Predicates;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchModule;
import org.elasticsearch.xcontent.NamedXContentRegistry;
import org.elasticsearch.xcontent.XContentParser;

import java.io.IOException;
import java.util.Collections;

import static org.apache.lucene.tests.util.TestUtil.randomSimpleString;
import static org.hamcrest.Matchers.containsString;
Expand All @@ -24,6 +30,13 @@
import static org.hamcrest.Matchers.nullValue;

public class UpdateByQueryRequestTests extends AbstractBulkByPaginatedSearchRequestTestCase<UpdateByQueryRequest> {

@Override
protected NamedXContentRegistry xContentRegistry() {
SearchModule searchModule = new SearchModule(Settings.EMPTY, Collections.emptyList());
return new NamedXContentRegistry(searchModule.getNamedXContents());
}

public void testUpdateByQueryRequestImplementsIndicesRequestReplaceable() {
int numIndices = between(1, 100);
String[] indices = new String[numIndices];
Expand Down Expand Up @@ -93,19 +106,30 @@ protected void extraForSliceAssertions(UpdateByQueryRequest original, UpdateByQu
assertEquals(original.getPipeline(), forSliced.getPipeline());
}

// TODO: Implement standard to/from x-content parsing tests

@Override
protected UpdateByQueryRequest createTestInstance() {
return newRequest();
UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest();
if (randomBoolean()) {
updateByQueryRequest.setScript(mockScript(randomAlphaOfLength(5)));
}
if (randomBoolean()) {
updateByQueryRequest.setMaxDocs(randomIntBetween(1, 1000));
}
if (randomBoolean()) {
updateByQueryRequest.setAbortOnVersionConflict(false);
}
if (randomBoolean()) {
updateByQueryRequest.setBatchSize(randomIntBetween(1, 1000));
}
if (randomBoolean()) {
updateByQueryRequest.setQuery(new TermQueryBuilder("foo", "fooval"));
}
return updateByQueryRequest;
}

@Override
protected UpdateByQueryRequest doParseInstance(XContentParser parser) throws IOException {
XContentParser.Token token;
while ((token = parser.nextToken()) != null) {
}
return newRequest();
return UpdateByQueryRequest.fromXContent(parser, Predicates.never());
}

@Override
Expand All @@ -114,5 +138,11 @@ protected boolean supportsUnknownFields() {
}

@Override
protected void assertEqualInstances(UpdateByQueryRequest expectedInstance, UpdateByQueryRequest newInstance) {}
protected void assertEqualInstances(UpdateByQueryRequest expectedInstance, UpdateByQueryRequest newInstance) {
assertNotSame(newInstance, expectedInstance);
assertEquals(expectedInstance.getSearchRequest(), newInstance.getSearchRequest());
assertEquals(expectedInstance.getMaxDocs(), newInstance.getMaxDocs());
assertEquals(expectedInstance.isAbortOnVersionConflict(), newInstance.isAbortOnVersionConflict());
assertEquals(expectedInstance.getScript(), newInstance.getScript());
}
}