Type removal - added deprecation warnings to _bulk apis (#36549)
Added warnings checks to existing tests Added “defaultTypeIfNull” to DocWriteRequest interface so that Bulk requests can override a null choice of document type with any global custom choice. Related to #35190
This commit is contained in:
parent
04dcb13ac4
commit
434430506b
|
@ -32,13 +32,15 @@ import org.elasticsearch.index.shard.ShardId;
|
|||
import org.elasticsearch.tasks.Task;
|
||||
import org.elasticsearch.transport.TransportService;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class TransportNoopBulkAction extends HandledTransportAction<BulkRequest, BulkResponse> {
|
||||
private static final BulkItemResponse ITEM_RESPONSE = new BulkItemResponse(1, DocWriteRequest.OpType.UPDATE,
|
||||
new UpdateResponse(new ShardId("mock", "", 1), "mock_type", "1", 1L, DocWriteResponse.Result.CREATED));
|
||||
|
||||
@Inject
|
||||
public TransportNoopBulkAction(TransportService transportService, ActionFilters actionFilters) {
|
||||
super(NoopBulkAction.NAME, transportService, actionFilters, BulkRequest::new);
|
||||
super(NoopBulkAction.NAME, transportService, actionFilters, (Supplier<BulkRequest>) BulkRequest::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -165,7 +165,9 @@ final class RequestConverters {
|
|||
metadata.field("_index", action.index());
|
||||
}
|
||||
if (Strings.hasLength(action.type())) {
|
||||
metadata.field("_type", action.type());
|
||||
if (MapperService.SINGLE_MAPPING_NAME.equals(action.type()) == false) {
|
||||
metadata.field("_type", action.type());
|
||||
}
|
||||
}
|
||||
if (Strings.hasLength(action.id())) {
|
||||
metadata.field("_id", action.id());
|
||||
|
|
|
@ -35,6 +35,8 @@ import org.elasticsearch.common.unit.ByteSizeUnit;
|
|||
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.hamcrest.Matcher;
|
||||
import org.hamcrest.Matchers;
|
||||
|
@ -70,8 +72,15 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
|
|||
|
||||
private static BulkProcessor.Builder initBulkProcessorBuilder(BulkProcessor.Listener listener) {
|
||||
return BulkProcessor.builder(
|
||||
(request, bulkListener) -> highLevelClient().bulkAsync(request, RequestOptions.DEFAULT, bulkListener), listener);
|
||||
(request, bulkListener) -> highLevelClient().bulkAsync(request, RequestOptions.DEFAULT,
|
||||
bulkListener), listener);
|
||||
}
|
||||
|
||||
private static BulkProcessor.Builder initBulkProcessorBuilderUsingTypes(BulkProcessor.Listener listener) {
|
||||
return BulkProcessor.builder(
|
||||
(request, bulkListener) -> highLevelClient().bulkAsync(request, expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE),
|
||||
bulkListener), listener);
|
||||
}
|
||||
|
||||
public void testThatBulkProcessorCountIsCorrect() throws Exception {
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
|
@ -320,35 +329,105 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
|
|||
public void testGlobalParametersAndBulkProcessor() throws Exception {
|
||||
createIndexWithMultipleShards("test");
|
||||
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
|
||||
createFieldAddingPipleine("pipeline_id", "fieldNameXYZ", "valueXYZ");
|
||||
final String customType = "testType";
|
||||
final String ignoredType = "ignoredType";
|
||||
|
||||
int numDocs = randomIntBetween(10, 10);
|
||||
try (BulkProcessor processor = initBulkProcessorBuilder(listener)
|
||||
//let's make sure that the bulk action limit trips, one single execution will index all the documents
|
||||
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
|
||||
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
|
||||
.setGlobalIndex("test")
|
||||
.setGlobalType("_doc")
|
||||
.setGlobalRouting("routing")
|
||||
.setGlobalPipeline("pipeline_id")
|
||||
.build()) {
|
||||
{
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
|
||||
//Check that untyped document additions inherit the global type
|
||||
String globalType = customType;
|
||||
String localType = null;
|
||||
try (BulkProcessor processor = initBulkProcessorBuilderUsingTypes(listener)
|
||||
//let's make sure that the bulk action limit trips, one single execution will index all the documents
|
||||
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
|
||||
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
|
||||
.setGlobalIndex("test")
|
||||
.setGlobalType(globalType)
|
||||
.setGlobalRouting("routing")
|
||||
.setGlobalPipeline("pipeline_id")
|
||||
.build()) {
|
||||
|
||||
indexDocs(processor, numDocs, null, null, "test", "pipeline_id");
|
||||
latch.await();
|
||||
indexDocs(processor, numDocs, null, localType, "test", globalType, "pipeline_id");
|
||||
latch.await();
|
||||
|
||||
assertThat(listener.beforeCounts.get(), equalTo(1));
|
||||
assertThat(listener.afterCounts.get(), equalTo(1));
|
||||
assertThat(listener.bulkFailures.size(), equalTo(0));
|
||||
assertResponseItems(listener.bulkItems, numDocs);
|
||||
assertThat(listener.beforeCounts.get(), equalTo(1));
|
||||
assertThat(listener.afterCounts.get(), equalTo(1));
|
||||
assertThat(listener.bulkFailures.size(), equalTo(0));
|
||||
assertResponseItems(listener.bulkItems, numDocs, globalType);
|
||||
|
||||
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
|
||||
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
|
||||
|
||||
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
|
||||
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType(globalType))));
|
||||
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
|
||||
}
|
||||
|
||||
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
|
||||
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType("_doc"))));
|
||||
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
|
||||
}
|
||||
{
|
||||
//Check that typed document additions don't inherit the global type
|
||||
String globalType = ignoredType;
|
||||
String localType = customType;
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
|
||||
try (BulkProcessor processor = initBulkProcessorBuilderUsingTypes(listener)
|
||||
//let's make sure that the bulk action limit trips, one single execution will index all the documents
|
||||
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
|
||||
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
|
||||
.setGlobalIndex("test")
|
||||
.setGlobalType(globalType)
|
||||
.setGlobalRouting("routing")
|
||||
.setGlobalPipeline("pipeline_id")
|
||||
.build()) {
|
||||
indexDocs(processor, numDocs, null, localType, "test", globalType, "pipeline_id");
|
||||
latch.await();
|
||||
|
||||
assertThat(listener.beforeCounts.get(), equalTo(1));
|
||||
assertThat(listener.afterCounts.get(), equalTo(1));
|
||||
assertThat(listener.bulkFailures.size(), equalTo(0));
|
||||
assertResponseItems(listener.bulkItems, numDocs, localType);
|
||||
|
||||
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
|
||||
|
||||
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
|
||||
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType(localType))));
|
||||
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
|
||||
}
|
||||
}
|
||||
{
|
||||
//Check that untyped document additions and untyped global inherit the established custom type
|
||||
// (the custom document type introduced to the mapping by the earlier code in this test)
|
||||
String globalType = null;
|
||||
String localType = null;
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
|
||||
try (BulkProcessor processor = initBulkProcessorBuilder(listener)
|
||||
//let's make sure that the bulk action limit trips, one single execution will index all the documents
|
||||
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
|
||||
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
|
||||
.setGlobalIndex("test")
|
||||
.setGlobalType(globalType)
|
||||
.setGlobalRouting("routing")
|
||||
.setGlobalPipeline("pipeline_id")
|
||||
.build()) {
|
||||
indexDocs(processor, numDocs, null, localType, "test", globalType, "pipeline_id");
|
||||
latch.await();
|
||||
|
||||
assertThat(listener.beforeCounts.get(), equalTo(1));
|
||||
assertThat(listener.afterCounts.get(), equalTo(1));
|
||||
assertThat(listener.bulkFailures.size(), equalTo(0));
|
||||
assertResponseItems(listener.bulkItems, numDocs, MapperService.SINGLE_MAPPING_NAME);
|
||||
|
||||
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
|
||||
|
||||
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
|
||||
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType(customType))));
|
||||
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
|
||||
}
|
||||
}
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@ -359,15 +438,15 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
|
|||
.<Matcher<SearchHit>>toArray(Matcher[]::new);
|
||||
}
|
||||
|
||||
private static MultiGetRequest indexDocs(BulkProcessor processor, int numDocs, String localIndex,
|
||||
private static MultiGetRequest indexDocs(BulkProcessor processor, int numDocs, String localIndex, String localType,
|
||||
String globalIndex, String globalType, String globalPipeline) throws Exception {
|
||||
MultiGetRequest multiGetRequest = new MultiGetRequest();
|
||||
for (int i = 1; i <= numDocs; i++) {
|
||||
if (randomBoolean()) {
|
||||
processor.add(new IndexRequest(localIndex).id(Integer.toString(i))
|
||||
processor.add(new IndexRequest(localIndex, localType, Integer.toString(i))
|
||||
.source(XContentType.JSON, "field", randomRealisticUnicodeOfLengthBetween(1, 30)));
|
||||
} else {
|
||||
BytesArray data = bytesBulkRequest(localIndex, "_doc", i);
|
||||
BytesArray data = bytesBulkRequest(localIndex, localType, i);
|
||||
processor.add(data, globalIndex, globalType, globalPipeline, null, XContentType.JSON);
|
||||
}
|
||||
multiGetRequest.add(localIndex, Integer.toString(i));
|
||||
|
@ -396,15 +475,19 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
|
|||
}
|
||||
|
||||
private static MultiGetRequest indexDocs(BulkProcessor processor, int numDocs) throws Exception {
|
||||
return indexDocs(processor, numDocs, "test", null, null, null);
|
||||
return indexDocs(processor, numDocs, "test", null, null, null, null);
|
||||
}
|
||||
|
||||
|
||||
private static void assertResponseItems(List<BulkItemResponse> bulkItemResponses, int numDocs) {
|
||||
assertResponseItems(bulkItemResponses, numDocs, MapperService.SINGLE_MAPPING_NAME);
|
||||
}
|
||||
|
||||
private static void assertResponseItems(List<BulkItemResponse> bulkItemResponses, int numDocs, String expectedType) {
|
||||
assertThat(bulkItemResponses.size(), is(numDocs));
|
||||
int i = 1;
|
||||
for (BulkItemResponse bulkItemResponse : bulkItemResponses) {
|
||||
assertThat(bulkItemResponse.getIndex(), equalTo("test"));
|
||||
assertThat(bulkItemResponse.getType(), equalTo("_doc"));
|
||||
assertThat(bulkItemResponse.getType(), equalTo(expectedType));
|
||||
assertThat(bulkItemResponse.getId(), equalTo(Integer.toString(i++)));
|
||||
assertThat("item " + i + " failed with cause: " + bulkItemResponse.getFailureMessage(),
|
||||
bulkItemResponse.isFailed(), equalTo(false));
|
||||
|
|
|
@ -143,7 +143,7 @@ public class BulkProcessorRetryIT extends ESRestHighLevelClientTestCase {
|
|||
private static MultiGetRequest indexDocs(BulkProcessor processor, int numDocs) {
|
||||
MultiGetRequest multiGetRequest = new MultiGetRequest();
|
||||
for (int i = 1; i <= numDocs; i++) {
|
||||
processor.add(new IndexRequest(INDEX_NAME, "_doc", Integer.toString(i))
|
||||
processor.add(new IndexRequest(INDEX_NAME).id(Integer.toString(i))
|
||||
.source(XContentType.JSON, "field", randomRealisticUnicodeOfCodepointLengthBetween(1, 30)));
|
||||
multiGetRequest.add(INDEX_NAME, Integer.toString(i));
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.elasticsearch.action.bulk.BulkResponse;
|
|||
import org.elasticsearch.action.index.IndexRequest;
|
||||
import org.elasticsearch.action.search.SearchRequest;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -140,20 +141,19 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
|
|||
}
|
||||
|
||||
public void testGlobalType() throws IOException {
|
||||
BulkRequest request = new BulkRequest(null, "_doc");
|
||||
BulkRequest request = new BulkRequest(null, "global_type");
|
||||
request.add(new IndexRequest("index").id("1")
|
||||
.source(XContentType.JSON, "field", "bulk1"));
|
||||
request.add(new IndexRequest("index").id("2")
|
||||
.source(XContentType.JSON, "field", "bulk2"));
|
||||
|
||||
bulk(request);
|
||||
bulkWithTypes(request);
|
||||
|
||||
Iterable<SearchHit> hits = searchAll("index");
|
||||
assertThat(hits, everyItem(hasType("_doc")));
|
||||
assertThat(hits, everyItem(hasType("global_type")));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/pull/36549")
|
||||
public void testTypeGlobalAndPerRequest() throws IOException {
|
||||
BulkRequest request = new BulkRequest(null, "global_type");
|
||||
request.add(new IndexRequest("index1", "local_type", "1")
|
||||
|
@ -161,7 +161,7 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
|
|||
request.add(new IndexRequest("index2").id("2") // will take global type
|
||||
.source(XContentType.JSON, "field", "bulk2"));
|
||||
|
||||
bulk(request);
|
||||
bulkWithTypes(request);
|
||||
|
||||
Iterable<SearchHit> hits = searchAll("index1", "index2");
|
||||
assertThat(hits, containsInAnyOrder(
|
||||
|
@ -174,7 +174,7 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
|
|||
@SuppressWarnings("unchecked")
|
||||
public void testGlobalRouting() throws IOException {
|
||||
createIndexWithMultipleShards("index");
|
||||
BulkRequest request = new BulkRequest(null, null);
|
||||
BulkRequest request = new BulkRequest(null);
|
||||
request.add(new IndexRequest("index").id("1")
|
||||
.source(XContentType.JSON, "field", "bulk1"));
|
||||
request.add(new IndexRequest("index").id("2")
|
||||
|
@ -191,7 +191,7 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void testMixLocalAndGlobalRouting() throws IOException {
|
||||
BulkRequest request = new BulkRequest(null, null);
|
||||
BulkRequest request = new BulkRequest(null);
|
||||
request.routing("globalRouting");
|
||||
request.add(new IndexRequest("index").id("1")
|
||||
.source(XContentType.JSON, "field", "bulk1"));
|
||||
|
@ -204,12 +204,32 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
|
|||
Iterable<SearchHit> hits = searchAll(new SearchRequest("index").routing("globalRouting", "localRouting"));
|
||||
assertThat(hits, containsInAnyOrder(hasId("1"), hasId("2")));
|
||||
}
|
||||
|
||||
public void testGlobalIndexNoTypes() throws IOException {
|
||||
BulkRequest request = new BulkRequest("global_index");
|
||||
request.add(new IndexRequest().id("1")
|
||||
.source(XContentType.JSON, "field", "bulk1"));
|
||||
request.add(new IndexRequest().id("2")
|
||||
.source(XContentType.JSON, "field", "bulk2"));
|
||||
|
||||
private BulkResponse bulk(BulkRequest request) throws IOException {
|
||||
BulkResponse bulkResponse = execute(request, highLevelClient()::bulk, highLevelClient()::bulkAsync);
|
||||
bulk(request);
|
||||
|
||||
Iterable<SearchHit> hits = searchAll("global_index");
|
||||
assertThat(hits, everyItem(hasIndex("global_index")));
|
||||
}
|
||||
|
||||
private BulkResponse bulkWithTypes(BulkRequest request) throws IOException {
|
||||
BulkResponse bulkResponse = execute(request, highLevelClient()::bulk, highLevelClient()::bulkAsync,
|
||||
expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
assertFalse(bulkResponse.hasFailures());
|
||||
return bulkResponse;
|
||||
}
|
||||
|
||||
private BulkResponse bulk(BulkRequest request) throws IOException {
|
||||
BulkResponse bulkResponse = execute(request, highLevelClient()::bulk, highLevelClient()::bulkAsync, RequestOptions.DEFAULT);
|
||||
assertFalse(bulkResponse.hasFailures());
|
||||
return bulkResponse;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static <T> Function<SearchHit, T> fieldFromSource(String fieldName) {
|
||||
|
|
|
@ -65,6 +65,7 @@ import org.elasticsearch.index.reindex.DeleteByQueryRequest;
|
|||
import org.elasticsearch.index.reindex.UpdateByQueryAction;
|
||||
import org.elasticsearch.index.reindex.UpdateByQueryRequest;
|
||||
import org.elasticsearch.rest.RestStatus;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.rest.action.document.RestDeleteAction;
|
||||
import org.elasticsearch.rest.action.document.RestGetAction;
|
||||
import org.elasticsearch.rest.action.document.RestMultiGetAction;
|
||||
|
@ -449,7 +450,7 @@ public class CrudIT extends ESRestHighLevelClientTestCase {
|
|||
bulk.add(new IndexRequest("index", "type", "id2")
|
||||
.source("{\"field\":\"value2\"}", XContentType.JSON));
|
||||
|
||||
highLevelClient().bulk(bulk, RequestOptions.DEFAULT);
|
||||
highLevelClient().bulk(bulk, expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
MultiGetRequest multiGetRequest = new MultiGetRequest();
|
||||
multiGetRequest.add("index", "id1");
|
||||
multiGetRequest.add("index", "type", "id2");
|
||||
|
@ -819,7 +820,7 @@ public class CrudIT extends ESRestHighLevelClientTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
BulkResponse bulkResponse = execute(bulkRequest, highLevelClient()::bulk, highLevelClient()::bulkAsync);
|
||||
BulkResponse bulkResponse = execute(bulkRequest, highLevelClient()::bulk, highLevelClient()::bulkAsync, RequestOptions.DEFAULT);
|
||||
assertEquals(RestStatus.OK, bulkResponse.status());
|
||||
assertTrue(bulkResponse.getTook().getMillis() > 0);
|
||||
assertEquals(nbItems, bulkResponse.getItems().length);
|
||||
|
@ -1080,7 +1081,8 @@ public class CrudIT extends ESRestHighLevelClientTestCase {
|
|||
};
|
||||
|
||||
try (BulkProcessor processor = BulkProcessor.builder(
|
||||
(request, bulkListener) -> highLevelClient().bulkAsync(request, RequestOptions.DEFAULT, bulkListener), listener)
|
||||
(request, bulkListener) -> highLevelClient().bulkAsync(request,
|
||||
RequestOptions.DEFAULT, bulkListener), listener)
|
||||
.setConcurrentRequests(0)
|
||||
.setBulkSize(new ByteSizeValue(5, ByteSizeUnit.GB))
|
||||
.setBulkActions(nbItems + 1)
|
||||
|
|
|
@ -65,7 +65,6 @@ import static org.hamcrest.Matchers.lessThanOrEqualTo;
|
|||
public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
||||
|
||||
private static final String RESULTS_INDEX = ".ml-anomalies-shared";
|
||||
private static final String DOC = "doc";
|
||||
|
||||
private static final String JOB_ID = "get-results-it-job";
|
||||
|
||||
|
@ -100,7 +99,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
}
|
||||
|
||||
private void addBucketIndexRequest(long timestamp, boolean isInterim, BulkRequest bulkRequest) {
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
double bucketScore = randomDoubleBetween(0.0, 100.0, true);
|
||||
bucketStats.report(bucketScore);
|
||||
indexRequest.source("{\"job_id\":\"" + JOB_ID + "\", \"result_type\":\"bucket\", \"timestamp\": " + timestamp + "," +
|
||||
|
@ -122,7 +121,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
}
|
||||
|
||||
private void addRecordIndexRequest(long timestamp, boolean isInterim, BulkRequest bulkRequest) {
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
double recordScore = randomDoubleBetween(0.0, 100.0, true);
|
||||
recordStats.report(recordScore);
|
||||
double p = randomDoubleBetween(0.0, 0.05, false);
|
||||
|
@ -133,7 +132,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
}
|
||||
|
||||
private void addCategoryIndexRequest(long categoryId, String categoryName, BulkRequest bulkRequest) {
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
indexRequest.source("{\"job_id\":\"" + JOB_ID + "\", \"category_id\": " + categoryId + ", \"terms\": \"" +
|
||||
categoryName + "\", \"regex\": \".*?" + categoryName + ".*\", \"max_matching_length\": 3, \"examples\": [\"" +
|
||||
categoryName + "\"]}", XContentType.JSON);
|
||||
|
@ -151,7 +150,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
|
||||
private void addModelSnapshotIndexRequests(BulkRequest bulkRequest) {
|
||||
{
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
indexRequest.source("{\"job_id\":\"" + JOB_ID + "\", \"timestamp\":1541587919000, " +
|
||||
"\"description\":\"State persisted due to job close at 2018-11-07T10:51:59+0000\", \"snapshot_id\":\"1541587919\"," +
|
||||
"\"snapshot_doc_count\":1, \"model_size_stats\":{\"job_id\":\"" + JOB_ID + "\", \"result_type\":\"model_size_stats\"," +
|
||||
|
@ -162,7 +161,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
bulkRequest.add(indexRequest);
|
||||
}
|
||||
{
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
indexRequest.source("{\"job_id\":\"" + JOB_ID + "\", \"timestamp\":1541588919000, " +
|
||||
"\"description\":\"State persisted due to job close at 2018-11-07T11:08:39+0000\", \"snapshot_id\":\"1541588919\"," +
|
||||
"\"snapshot_doc_count\":1, \"model_size_stats\":{\"job_id\":\"" + JOB_ID + "\", \"result_type\":\"model_size_stats\"," +
|
||||
|
@ -173,7 +172,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
bulkRequest.add(indexRequest);
|
||||
}
|
||||
{
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
indexRequest.source("{\"job_id\":\"" + JOB_ID + "\", \"timestamp\":1541589919000, " +
|
||||
"\"description\":\"State persisted due to job close at 2018-11-07T11:25:19+0000\", \"snapshot_id\":\"1541589919\"," +
|
||||
"\"snapshot_doc_count\":1, \"model_size_stats\":{\"job_id\":\"" + JOB_ID + "\", \"result_type\":\"model_size_stats\"," +
|
||||
|
@ -752,7 +751,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
|
||||
for (Bucket bucket : firstBuckets) {
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
indexRequest.source("{\"job_id\":\"" + anotherJobId + "\", \"result_type\":\"bucket\", \"timestamp\": " +
|
||||
bucket.getTimestamp().getTime() + "," + "\"bucket_span\": 3600,\"is_interim\": " + bucket.isInterim()
|
||||
+ ", \"anomaly_score\": " + String.valueOf(bucket.getAnomalyScore() + 10.0) + "}", XContentType.JSON);
|
||||
|
@ -923,7 +922,7 @@ public class MachineLearningGetResultsIT extends ESRestHighLevelClientTestCase {
|
|||
// Last one score is higher
|
||||
double score = isLast ? 90.0 : 42.0;
|
||||
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX, DOC);
|
||||
IndexRequest indexRequest = new IndexRequest(RESULTS_INDEX);
|
||||
indexRequest.source("{\"job_id\":\"" + JOB_ID + "\", \"result_type\":\"influencer\", \"timestamp\": " +
|
||||
timestamp + "," + "\"bucket_span\": 3600,\"is_interim\": " + isInterim + ", \"influencer_score\": " + score + ", " +
|
||||
"\"influencer_field_name\":\"my_influencer\", \"influencer_field_value\": \"inf_1\", \"probability\":"
|
||||
|
|
|
@ -538,7 +538,6 @@ public class MachineLearningIT extends ESRestHighLevelClientTestCase {
|
|||
while(pastCopy < now) {
|
||||
IndexRequest doc = new IndexRequest();
|
||||
doc.index(indexName);
|
||||
doc.type("_doc");
|
||||
doc.id("id" + i);
|
||||
doc.source("{\"total\":" +randomInt(1000) + ",\"timestamp\":"+ pastCopy +"}", XContentType.JSON);
|
||||
bulk.add(doc);
|
||||
|
@ -747,7 +746,6 @@ public class MachineLearningIT extends ESRestHighLevelClientTestCase {
|
|||
Integer total = randomInt(1000);
|
||||
IndexRequest doc = new IndexRequest();
|
||||
doc.index(indexName);
|
||||
doc.type("_doc");
|
||||
doc.id("id" + i);
|
||||
doc.source("{\"total\":" + total + ",\"timestamp\":"+ thePast +"}", XContentType.JSON);
|
||||
bulk.add(doc);
|
||||
|
@ -807,7 +805,7 @@ public class MachineLearningIT extends ESRestHighLevelClientTestCase {
|
|||
long timestamp = nowMillis - TimeValue.timeValueHours(totalBuckets - bucket).getMillis();
|
||||
int bucketRate = bucket == anomalousBucket ? anomalousRate : normalRate;
|
||||
for (int point = 0; point < bucketRate; point++) {
|
||||
IndexRequest indexRequest = new IndexRequest(indexId, "_doc");
|
||||
IndexRequest indexRequest = new IndexRequest(indexId);
|
||||
indexRequest.source(XContentType.JSON, "timestamp", timestamp, "total", randomInt(1000));
|
||||
bulk.add(indexRequest);
|
||||
}
|
||||
|
@ -817,7 +815,7 @@ public class MachineLearningIT extends ESRestHighLevelClientTestCase {
|
|||
{
|
||||
// Index a randomly named unused state document
|
||||
String docId = "non_existing_job_" + randomFrom("model_state_1234567#1", "quantiles", "categorizer_state#1");
|
||||
IndexRequest indexRequest = new IndexRequest(".ml-state", "_doc", docId);
|
||||
IndexRequest indexRequest = new IndexRequest(".ml-state").id(docId);
|
||||
indexRequest.source(Collections.emptyMap(), XContentType.JSON);
|
||||
indexRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
|
||||
highLevelClient().index(indexRequest, RequestOptions.DEFAULT);
|
||||
|
|
|
@ -860,7 +860,6 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
int nbItems = randomIntBetween(10, 100);
|
||||
for (int i = 0; i < nbItems; i++) {
|
||||
String index = randomAlphaOfLength(5);
|
||||
String type = randomAlphaOfLength(5);
|
||||
String id = randomAlphaOfLength(5);
|
||||
|
||||
BytesReference source = RandomObjects.randomSource(random(), xContentType);
|
||||
|
@ -868,16 +867,16 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
|
||||
DocWriteRequest<?> docWriteRequest;
|
||||
if (opType == DocWriteRequest.OpType.INDEX) {
|
||||
IndexRequest indexRequest = new IndexRequest(index, type, id).source(source, xContentType);
|
||||
IndexRequest indexRequest = new IndexRequest(index).id(id).source(source, xContentType);
|
||||
docWriteRequest = indexRequest;
|
||||
if (randomBoolean()) {
|
||||
indexRequest.setPipeline(randomAlphaOfLength(5));
|
||||
}
|
||||
} else if (opType == DocWriteRequest.OpType.CREATE) {
|
||||
IndexRequest createRequest = new IndexRequest(index, type, id).source(source, xContentType).create(true);
|
||||
IndexRequest createRequest = new IndexRequest(index).id(id).source(source, xContentType).create(true);
|
||||
docWriteRequest = createRequest;
|
||||
} else if (opType == DocWriteRequest.OpType.UPDATE) {
|
||||
final UpdateRequest updateRequest = new UpdateRequest(index, type, id).doc(new IndexRequest().source(source, xContentType));
|
||||
final UpdateRequest updateRequest = new UpdateRequest(index, id).doc(new IndexRequest().source(source, xContentType));
|
||||
docWriteRequest = updateRequest;
|
||||
if (randomBoolean()) {
|
||||
updateRequest.retryOnConflict(randomIntBetween(1, 5));
|
||||
|
@ -886,7 +885,7 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
randomizeFetchSourceContextParams(updateRequest::fetchSource, new HashMap<>());
|
||||
}
|
||||
} else if (opType == DocWriteRequest.OpType.DELETE) {
|
||||
docWriteRequest = new DeleteRequest(index, type, id);
|
||||
docWriteRequest = new DeleteRequest(index, id);
|
||||
} else {
|
||||
throw new UnsupportedOperationException("optype [" + opType + "] not supported");
|
||||
}
|
||||
|
@ -954,9 +953,9 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
public void testBulkWithDifferentContentTypes() throws IOException {
|
||||
{
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "0"));
|
||||
bulkRequest.add(new UpdateRequest("index", "type", "1").script(mockScript("test")));
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "2"));
|
||||
bulkRequest.add(new DeleteRequest("index", "0"));
|
||||
bulkRequest.add(new UpdateRequest("index", "1").script(mockScript("test")));
|
||||
bulkRequest.add(new DeleteRequest("index", "2"));
|
||||
|
||||
Request request = RequestConverters.bulk(bulkRequest);
|
||||
assertEquals(XContentType.JSON.mediaTypeWithoutParameters(), request.getEntity().getContentType().getValue());
|
||||
|
@ -964,16 +963,16 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
{
|
||||
XContentType xContentType = randomFrom(XContentType.JSON, XContentType.SMILE);
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "0"));
|
||||
bulkRequest.add(new IndexRequest("index", "type", "0").source(singletonMap("field", "value"), xContentType));
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "2"));
|
||||
bulkRequest.add(new DeleteRequest("index", "0"));
|
||||
bulkRequest.add(new IndexRequest("index").id("0").source(singletonMap("field", "value"), xContentType));
|
||||
bulkRequest.add(new DeleteRequest("index", "2"));
|
||||
|
||||
Request request = RequestConverters.bulk(bulkRequest);
|
||||
assertEquals(xContentType.mediaTypeWithoutParameters(), request.getEntity().getContentType().getValue());
|
||||
}
|
||||
{
|
||||
XContentType xContentType = randomFrom(XContentType.JSON, XContentType.SMILE);
|
||||
UpdateRequest updateRequest = new UpdateRequest("index", "type", "0");
|
||||
UpdateRequest updateRequest = new UpdateRequest("index", "0");
|
||||
if (randomBoolean()) {
|
||||
updateRequest.doc(new IndexRequest().source(singletonMap("field", "value"), xContentType));
|
||||
} else {
|
||||
|
@ -985,8 +984,8 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
}
|
||||
{
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(new IndexRequest("index", "type", "0").source(singletonMap("field", "value"), XContentType.SMILE));
|
||||
bulkRequest.add(new IndexRequest("index", "type", "1").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new IndexRequest("index").id("0").source(singletonMap("field", "value"), XContentType.SMILE));
|
||||
bulkRequest.add(new IndexRequest("index").id("1").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> RequestConverters.bulk(bulkRequest));
|
||||
assertEquals(
|
||||
"Mismatching content-type found for request with content-type [JSON], " + "previous requests have content-type [SMILE]",
|
||||
|
@ -994,9 +993,9 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
}
|
||||
{
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(new IndexRequest("index", "type", "0").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new IndexRequest("index", "type", "1").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new UpdateRequest("index", "type", "2")
|
||||
bulkRequest.add(new IndexRequest("index").id("0").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new IndexRequest("index").id("1").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new UpdateRequest("index", "2")
|
||||
.doc(new IndexRequest().source(singletonMap("field", "value"), XContentType.JSON))
|
||||
.upsert(new IndexRequest().source(singletonMap("field", "value"), XContentType.SMILE)));
|
||||
IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> RequestConverters.bulk(bulkRequest));
|
||||
|
@ -1007,12 +1006,12 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
{
|
||||
XContentType xContentType = randomFrom(XContentType.CBOR, XContentType.YAML);
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "0"));
|
||||
bulkRequest.add(new IndexRequest("index", "type", "1").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "2"));
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "3"));
|
||||
bulkRequest.add(new IndexRequest("index", "type", "4").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new IndexRequest("index", "type", "1").source(singletonMap("field", "value"), xContentType));
|
||||
bulkRequest.add(new DeleteRequest("index", "0"));
|
||||
bulkRequest.add(new IndexRequest("index").id("1").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new DeleteRequest("index", "2"));
|
||||
bulkRequest.add(new DeleteRequest("index", "3"));
|
||||
bulkRequest.add(new IndexRequest("index").id("4").source(singletonMap("field", "value"), XContentType.JSON));
|
||||
bulkRequest.add(new IndexRequest("index").id("1").source(singletonMap("field", "value"), xContentType));
|
||||
IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> RequestConverters.bulk(bulkRequest));
|
||||
assertEquals("Unsupported content-type found for request with content-type [" + xContentType
|
||||
+ "], only JSON and SMILE are supported", exception.getMessage());
|
||||
|
@ -1022,11 +1021,11 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
public void testGlobalPipelineOnBulkRequest() throws IOException {
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.pipeline("xyz");
|
||||
bulkRequest.add(new IndexRequest("test", "doc", "11")
|
||||
bulkRequest.add(new IndexRequest("test").id("11")
|
||||
.source(XContentType.JSON, "field", "bulk1"));
|
||||
bulkRequest.add(new IndexRequest("test", "doc", "12")
|
||||
bulkRequest.add(new IndexRequest("test").id("12")
|
||||
.source(XContentType.JSON, "field", "bulk2"));
|
||||
bulkRequest.add(new IndexRequest("test", "doc", "13")
|
||||
bulkRequest.add(new IndexRequest("test").id("13")
|
||||
.source(XContentType.JSON, "field", "bulk3"));
|
||||
|
||||
Request request = RequestConverters.bulk(bulkRequest);
|
||||
|
|
|
@ -114,7 +114,7 @@ public class RollupIT extends ESRestHighLevelClientTestCase {
|
|||
for (int second = 0; second < 60; second = second + 10) {
|
||||
final int value = randomIntBetween(0, 100);
|
||||
|
||||
final IndexRequest indexRequest = new IndexRequest("docs", "doc");
|
||||
final IndexRequest indexRequest = new IndexRequest("docs");
|
||||
indexRequest.source(jsonBuilder()
|
||||
.startObject()
|
||||
.field("value", value)
|
||||
|
@ -293,7 +293,7 @@ public class RollupIT extends ESRestHighLevelClientTestCase {
|
|||
for (int second = 0; second < 60; second = second + 10) {
|
||||
final int value = randomIntBetween(0, 100);
|
||||
|
||||
final IndexRequest indexRequest = new IndexRequest("docs", "doc");
|
||||
final IndexRequest indexRequest = new IndexRequest("docs");
|
||||
indexRequest.source(jsonBuilder()
|
||||
.startObject()
|
||||
.field("value", value)
|
||||
|
@ -405,7 +405,7 @@ public class RollupIT extends ESRestHighLevelClientTestCase {
|
|||
for (int second = 0; second < 60; second = second + 10) {
|
||||
final int value = randomIntBetween(0, 100);
|
||||
|
||||
final IndexRequest indexRequest = new IndexRequest("docs", "doc");
|
||||
final IndexRequest indexRequest = new IndexRequest("docs");
|
||||
indexRequest.source(jsonBuilder()
|
||||
.startObject()
|
||||
.field("value", value)
|
||||
|
|
|
@ -701,7 +701,7 @@ public class CRUDDocumentationIT extends ESRestHighLevelClientTestCase {
|
|||
request.add(new IndexRequest("posts").id("4") // <3>
|
||||
.source(XContentType.JSON,"field", "baz"));
|
||||
// end::bulk-request-with-mixed-operations
|
||||
BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
|
||||
BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
|
||||
assertSame(RestStatus.OK, bulkResponse.status());
|
||||
assertFalse(bulkResponse.hasFailures());
|
||||
|
||||
|
@ -758,7 +758,7 @@ public class CRUDDocumentationIT extends ESRestHighLevelClientTestCase {
|
|||
// end::bulk-request-routing
|
||||
|
||||
// tag::bulk-request-index-type
|
||||
BulkRequest defaulted = new BulkRequest("posts","_doc"); // <1>
|
||||
BulkRequest defaulted = new BulkRequest("posts"); // <1>
|
||||
// end::bulk-request-index-type
|
||||
|
||||
// tag::bulk-execute-listener
|
||||
|
|
|
@ -89,7 +89,7 @@ public class RollupDocumentationIT extends ESRestHighLevelClientTestCase {
|
|||
final BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
|
||||
for (int i = 0; i < 50; i++) {
|
||||
final IndexRequest indexRequest = new IndexRequest("docs", "doc");
|
||||
final IndexRequest indexRequest = new IndexRequest("docs");
|
||||
indexRequest.source(jsonBuilder()
|
||||
.startObject()
|
||||
.field("timestamp", String.format(Locale.ROOT, "2018-01-01T00:%02d:00Z", i))
|
||||
|
@ -103,7 +103,7 @@ public class RollupDocumentationIT extends ESRestHighLevelClientTestCase {
|
|||
.endObject());
|
||||
bulkRequest.add(indexRequest);
|
||||
}
|
||||
BulkResponse bulkResponse = highLevelClient().bulk(bulkRequest, RequestOptions.DEFAULT);
|
||||
BulkResponse bulkResponse = highLevelClient().bulk(bulkRequest, RequestOptions.DEFAULT);
|
||||
assertEquals(RestStatus.OK, bulkResponse.status());
|
||||
assertFalse(bulkResponse.hasFailures());
|
||||
|
||||
|
|
|
@ -86,8 +86,8 @@ include-tagged::{doc-tests-file}[{api}-request-routing]
|
|||
--------------------------------------------------
|
||||
include-tagged::{doc-tests-file}[{api}-request-index-type]
|
||||
--------------------------------------------------
|
||||
<1> A bulk request with global index and type used on all sub requests, unless overridden on a sub request.
|
||||
Both parameters are @Nullable and can only be set during +{request}+ creation.
|
||||
<1> A bulk request with a global index used on all sub requests, unless overridden on a sub request.
|
||||
This parameter is @Nullable and can only be set during +{request}+ creation.
|
||||
|
||||
include::../execution.asciidoc[]
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ public class ManyDocumentsIT extends ESRestTestCase {
|
|||
bulk.append("{\"index\":{}}\n");
|
||||
bulk.append("{\"test\":\"test\"}\n");
|
||||
}
|
||||
Request request = new Request("POST", "/test/test/_bulk");
|
||||
Request request = new Request("POST", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
request.setJsonEntity(bulk.toString());
|
||||
client().performRequest(request);
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.elasticsearch.common.settings.Settings;
|
|||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.json.JsonXContent;
|
||||
import org.elasticsearch.common.xcontent.support.XContentMapValues;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.rest.action.document.RestGetAction;
|
||||
import org.elasticsearch.rest.action.document.RestUpdateAction;
|
||||
import org.elasticsearch.rest.action.search.RestExplainAction;
|
||||
|
@ -495,6 +496,7 @@ public class FullClusterRestartIT extends AbstractFullClusterRestartTestCase {
|
|||
Request bulkRequest = new Request("POST", "/" + index + "_write/doc/_bulk");
|
||||
bulkRequest.setJsonEntity(bulk.toString());
|
||||
bulkRequest.addParameter("refresh", "");
|
||||
bulkRequest.setOptions(expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
assertThat(EntityUtils.toString(client().performRequest(bulkRequest).getEntity()), containsString("\"errors\":false"));
|
||||
|
||||
if (isRunningAgainstOldCluster()) {
|
||||
|
@ -1070,6 +1072,7 @@ public class FullClusterRestartIT extends AbstractFullClusterRestartTestCase {
|
|||
Request writeToRestoredRequest = new Request("POST", "/restored_" + index + "/doc/_bulk");
|
||||
writeToRestoredRequest.addParameter("refresh", "true");
|
||||
writeToRestoredRequest.setJsonEntity(bulk.toString());
|
||||
writeToRestoredRequest.setOptions(expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
assertThat(EntityUtils.toString(client().performRequest(writeToRestoredRequest).getEntity()), containsString("\"errors\":false"));
|
||||
|
||||
// And count to make sure the add worked
|
||||
|
|
|
@ -22,6 +22,7 @@ import org.apache.http.util.EntityUtils;
|
|||
import org.elasticsearch.common.Booleans;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.client.Request;
|
||||
import org.elasticsearch.client.Response;
|
||||
|
@ -152,6 +153,7 @@ public class IndexingIT extends AbstractRollingTestCase {
|
|||
}
|
||||
Request bulk = new Request("POST", "/_bulk");
|
||||
bulk.addParameter("refresh", "true");
|
||||
bulk.setOptions(expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
bulk.setJsonEntity(b.toString());
|
||||
client().performRequest(bulk);
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.elasticsearch.upgrades;
|
|||
import org.apache.http.util.EntityUtils;
|
||||
import org.junit.Before;
|
||||
import org.elasticsearch.client.Request;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -59,6 +60,7 @@ public class XPackIT extends AbstractRollingTestCase {
|
|||
+ "{\"index\":{}}\n"
|
||||
+ "{\"f\": \"2\"}\n");
|
||||
bulk.addParameter("refresh", "true");
|
||||
bulk.setOptions(expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
client().performRequest(bulk);
|
||||
|
||||
Request sql = new Request("POST", "/_sql");
|
||||
|
|
|
@ -60,6 +60,15 @@ public interface DocWriteRequest<T> extends IndicesRequest {
|
|||
*/
|
||||
String type();
|
||||
|
||||
/**
|
||||
* Set the default type supplied to a bulk
|
||||
* request if this individual request's type is null
|
||||
* or empty
|
||||
* @return the Request
|
||||
*/
|
||||
T defaultTypeIfNull(String defaultType);
|
||||
|
||||
|
||||
/**
|
||||
* Get the id of the document for this request
|
||||
* @return the id
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package org.elasticsearch.action.bulk;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.elasticsearch.action.ActionRequest;
|
||||
import org.elasticsearch.action.ActionRequestValidationException;
|
||||
import org.elasticsearch.action.CompositeIndicesRequest;
|
||||
|
@ -36,6 +37,7 @@ import org.elasticsearch.common.bytes.BytesArray;
|
|||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.logging.DeprecationLogger;
|
||||
import org.elasticsearch.common.lucene.uid.Versions;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.common.xcontent.LoggingDeprecationHandler;
|
||||
|
@ -45,6 +47,8 @@ import org.elasticsearch.common.xcontent.XContentParser;
|
|||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.index.VersionType;
|
||||
import org.elasticsearch.index.seqno.SequenceNumbers;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -68,7 +72,7 @@ import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_PRIMARY_T
|
|||
public class BulkRequest extends ActionRequest implements CompositeIndicesRequest, WriteRequest<BulkRequest> {
|
||||
|
||||
private static final int REQUEST_OVERHEAD = 50;
|
||||
|
||||
private static final DeprecationLogger deprecationLogger = new DeprecationLogger(LogManager.getLogger(BulkRequest.class));
|
||||
private static final ParseField INDEX = new ParseField("_index");
|
||||
private static final ParseField TYPE = new ParseField("_type");
|
||||
private static final ParseField ID = new ParseField("_id");
|
||||
|
@ -104,6 +108,14 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
|
|||
public BulkRequest() {
|
||||
}
|
||||
|
||||
public BulkRequest(@Nullable String globalIndex) {
|
||||
this.globalIndex = globalIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Types are in the process of being removed. Use {@link #BulkRequest(String)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public BulkRequest(@Nullable String globalIndex, @Nullable String globalType) {
|
||||
this.globalIndex = globalIndex;
|
||||
this.globalType = globalType;
|
||||
|
@ -280,28 +292,71 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
|
|||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
* @deprecated use {@link #add(byte[], int, int, String, XContentType)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public BulkRequest add(byte[] data, int from, int length, @Nullable String defaultIndex, @Nullable String defaultType,
|
||||
XContentType xContentType) throws IOException {
|
||||
return add(new BytesArray(data, from, length), defaultIndex, defaultType, xContentType);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
*/
|
||||
public BulkRequest add(byte[] data, int from, int length, @Nullable String defaultIndex,
|
||||
XContentType xContentType) throws IOException {
|
||||
return add(new BytesArray(data, from, length), defaultIndex, MapperService.SINGLE_MAPPING_NAME, xContentType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
* @deprecated use {@link #add(BytesReference, String, XContentType)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Nullable String defaultType,
|
||||
XContentType xContentType) throws IOException {
|
||||
return add(data, defaultIndex, defaultType, null, null, null, null, true, xContentType);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
*/
|
||||
public BulkRequest add(BytesReference data, @Nullable String defaultIndex,
|
||||
XContentType xContentType) throws IOException {
|
||||
return add(data, defaultIndex, MapperService.SINGLE_MAPPING_NAME, null, null, null, null, true, xContentType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
* @deprecated use {@link #add(BytesReference, String, boolean, XContentType)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Nullable String defaultType, boolean allowExplicitIndex,
|
||||
XContentType xContentType) throws IOException {
|
||||
return add(data, defaultIndex, defaultType, null, null, null, null, allowExplicitIndex, xContentType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
*/
|
||||
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, boolean allowExplicitIndex,
|
||||
XContentType xContentType) throws IOException {
|
||||
return add(data, defaultIndex, MapperService.SINGLE_MAPPING_NAME, null, null, null, null, allowExplicitIndex, xContentType);
|
||||
}
|
||||
|
||||
public BulkRequest add(BytesReference data, @Nullable String defaultIndex,
|
||||
@Nullable String defaultRouting, @Nullable FetchSourceContext defaultFetchSourceContext,
|
||||
@Nullable String defaultPipeline, @Nullable Object payload, boolean allowExplicitIndex,
|
||||
XContentType xContentType) throws IOException {
|
||||
return add(data, defaultIndex, MapperService.SINGLE_MAPPING_NAME, defaultRouting, defaultFetchSourceContext,
|
||||
defaultPipeline, payload, allowExplicitIndex, xContentType);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #add(BytesReference, String, String, FetchSourceContext, String, Object, boolean, XContentType)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Nullable String defaultType,
|
||||
@Nullable String defaultRouting, @Nullable FetchSourceContext defaultFetchSourceContext,
|
||||
@Nullable String defaultPipeline, @Nullable Object payload, boolean allowExplicitIndex,
|
||||
|
@ -371,7 +426,8 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
|
|||
throw new IllegalArgumentException("explicit index in bulk is not allowed");
|
||||
}
|
||||
index = parser.text();
|
||||
} else if (TYPE.match(currentFieldName, parser.getDeprecationHandler())) {
|
||||
} else if (TYPE.match(currentFieldName, parser.getDeprecationHandler())) {
|
||||
deprecationLogger.deprecatedAndMaybeLog("bulk_with_types", RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
type = parser.text();
|
||||
} else if (ID.match(currentFieldName, parser.getDeprecationHandler())) {
|
||||
id = parser.text();
|
||||
|
@ -625,7 +681,9 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
|
|||
|
||||
private void applyGlobalMandatoryParameters(DocWriteRequest<?> request) {
|
||||
request.index(valueOrDefault(request.index(), globalIndex));
|
||||
request.type(valueOrDefault(request.type(), globalType));
|
||||
if (Strings.isNullOrEmpty(globalType) == false && MapperService.SINGLE_MAPPING_NAME.equals(globalType) == false) {
|
||||
request.defaultTypeIfNull(globalType);
|
||||
}
|
||||
}
|
||||
|
||||
private static String valueOrDefault(String value, String globalDefault) {
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.elasticsearch.client.ElasticsearchClient;
|
|||
import org.elasticsearch.common.Nullable;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
|
||||
/**
|
||||
* A bulk request holds an ordered {@link IndexRequest}s and {@link DeleteRequest}s and allows to executes
|
||||
|
@ -41,10 +42,18 @@ import org.elasticsearch.common.xcontent.XContentType;
|
|||
public class BulkRequestBuilder extends ActionRequestBuilder<BulkRequest, BulkResponse>
|
||||
implements WriteRequestBuilder<BulkRequestBuilder> {
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #BulkRequestBuilder(ElasticsearchClient, BulkAction, String)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public BulkRequestBuilder(ElasticsearchClient client, BulkAction action, @Nullable String globalIndex, @Nullable String globalType) {
|
||||
super(client, action, new BulkRequest(globalIndex, globalType));
|
||||
}
|
||||
|
||||
public BulkRequestBuilder(ElasticsearchClient client, BulkAction action, @Nullable String globalIndex) {
|
||||
super(client, action, new BulkRequest(globalIndex));
|
||||
}
|
||||
|
||||
public BulkRequestBuilder(ElasticsearchClient client, BulkAction action) {
|
||||
super(client, action, new BulkRequest());
|
||||
}
|
||||
|
@ -104,18 +113,29 @@ public class BulkRequestBuilder extends ActionRequestBuilder<BulkRequest, BulkRe
|
|||
* Adds a framed data in binary format
|
||||
*/
|
||||
public BulkRequestBuilder add(byte[] data, int from, int length, XContentType xContentType) throws Exception {
|
||||
request.add(data, from, length, null, null, xContentType);
|
||||
request.add(data, from, length, null, xContentType);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
* @deprecated use {@link #add(byte[], int, int, String, XContentType)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public BulkRequestBuilder add(byte[] data, int from, int length, @Nullable String defaultIndex, @Nullable String defaultType,
|
||||
XContentType xContentType) throws Exception {
|
||||
request.add(data, from, length, defaultIndex, defaultType, xContentType);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a framed data in binary format
|
||||
*/
|
||||
public BulkRequestBuilder add(byte[] data, int from, int length, @Nullable String defaultIndex, @Nullable String defaultType,
|
||||
public BulkRequestBuilder add(byte[] data, int from, int length, @Nullable String defaultIndex,
|
||||
XContentType xContentType) throws Exception {
|
||||
request.add(data, from, length, defaultIndex, defaultType, xContentType);
|
||||
request.add(data, from, length, defaultIndex, MapperService.SINGLE_MAPPING_NAME, xContentType);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the number of shard copies that must be active before proceeding with the write.
|
||||
|
|
|
@ -78,6 +78,7 @@ import java.util.Set;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.LongSupplier;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.Collections.emptyMap;
|
||||
|
@ -113,7 +114,7 @@ public class TransportBulkAction extends HandledTransportAction<BulkRequest, Bul
|
|||
TransportShardBulkAction shardBulkAction, NodeClient client,
|
||||
ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver,
|
||||
AutoCreateIndex autoCreateIndex, LongSupplier relativeTimeProvider) {
|
||||
super(BulkAction.NAME, transportService, actionFilters, BulkRequest::new);
|
||||
super(BulkAction.NAME, transportService, actionFilters, (Supplier<BulkRequest>) BulkRequest::new);
|
||||
Objects.requireNonNull(relativeTimeProvider);
|
||||
this.threadPool = threadPool;
|
||||
this.clusterService = clusterService;
|
||||
|
|
|
@ -53,7 +53,8 @@ import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO;
|
|||
public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
|
||||
implements DocWriteRequest<DeleteRequest>, CompositeIndicesRequest {
|
||||
|
||||
private String type = MapperService.SINGLE_MAPPING_NAME;
|
||||
// Set to null initially so we can know to override in bulk requests that have a default type.
|
||||
private String type;
|
||||
private String id;
|
||||
@Nullable
|
||||
private String routing;
|
||||
|
@ -103,7 +104,7 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
|
|||
@Override
|
||||
public ActionRequestValidationException validate() {
|
||||
ActionRequestValidationException validationException = super.validate();
|
||||
if (Strings.isEmpty(type)) {
|
||||
if (Strings.isEmpty(type())) {
|
||||
validationException = addValidationError("type is missing", validationException);
|
||||
}
|
||||
if (Strings.isEmpty(id)) {
|
||||
|
@ -142,6 +143,9 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
|
|||
@Deprecated
|
||||
@Override
|
||||
public String type() {
|
||||
if (type == null) {
|
||||
return MapperService.SINGLE_MAPPING_NAME;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
@ -156,6 +160,22 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
|
|||
this.type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the default type supplied to a bulk
|
||||
* request if this individual request's type is null
|
||||
* or empty
|
||||
*
|
||||
* @deprecated Types are in the process of being removed.
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public DeleteRequest defaultTypeIfNull(String defaultType) {
|
||||
if (Strings.isNullOrEmpty(type)) {
|
||||
type = defaultType;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The id of the document to delete.
|
||||
|
@ -295,7 +315,9 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
|
|||
@Override
|
||||
public void writeTo(StreamOutput out) throws IOException {
|
||||
super.writeTo(out);
|
||||
out.writeString(type);
|
||||
// A 7.x request allows null types but if deserialized in a 6.x node will cause nullpointer exceptions.
|
||||
// So we use the type accessor method here to make the type non-null (will default it to "_doc").
|
||||
out.writeString(type());
|
||||
out.writeString(id);
|
||||
out.writeOptionalString(routing());
|
||||
if (out.getVersion().before(Version.V_7_0_0)) {
|
||||
|
@ -316,7 +338,7 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "delete {[" + index + "][" + type + "][" + id + "]}";
|
||||
return "delete {[" + index + "][" + type() + "][" + id + "]}";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.elasticsearch.client.Requests;
|
|||
import org.elasticsearch.cluster.metadata.MappingMetaData;
|
||||
import org.elasticsearch.cluster.metadata.MetaData;
|
||||
import org.elasticsearch.common.Nullable;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.UUIDs;
|
||||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
|
@ -82,7 +83,8 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
|
|||
*/
|
||||
static final int MAX_SOURCE_LENGTH_IN_TOSTRING = 2048;
|
||||
|
||||
private String type = MapperService.SINGLE_MAPPING_NAME;
|
||||
// Set to null initially so we can know to override in bulk requests that have a default type.
|
||||
private String type;
|
||||
private String id;
|
||||
@Nullable
|
||||
private String routing;
|
||||
|
@ -152,12 +154,12 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
|
|||
@Override
|
||||
public ActionRequestValidationException validate() {
|
||||
ActionRequestValidationException validationException = super.validate();
|
||||
if (type == null) {
|
||||
validationException = addValidationError("type is missing", validationException);
|
||||
}
|
||||
if (source == null) {
|
||||
validationException = addValidationError("source is missing", validationException);
|
||||
}
|
||||
if (Strings.isEmpty(type())) {
|
||||
validationException = addValidationError("type is missing", validationException);
|
||||
}
|
||||
if (contentType == null) {
|
||||
validationException = addValidationError("content type is missing", validationException);
|
||||
}
|
||||
|
@ -239,6 +241,9 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
|
|||
@Deprecated
|
||||
@Override
|
||||
public String type() {
|
||||
if (type == null) {
|
||||
return MapperService.SINGLE_MAPPING_NAME;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
@ -253,6 +258,20 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the default type supplied to a bulk
|
||||
* request if this individual request's type is null
|
||||
* or empty
|
||||
* @deprecated Types are in the process of being removed.
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public IndexRequest defaultTypeIfNull(String defaultType) {
|
||||
if (Strings.isNullOrEmpty(type)) {
|
||||
type = defaultType;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* The id of the indexed document. If not set, will be automatically generated.
|
||||
*/
|
||||
|
@ -563,7 +582,7 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
|
|||
if (mappingMd != null) {
|
||||
// might as well check for routing here
|
||||
if (mappingMd.routing().required() && routing == null) {
|
||||
throw new RoutingMissingException(concreteIndex, type, id);
|
||||
throw new RoutingMissingException(concreteIndex, type(), id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -629,7 +648,9 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
|
|||
@Override
|
||||
public void writeTo(StreamOutput out) throws IOException {
|
||||
super.writeTo(out);
|
||||
out.writeOptionalString(type);
|
||||
// A 7.x request allows null types but if deserialized in a 6.x node will cause nullpointer exceptions.
|
||||
// So we use the type accessor method here to make the type non-null (will default it to "_doc").
|
||||
out.writeOptionalString(type());
|
||||
out.writeOptionalString(id);
|
||||
out.writeOptionalString(routing);
|
||||
if (out.getVersion().before(Version.V_7_0_0)) {
|
||||
|
@ -679,7 +700,7 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
|
|||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
return "index {[" + index + "][" + type + "][" + id + "], source[" + sSource + "]}";
|
||||
return "index {[" + index + "][" + type() + "][" + id + "], source[" + sSource + "]}";
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -91,7 +91,8 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
|
|||
ObjectParser.ValueType.OBJECT_ARRAY_BOOLEAN_OR_STRING);
|
||||
}
|
||||
|
||||
private String type = MapperService.SINGLE_MAPPING_NAME;
|
||||
// Set to null initially so we can know to override in bulk requests that have a default type.
|
||||
private String type;
|
||||
private String id;
|
||||
@Nullable
|
||||
private String routing;
|
||||
|
@ -146,7 +147,7 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
|
|||
if(upsertRequest != null && upsertRequest.version() != Versions.MATCH_ANY) {
|
||||
validationException = addValidationError("can't provide version in upsert request", validationException);
|
||||
}
|
||||
if (Strings.isEmpty(type)) {
|
||||
if (Strings.isEmpty(type())) {
|
||||
validationException = addValidationError("type is missing", validationException);
|
||||
}
|
||||
if (Strings.isEmpty(id)) {
|
||||
|
@ -189,6 +190,9 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
|
|||
@Deprecated
|
||||
@Override
|
||||
public String type() {
|
||||
if (type == null) {
|
||||
return MapperService.SINGLE_MAPPING_NAME;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
@ -203,6 +207,21 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the default type supplied to a bulk
|
||||
* request if this individual request's type is null
|
||||
* or empty
|
||||
* @deprecated Types are in the process of being removed.
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public UpdateRequest defaultTypeIfNull(String defaultType) {
|
||||
if (Strings.isNullOrEmpty(type)) {
|
||||
type = defaultType;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The id of the indexed document.
|
||||
*/
|
||||
|
@ -800,7 +819,9 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
|
|||
public void writeTo(StreamOutput out) throws IOException {
|
||||
super.writeTo(out);
|
||||
waitForActiveShards.writeTo(out);
|
||||
out.writeString(type);
|
||||
// A 7.x request allows null types but if deserialized in a 6.x node will cause nullpointer exceptions.
|
||||
// So we use the type accessor method here to make the type non-null (will default it to "_doc").
|
||||
out.writeString(type());
|
||||
out.writeString(id);
|
||||
out.writeOptionalString(routing);
|
||||
if (out.getVersion().before(Version.V_7_0_0)) {
|
||||
|
@ -887,7 +908,7 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
|
|||
public String toString() {
|
||||
StringBuilder res = new StringBuilder()
|
||||
.append("update {[").append(index)
|
||||
.append("][").append(type)
|
||||
.append("][").append(type())
|
||||
.append("][").append(id).append("]");
|
||||
res.append(", doc_as_upsert[").append(docAsUpsert).append("]");
|
||||
if (doc != null) {
|
||||
|
|
|
@ -19,17 +19,20 @@
|
|||
|
||||
package org.elasticsearch.rest.action.document;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.elasticsearch.action.bulk.BulkRequest;
|
||||
import org.elasticsearch.action.bulk.BulkShardRequest;
|
||||
import org.elasticsearch.action.support.ActiveShardCount;
|
||||
import org.elasticsearch.client.Requests;
|
||||
import org.elasticsearch.client.node.NodeClient;
|
||||
import org.elasticsearch.common.logging.DeprecationLogger;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.rest.BaseRestHandler;
|
||||
import org.elasticsearch.rest.RestController;
|
||||
import org.elasticsearch.rest.RestRequest;
|
||||
import org.elasticsearch.rest.action.RestStatusToXContentListener;
|
||||
import org.elasticsearch.rest.action.search.RestSearchAction;
|
||||
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -49,6 +52,9 @@ import static org.elasticsearch.rest.RestRequest.Method.PUT;
|
|||
public class RestBulkAction extends BaseRestHandler {
|
||||
|
||||
private final boolean allowExplicitIndex;
|
||||
private static final DeprecationLogger deprecationLogger = new DeprecationLogger(LogManager.getLogger(RestSearchAction.class));
|
||||
public static final String TYPES_DEPRECATION_MESSAGE = "[types removal]" +
|
||||
" Specifying types in bulk requests is deprecated.";
|
||||
|
||||
public RestBulkAction(Settings settings, RestController controller) {
|
||||
super(settings);
|
||||
|
@ -76,6 +82,8 @@ public class RestBulkAction extends BaseRestHandler {
|
|||
String defaultType = request.param("type");
|
||||
if (defaultType == null) {
|
||||
defaultType = MapperService.SINGLE_MAPPING_NAME;
|
||||
} else {
|
||||
deprecationLogger.deprecatedAndMaybeLog("bulk_with_types", RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
String defaultRouting = request.param("routing");
|
||||
FetchSourceContext defaultFetchSourceContext = FetchSourceContext.parseFromRestRequest(request);
|
||||
|
|
|
@ -57,7 +57,7 @@ public class BulkIntegrationIT extends ESIntegTestCase {
|
|||
public void testBulkIndexCreatesMapping() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/bulk-log.json");
|
||||
BulkRequestBuilder bulkBuilder = client().prepareBulk();
|
||||
bulkBuilder.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkBuilder.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
bulkBuilder.get();
|
||||
assertBusy(() -> {
|
||||
GetMappingsResponse mappingsResponse = client().admin().indices().prepareGetMappings().get();
|
||||
|
@ -105,16 +105,13 @@ public class BulkIntegrationIT extends ESIntegTestCase {
|
|||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk-missing-index-type.json");
|
||||
{
|
||||
BulkRequestBuilder bulkBuilder = client().prepareBulk();
|
||||
bulkBuilder.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkBuilder.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
ActionRequestValidationException ex = expectThrows(ActionRequestValidationException.class, bulkBuilder::get);
|
||||
|
||||
assertThat(ex.validationErrors(), containsInAnyOrder(
|
||||
"index is missing",
|
||||
"index is missing",
|
||||
"index is missing",
|
||||
"type is missing",
|
||||
"type is missing",
|
||||
"type is missing"));
|
||||
"index is missing"));
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -123,7 +120,7 @@ public class BulkIntegrationIT extends ESIntegTestCase {
|
|||
.routing("routing")
|
||||
.pipeline("pipeline");
|
||||
|
||||
bulkBuilder.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkBuilder.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
BulkResponse bulkItemResponses = bulkBuilder.get();
|
||||
assertFalse(bulkItemResponses.hasFailures());
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.script.Script;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
|
||||
|
@ -57,42 +58,46 @@ public class BulkRequestTests extends ESTestCase {
|
|||
public void testSimpleBulk1() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
assertThat(bulkRequest.numberOfActions(), equalTo(3));
|
||||
assertThat(((IndexRequest) bulkRequest.requests().get(0)).source(), equalTo(new BytesArray("{ \"field1\" : \"value1\" }")));
|
||||
assertThat(bulkRequest.requests().get(1), instanceOf(DeleteRequest.class));
|
||||
assertThat(((IndexRequest) bulkRequest.requests().get(2)).source(), equalTo(new BytesArray("{ \"field1\" : \"value3\" }")));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testSimpleBulkWithCarriageReturn() throws Exception {
|
||||
String bulkAction = "{ \"index\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\"} }\r\n{ \"field1\" : \"value1\" }\r\n";
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
assertThat(bulkRequest.numberOfActions(), equalTo(1));
|
||||
assertThat(((IndexRequest) bulkRequest.requests().get(0)).source(), equalTo(new BytesArray("{ \"field1\" : \"value1\" }")));
|
||||
Map<String, Object> sourceMap = XContentHelper.convertToMap(((IndexRequest) bulkRequest.requests().get(0)).source(),
|
||||
false, XContentType.JSON).v2();
|
||||
assertEquals("value1", sourceMap.get("field1"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testSimpleBulk2() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk2.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
assertThat(bulkRequest.numberOfActions(), equalTo(3));
|
||||
}
|
||||
|
||||
public void testSimpleBulk3() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk3.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
assertThat(bulkRequest.numberOfActions(), equalTo(3));
|
||||
}
|
||||
|
||||
public void testSimpleBulk4() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk4.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
assertThat(bulkRequest.numberOfActions(), equalTo(4));
|
||||
assertThat(bulkRequest.requests().get(0).id(), equalTo("1"));
|
||||
assertThat(((UpdateRequest) bulkRequest.requests().get(0)).retryOnConflict(), equalTo(2));
|
||||
|
@ -109,6 +114,8 @@ public class BulkRequestTests extends ESTestCase {
|
|||
assertThat(scriptParams.size(), equalTo(1));
|
||||
assertThat(scriptParams.get("param1"), equalTo(1));
|
||||
assertThat(((UpdateRequest) bulkRequest.requests().get(1)).upsertRequest().source().utf8ToString(), equalTo("{\"counter\":1}"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testBulkAllowExplicitIndex() throws Exception {
|
||||
|
@ -120,6 +127,8 @@ public class BulkRequestTests extends ESTestCase {
|
|||
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk5.json");
|
||||
new BulkRequest().add(new BytesArray(bulkAction.getBytes(StandardCharsets.UTF_8)), "test", null, false, XContentType.JSON);
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testBulkAddIterable() {
|
||||
|
@ -139,32 +148,38 @@ public class BulkRequestTests extends ESTestCase {
|
|||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk6.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
ParsingException exc = expectThrows(ParsingException.class,
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
|
||||
assertThat(exc.getMessage(), containsString("Unknown key for a VALUE_STRING in [hello]"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testSimpleBulk7() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk7.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
|
||||
assertThat(exc.getMessage(),
|
||||
containsString("Malformed action/metadata line [5], expected a simple value for field [_unknown] but found [START_ARRAY]"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testSimpleBulk8() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk8.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
|
||||
assertThat(exc.getMessage(), containsString("Action/metadata line [3] contains an unknown parameter [_foo]"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testSimpleBulk9() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk9.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
|
||||
assertThat(exc.getMessage(),
|
||||
containsString("Malformed action/metadata line [3], expected START_OBJECT or END_OBJECT but found [START_ARRAY]"));
|
||||
}
|
||||
|
@ -172,8 +187,10 @@ public class BulkRequestTests extends ESTestCase {
|
|||
public void testSimpleBulk10() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk10.json");
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
assertThat(bulkRequest.numberOfActions(), equalTo(9));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testBulkActionShouldNotContainArray() throws Exception {
|
||||
|
@ -181,13 +198,13 @@ public class BulkRequestTests extends ESTestCase {
|
|||
+ "{ \"field1\" : \"value1\" }\r\n";
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
|
||||
assertEquals(exc.getMessage(), "Malformed action/metadata line [1]" +
|
||||
", expected a simple value for field [_index] but found [START_ARRAY]");
|
||||
}
|
||||
|
||||
public void testBulkEmptyObject() throws Exception {
|
||||
String bulkIndexAction = "{ \"index\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\"} }\r\n";
|
||||
String bulkIndexAction = "{ \"index\":{\"_index\":\"test\",\"_id\":\"1\"} }\r\n";
|
||||
String bulkIndexSource = "{ \"field1\" : \"value1\" }\r\n";
|
||||
String emptyObject = "{}\r\n";
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
|
@ -207,7 +224,7 @@ public class BulkRequestTests extends ESTestCase {
|
|||
String bulkAction = bulk.toString();
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
|
||||
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
|
||||
assertThat(exc.getMessage(), containsString("Malformed action/metadata line ["
|
||||
+ emptyLine + "], expected FIELD_NAME but found [END_OBJECT]"));
|
||||
}
|
||||
|
@ -218,7 +235,7 @@ public class BulkRequestTests extends ESTestCase {
|
|||
// We force here a "id is missing" validation error
|
||||
bulkRequest.add(new DeleteRequest("index", "type", null).setRefreshPolicy(RefreshPolicy.IMMEDIATE));
|
||||
// We force here a "type is missing" validation error
|
||||
bulkRequest.add(new DeleteRequest("index", null, "id"));
|
||||
bulkRequest.add(new DeleteRequest("index", "", "id"));
|
||||
bulkRequest.add(new DeleteRequest("index", "type", "id").setRefreshPolicy(RefreshPolicy.IMMEDIATE));
|
||||
bulkRequest.add(new UpdateRequest("index", "type", "id").doc("{}", XContentType.JSON).setRefreshPolicy(RefreshPolicy.IMMEDIATE));
|
||||
bulkRequest.add(new IndexRequest("index", "type", "id").source("{}", XContentType.JSON).setRefreshPolicy(RefreshPolicy.IMMEDIATE));
|
||||
|
@ -290,6 +307,8 @@ public class BulkRequestTests extends ESTestCase {
|
|||
IndexRequest request = (IndexRequest) docWriteRequest;
|
||||
assertEquals(1, request.sourceAsMap().size());
|
||||
assertEquals("value", request.sourceAsMap().get("field"));
|
||||
//This test's content contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testToValidateUpsertRequestAndVersionInBulkRequest() throws IOException {
|
||||
|
@ -324,18 +343,22 @@ public class BulkRequestTests extends ESTestCase {
|
|||
bulkRequest.add(data, null, null, xContentType);
|
||||
assertThat(bulkRequest.validate().validationErrors(), contains("can't provide both upsert request and a version",
|
||||
"can't provide version in upsert request"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testBulkTerminatedByNewline() throws Exception {
|
||||
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk11.json");
|
||||
IllegalArgumentException expectThrows = expectThrows(IllegalArgumentException.class, () -> new BulkRequest()
|
||||
.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
|
||||
.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
|
||||
assertEquals("The bulk request must be terminated by a newline [\n]", expectThrows.getMessage());
|
||||
|
||||
String bulkActionWithNewLine = bulkAction + "\n";
|
||||
BulkRequest bulkRequestWithNewLine = new BulkRequest();
|
||||
bulkRequestWithNewLine.add(bulkActionWithNewLine.getBytes(StandardCharsets.UTF_8), 0, bulkActionWithNewLine.length(), null, null,
|
||||
bulkRequestWithNewLine.add(bulkActionWithNewLine.getBytes(StandardCharsets.UTF_8), 0, bulkActionWithNewLine.length(), null,
|
||||
XContentType.JSON);
|
||||
assertEquals(3, bulkRequestWithNewLine.numberOfActions());
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ import org.elasticsearch.common.settings.Settings;
|
|||
import org.elasticsearch.common.util.concurrent.AtomicArray;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.index.IndexNotFoundException;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.tasks.Task;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.transport.CapturingTransport;
|
||||
|
@ -178,7 +179,7 @@ public class TransportBulkActionTookTests extends ESTestCase {
|
|||
bulkAction = Strings.replace(bulkAction, "\r\n", "\n");
|
||||
}
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
|
||||
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
|
||||
AtomicLong expected = new AtomicLong();
|
||||
TransportBulkAction action = createAction(controlled, expected);
|
||||
action.doExecute(null, bulkRequest, new ActionListener<BulkResponse>() {
|
||||
|
@ -200,6 +201,8 @@ public class TransportBulkActionTookTests extends ESTestCase {
|
|||
|
||||
}
|
||||
});
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
static class Resolver extends IndexNameExpressionResolver {
|
||||
|
|
|
@ -36,11 +36,20 @@ public class DeleteRequestTests extends ESTestCase {
|
|||
}
|
||||
|
||||
{
|
||||
final DeleteRequest request = new DeleteRequest("index4", randomBoolean() ? "" : null, randomBoolean() ? "" : null);
|
||||
//Empty types are accepted but fail validation
|
||||
final DeleteRequest request = new DeleteRequest("index4", "", randomBoolean() ? "" : null);
|
||||
final ActionRequestValidationException validate = request.validate();
|
||||
|
||||
assertThat(validate, not(nullValue()));
|
||||
assertThat(validate.validationErrors(), hasItems("type is missing", "id is missing"));
|
||||
}
|
||||
{
|
||||
// Null types are defaulted
|
||||
final DeleteRequest request = new DeleteRequest("index4", randomBoolean() ? "" : null);
|
||||
final ActionRequestValidationException validate = request.validate();
|
||||
|
||||
assertThat(validate, not(nullValue()));
|
||||
assertThat(validate.validationErrors(), hasItems("id is missing"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -524,9 +524,18 @@ public class UpdateRequestTests extends ESTestCase {
|
|||
|
||||
assertThat(validate, nullValue());
|
||||
}
|
||||
|
||||
{
|
||||
UpdateRequest request = new UpdateRequest("index", randomBoolean() ? "" : null, randomBoolean() ? "" : null);
|
||||
// Null types are defaulted to "_doc"
|
||||
UpdateRequest request = new UpdateRequest("index", null, randomBoolean() ? "" : null);
|
||||
request.doc("{}", XContentType.JSON);
|
||||
ActionRequestValidationException validate = request.validate();
|
||||
|
||||
assertThat(validate, not(nullValue()));
|
||||
assertThat(validate.validationErrors(), hasItems("id is missing"));
|
||||
}
|
||||
{
|
||||
// Non-null types are accepted but fail validation
|
||||
UpdateRequest request = new UpdateRequest("index", "", randomBoolean() ? "" : null);
|
||||
request.doc("{}", XContentType.JSON);
|
||||
ActionRequestValidationException validate = request.validate();
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ public class RestBulkActionTests extends ESTestCase {
|
|||
new RestBulkAction(settings(Version.CURRENT).build(), mock(RestController.class))
|
||||
.handleRequest(
|
||||
new FakeRestRequest.Builder(
|
||||
xContentRegistry()).withPath("my_index/my_type/_bulk").withParams(params)
|
||||
xContentRegistry()).withPath("my_index/_bulk").withParams(params)
|
||||
.withContent(
|
||||
new BytesArray(
|
||||
"{\"index\":{\"_id\":\"1\"}}\n" +
|
||||
|
|
|
@ -13,6 +13,7 @@ import org.elasticsearch.client.ResponseException;
|
|||
import org.elasticsearch.client.RestClient;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.util.concurrent.ThreadContext;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.test.SecuritySettingsSourceField;
|
||||
import org.elasticsearch.test.rest.ESRestTestCase;
|
||||
import org.elasticsearch.xpack.core.ml.integration.MlRestTestStateCleaner;
|
||||
|
@ -1196,6 +1197,7 @@ public class DatafeedJobsRestIT extends ESRestTestCase {
|
|||
bulkRequest.setJsonEntity(bulk);
|
||||
bulkRequest.addParameter("refresh", "true");
|
||||
bulkRequest.addParameter("pretty", null);
|
||||
bulkRequest.setOptions(expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
String bulkResponse = EntityUtils.toString(client().performRequest(bulkRequest).getEntity());
|
||||
assertThat(bulkResponse, not(containsString("\"errors\": false")));
|
||||
}
|
||||
|
|
|
@ -39,13 +39,13 @@ import static org.mockito.Mockito.when;
|
|||
public class AutodetectStateProcessorTests extends ESTestCase {
|
||||
|
||||
private static final String STATE_SAMPLE = ""
|
||||
+ "{\"index\": {\"_index\": \"test\", \"_type\": \"type1\", \"_id\": \"1\"}}\n"
|
||||
+ "{\"index\": {\"_index\": \"test\", \"_id\": \"1\"}}\n"
|
||||
+ "{ \"field\" : \"value1\" }\n"
|
||||
+ "\0"
|
||||
+ "{\"index\": {\"_index\": \"test\", \"_type\": \"type1\", \"_id\": \"2\"}}\n"
|
||||
+ "{\"index\": {\"_index\": \"test\", \"_id\": \"2\"}}\n"
|
||||
+ "{ \"field\" : \"value2\" }\n"
|
||||
+ "\0"
|
||||
+ "{\"index\": {\"_index\": \"test\", \"_type\": \"type1\", \"_id\": \"3\"}}\n"
|
||||
+ "{\"index\": {\"_index\": \"test\", \"_id\": \"3\"}}\n"
|
||||
+ "{ \"field\" : \"value3\" }\n"
|
||||
+ "\0";
|
||||
|
||||
|
@ -118,7 +118,7 @@ public class AutodetectStateProcessorTests extends ESTestCase {
|
|||
public void testLargeStateRead() throws Exception {
|
||||
StringBuilder builder = new StringBuilder(NUM_LARGE_DOCS * (LARGE_DOC_SIZE + 10)); // 10 for header and separators
|
||||
for (int docNum = 1; docNum <= NUM_LARGE_DOCS; ++docNum) {
|
||||
builder.append("{\"index\":{\"_index\":\"header").append(docNum).append("\",\"_type\":\"type\"}}\n");
|
||||
builder.append("{\"index\":{\"_index\":\"header").append(docNum).append("\"}}\n");
|
||||
for (int count = 0; count < (LARGE_DOC_SIZE / "data".length()); ++count) {
|
||||
builder.append("data");
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.elasticsearch.common.io.stream.StreamInput;
|
|||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.RandomObjects;
|
||||
import org.elasticsearch.xpack.core.monitoring.MonitoredSystem;
|
||||
|
@ -141,6 +142,8 @@ public class MonitoringBulkRequestTests extends ESTestCase {
|
|||
assertThat(bulkDoc.getXContentType(), equalTo(xContentType));
|
||||
++count;
|
||||
}
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testAddRequestContentWithEmptySource() throws IOException {
|
||||
|
@ -188,6 +191,8 @@ public class MonitoringBulkRequestTests extends ESTestCase {
|
|||
);
|
||||
|
||||
assertThat(e.getMessage(), containsString("source is missing for monitoring document [][doc][" + nbDocs + "]"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testAddRequestContentWithUnrecognizedIndexName() throws IOException {
|
||||
|
@ -225,6 +230,9 @@ public class MonitoringBulkRequestTests extends ESTestCase {
|
|||
);
|
||||
|
||||
assertThat(e.getMessage(), containsString("unrecognized index name [" + indexName + "]"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
|
||||
}
|
||||
|
||||
public void testSerialization() throws IOException {
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.elasticsearch.common.xcontent.XContentType;
|
|||
import org.elasticsearch.license.License;
|
||||
import org.elasticsearch.plugins.Plugin;
|
||||
import org.elasticsearch.rest.RestStatus;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.elasticsearch.search.SearchHits;
|
||||
import org.elasticsearch.search.collapse.CollapseBuilder;
|
||||
|
@ -180,6 +181,7 @@ public class MonitoringIT extends ESSingleNodeTestCase {
|
|||
assertMonitoringDoc(toMap(hit), system, "test", interval);
|
||||
}
|
||||
});
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.elasticsearch.rest.RestRequest;
|
|||
import org.elasticsearch.rest.RestResponse;
|
||||
import org.elasticsearch.rest.RestStatus;
|
||||
import org.elasticsearch.rest.action.RestBuilderListener;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.rest.FakeRestRequest;
|
||||
import org.elasticsearch.xpack.core.XPackClient;
|
||||
|
@ -121,6 +122,8 @@ public class RestMonitoringBulkActionTests extends ESTestCase {
|
|||
assertThat(restResponse.status(), is(RestStatus.OK));
|
||||
assertThat(restResponse.content().utf8ToString(),
|
||||
is("{\"took\":" + response.getTookInMillis() + ",\"ignored\":false,\"errors\":false}"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testNoErrorsButIgnored() throws Exception {
|
||||
|
@ -131,6 +134,8 @@ public class RestMonitoringBulkActionTests extends ESTestCase {
|
|||
assertThat(restResponse.status(), is(RestStatus.OK));
|
||||
assertThat(restResponse.content().utf8ToString(),
|
||||
is("{\"took\":" + response.getTookInMillis() + ",\"ignored\":true,\"errors\":false}"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
public void testWithErrors() throws Exception {
|
||||
|
@ -150,6 +155,8 @@ public class RestMonitoringBulkActionTests extends ESTestCase {
|
|||
assertThat(restResponse.status(), is(RestStatus.INTERNAL_SERVER_ERROR));
|
||||
assertThat(restResponse.content().utf8ToString(),
|
||||
is("{\"took\":" + response.getTookInMillis() + ",\"ignored\":false,\"errors\":true,\"error\":" + errorJson + "}"));
|
||||
//This test's JSON contains outdated references to types
|
||||
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -83,7 +83,7 @@ public class RestSqlMultinodeIT extends ESRestTestCase {
|
|||
}
|
||||
|
||||
private void createTestData(int documents) throws UnsupportedCharsetException, IOException {
|
||||
Request request = new Request("PUT", "/test/test/_bulk");
|
||||
Request request = new Request("PUT", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
|
|
|
@ -141,11 +141,11 @@ public abstract class SqlSecurityTestCase extends ESRestTestCase {
|
|||
request.addParameter("refresh", "true");
|
||||
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
bulk.append("{\"index\":{\"_index\": \"test\", \"_type\": \"doc\", \"_id\":\"1\"}\n");
|
||||
bulk.append("{\"index\":{\"_index\": \"test\", \"_id\":\"1\"}\n");
|
||||
bulk.append("{\"a\": 1, \"b\": 2, \"c\": 3}\n");
|
||||
bulk.append("{\"index\":{\"_index\": \"test\", \"_type\": \"doc\", \"_id\":\"2\"}\n");
|
||||
bulk.append("{\"index\":{\"_index\": \"test\", \"_id\":\"2\"}\n");
|
||||
bulk.append("{\"a\": 4, \"b\": 5, \"c\": 6}\n");
|
||||
bulk.append("{\"index\":{\"_index\": \"bort\", \"_type\": \"doc\", \"_id\":\"1\"}\n");
|
||||
bulk.append("{\"index\":{\"_index\": \"bort\", \"_id\":\"1\"}\n");
|
||||
bulk.append("{\"a\": \"test\"}\n");
|
||||
request.setJsonEntity(bulk.toString());
|
||||
client().performRequest(request);
|
||||
|
|
|
@ -203,7 +203,7 @@ public class UserFunctionIT extends ESRestTestCase {
|
|||
}
|
||||
|
||||
private void index(String... docs) throws IOException {
|
||||
Request request = new Request("POST", "/test/test/_bulk");
|
||||
Request request = new Request("POST", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
for (String doc : docs) {
|
||||
|
|
|
@ -31,7 +31,7 @@ public class JdbcShardFailureIT extends JdbcIntegrationTestCase {
|
|||
createTest2.addParameter("timeout", "100ms");
|
||||
client().performRequest(createTest2);
|
||||
|
||||
Request request = new Request("PUT", "/test1/doc/_bulk");
|
||||
Request request = new Request("PUT", "/test1/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
for (int i = 0; i < 20; i++) {
|
||||
|
|
|
@ -16,7 +16,7 @@ import static org.hamcrest.Matchers.containsString;
|
|||
*/
|
||||
public abstract class FetchSizeTestCase extends CliIntegrationTestCase {
|
||||
public void testSelect() throws IOException {
|
||||
Request request = new Request("PUT", "/test/doc/_bulk");
|
||||
Request request = new Request("PUT", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
for (int i = 0; i < 20; i++) {
|
||||
|
|
|
@ -83,7 +83,7 @@ public class DataLoader {
|
|||
createIndex.endObject();
|
||||
createIndex.startObject("mappings");
|
||||
{
|
||||
createIndex.startObject("emp");
|
||||
createIndex.startObject("_doc");
|
||||
{
|
||||
createIndex.startObject("properties");
|
||||
{
|
||||
|
@ -157,7 +157,7 @@ public class DataLoader {
|
|||
list.add(dep);
|
||||
});
|
||||
|
||||
request = new Request("POST", "/" + index + "/emp/_bulk?refresh=wait_for");
|
||||
request = new Request("POST", "/" + index + "/_bulk?refresh=wait_for");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
csvToLines(fileName, (titles, fields) -> {
|
||||
|
@ -232,7 +232,7 @@ public class DataLoader {
|
|||
request.setJsonEntity(Strings.toString(createIndex));
|
||||
client.performRequest(request);
|
||||
|
||||
request = new Request("POST", "/" + index + "/_doc/_bulk?refresh=wait_for");
|
||||
request = new Request("POST", "/" + index + "/_bulk?refresh=wait_for");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
csvToLines(filename, (titles, fields) -> {
|
||||
|
@ -263,7 +263,7 @@ public class DataLoader {
|
|||
createIndex.endObject();
|
||||
createIndex.startObject("mappings");
|
||||
{
|
||||
createIndex.startObject("book");
|
||||
createIndex.startObject("_doc");
|
||||
{
|
||||
createIndex.startObject("properties");
|
||||
{
|
||||
|
@ -280,7 +280,7 @@ public class DataLoader {
|
|||
request.setJsonEntity(Strings.toString(createIndex));
|
||||
client.performRequest(request);
|
||||
|
||||
request = new Request("POST", "/" + index + "/book/_bulk?refresh=wait_for");
|
||||
request = new Request("POST", "/" + index + "/_bulk?refresh=wait_for");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
csvToLines("library", (titles, fields) -> {
|
||||
|
|
|
@ -30,7 +30,7 @@ public class FetchSizeTestCase extends JdbcIntegrationTestCase {
|
|||
XContentBuilder createIndex = JsonXContent.contentBuilder().startObject();
|
||||
createIndex.startObject("mappings");
|
||||
{
|
||||
createIndex.startObject("doc");
|
||||
createIndex.startObject("_doc");
|
||||
{
|
||||
createIndex.startObject("properties");
|
||||
{
|
||||
|
@ -48,7 +48,7 @@ public class FetchSizeTestCase extends JdbcIntegrationTestCase {
|
|||
request.setJsonEntity(Strings.toString(createIndex));
|
||||
client().performRequest(request);
|
||||
|
||||
request = new Request("PUT", "/test/doc/_bulk");
|
||||
request = new Request("PUT", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
StringBuilder bulkLine;
|
||||
|
|
|
@ -75,7 +75,7 @@ public abstract class RestSqlTestCase extends ESRestTestCase implements ErrorsTe
|
|||
}
|
||||
|
||||
public void testNextPage() throws IOException {
|
||||
Request request = new Request("POST", "/test/test/_bulk");
|
||||
Request request = new Request("POST", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
String mode = randomMode();
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
|
@ -141,7 +141,7 @@ public abstract class RestSqlTestCase extends ESRestTestCase implements ErrorsTe
|
|||
}
|
||||
|
||||
public void testScoreWithFieldNamedScore() throws IOException {
|
||||
Request request = new Request("POST", "/test/test/_bulk");
|
||||
Request request = new Request("POST", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
String mode = randomMode();
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
|
@ -719,7 +719,7 @@ public abstract class RestSqlTestCase extends ESRestTestCase implements ErrorsTe
|
|||
}
|
||||
|
||||
protected void index(String... docs) throws IOException {
|
||||
Request request = new Request("POST", "/test/_doc/_bulk");
|
||||
Request request = new Request("POST", "/test/_bulk");
|
||||
request.addParameter("refresh", "true");
|
||||
StringBuilder bulk = new StringBuilder();
|
||||
for (String doc : docs) {
|
||||
|
|
|
@ -92,7 +92,7 @@ public class RollupIT extends ESRestTestCase {
|
|||
// index documents for the rollup job
|
||||
final StringBuilder bulk = new StringBuilder();
|
||||
for (int i = 0; i < numDocs; i++) {
|
||||
bulk.append("{\"index\":{\"_index\":\"rollup-docs\",\"_type\":\"_doc\"}}\n");
|
||||
bulk.append("{\"index\":{\"_index\":\"rollup-docs\"}}\n");
|
||||
ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochSecond(1531221196 + (60*i)), ZoneId.of("UTC"));
|
||||
String date = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
|
||||
bulk.append("{\"timestamp\":\"").append(date).append("\",\"value\":").append(i).append("}\n");
|
||||
|
|
|
@ -9,6 +9,7 @@ import org.apache.http.util.EntityUtils;
|
|||
import org.elasticsearch.common.Booleans;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.rest.action.document.RestBulkAction;
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.client.Request;
|
||||
import org.elasticsearch.client.Response;
|
||||
|
@ -137,6 +138,7 @@ public class IndexingIT extends AbstractUpgradeTestCase {
|
|||
}
|
||||
Request bulk = new Request("POST", "/_bulk");
|
||||
bulk.addParameter("refresh", "true");
|
||||
bulk.setOptions(expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
|
||||
bulk.setJsonEntity(b.toString());
|
||||
client().performRequest(bulk);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue