From 434430506b760257f6d3defd4cc5b6be5be8cc2b Mon Sep 17 00:00:00 2001 From: markharwood Date: Thu, 10 Jan 2019 21:35:19 +0000 Subject: [PATCH] Type removal - added deprecation warnings to _bulk apis (#36549) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../action/bulk/TransportNoopBulkAction.java | 4 +- .../client/RequestConverters.java | 4 +- .../elasticsearch/client/BulkProcessorIT.java | 139 ++++++++++++++---- .../client/BulkProcessorRetryIT.java | 2 +- .../BulkRequestWithGlobalParametersIT.java | 38 +++-- .../java/org/elasticsearch/client/CrudIT.java | 8 +- .../client/MachineLearningGetResultsIT.java | 17 +-- .../client/MachineLearningIT.java | 6 +- .../client/RequestConvertersTests.java | 51 ++++--- .../org/elasticsearch/client/RollupIT.java | 6 +- .../documentation/CRUDDocumentationIT.java | 4 +- .../documentation/RollupDocumentationIT.java | 4 +- .../high-level/document/bulk.asciidoc | 4 +- .../index/reindex/ManyDocumentsIT.java | 2 +- .../upgrades/FullClusterRestartIT.java | 3 + .../elasticsearch/upgrades/IndexingIT.java | 2 + .../org/elasticsearch/upgrades/XPackIT.java | 2 + .../elasticsearch/action/DocWriteRequest.java | 9 ++ .../action/bulk/BulkRequest.java | 66 ++++++++- .../action/bulk/BulkRequestBuilder.java | 28 +++- .../action/bulk/TransportBulkAction.java | 3 +- .../action/delete/DeleteRequest.java | 30 +++- .../action/index/IndexRequest.java | 35 ++++- .../action/update/UpdateRequest.java | 29 +++- .../rest/action/document/RestBulkAction.java | 8 + .../action/bulk/BulkIntegrationIT.java | 11 +- .../action/bulk/BulkRequestTests.java | 55 +++++-- .../bulk/TransportBulkActionTookTests.java | 5 +- .../action/delete/DeleteRequestTests.java | 11 +- .../action/update/UpdateRequestTests.java | 13 +- .../action/document/RestBulkActionTests.java | 2 +- .../ml/integration/DatafeedJobsRestIT.java | 2 + .../output/AutodetectStateProcessorTests.java | 8 +- .../action/MonitoringBulkRequestTests.java | 8 + .../monitoring/integration/MonitoringIT.java | 2 + .../action/RestMonitoringBulkActionTests.java | 7 + .../sql/qa/multi_node/RestSqlMultinodeIT.java | 2 +- .../sql/qa/security/SqlSecurityTestCase.java | 6 +- .../xpack/sql/qa/security/UserFunctionIT.java | 2 +- .../qa/single_node/JdbcShardFailureIT.java | 2 +- .../xpack/sql/qa/cli/FetchSizeTestCase.java | 2 +- .../xpack/sql/qa/jdbc/DataLoader.java | 10 +- .../xpack/sql/qa/jdbc/FetchSizeTestCase.java | 4 +- .../xpack/sql/qa/rest/RestSqlTestCase.java | 6 +- .../elasticsearch/multi_node/RollupIT.java | 2 +- .../elasticsearch/upgrades/IndexingIT.java | 2 + 46 files changed, 500 insertions(+), 166 deletions(-) diff --git a/client/client-benchmark-noop-api-plugin/src/main/java/org/elasticsearch/plugin/noop/action/bulk/TransportNoopBulkAction.java b/client/client-benchmark-noop-api-plugin/src/main/java/org/elasticsearch/plugin/noop/action/bulk/TransportNoopBulkAction.java index 6580d213548..671e6b338e2 100644 --- a/client/client-benchmark-noop-api-plugin/src/main/java/org/elasticsearch/plugin/noop/action/bulk/TransportNoopBulkAction.java +++ b/client/client-benchmark-noop-api-plugin/src/main/java/org/elasticsearch/plugin/noop/action/bulk/TransportNoopBulkAction.java @@ -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 { 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::new); } @Override diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java index d4f67ba5e9e..7a6a562e4fb 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java @@ -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()); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorIT.java index 2b870dbc475..72ffcd7c506 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorIT.java @@ -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 hits = searchAll(new SearchRequest("test").routing("routing")); + Iterable 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 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 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 { .>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 bulkItemResponses, int numDocs) { + assertResponseItems(bulkItemResponses, numDocs, MapperService.SINGLE_MAPPING_NAME); + } + + private static void assertResponseItems(List 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)); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorRetryIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorRetryIT.java index 6262a5b9685..e3b280225cb 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorRetryIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkProcessorRetryIT.java @@ -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)); } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkRequestWithGlobalParametersIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkRequestWithGlobalParametersIT.java index bb9f78622c8..3020eb0329b 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkRequestWithGlobalParametersIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/BulkRequestWithGlobalParametersIT.java @@ -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 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 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 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 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 Function fieldFromSource(String fieldName) { diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java index bdfc3fe4383..19a5b03b6d6 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java @@ -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) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningGetResultsIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningGetResultsIT.java index 2ee09b496fc..9b364975c77 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningGetResultsIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningGetResultsIT.java @@ -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\":" diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningIT.java index 4f009e53450..1971ff6461a 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningIT.java @@ -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); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index 468bcf2bf8a..f31c5623326 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -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); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RollupIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RollupIT.java index 429b36d1d10..e57493acdf3 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RollupIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RollupIT.java @@ -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) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java index f2f9070d27b..894b569f614 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java @@ -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 diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/RollupDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/RollupDocumentationIT.java index 2163b188ee0..a1fcdbb7bfc 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/RollupDocumentationIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/RollupDocumentationIT.java @@ -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()); diff --git a/docs/java-rest/high-level/document/bulk.asciidoc b/docs/java-rest/high-level/document/bulk.asciidoc index c50a1f79058..061516388c4 100644 --- a/docs/java-rest/high-level/document/bulk.asciidoc +++ b/docs/java-rest/high-level/document/bulk.asciidoc @@ -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[] diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ManyDocumentsIT.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ManyDocumentsIT.java index 6aa1046492c..b86f28452cc 100644 --- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ManyDocumentsIT.java +++ b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ManyDocumentsIT.java @@ -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); diff --git a/qa/full-cluster-restart/src/test/java/org/elasticsearch/upgrades/FullClusterRestartIT.java b/qa/full-cluster-restart/src/test/java/org/elasticsearch/upgrades/FullClusterRestartIT.java index 7519cade0f2..e8bd2d95697 100644 --- a/qa/full-cluster-restart/src/test/java/org/elasticsearch/upgrades/FullClusterRestartIT.java +++ b/qa/full-cluster-restart/src/test/java/org/elasticsearch/upgrades/FullClusterRestartIT.java @@ -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 diff --git a/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java b/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java index e4736a79d05..c80218c50eb 100644 --- a/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java +++ b/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java @@ -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); } diff --git a/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/XPackIT.java b/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/XPackIT.java index cecdb0a6a2d..1704deada17 100644 --- a/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/XPackIT.java +++ b/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/XPackIT.java @@ -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"); diff --git a/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java b/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java index e2d01aad230..fdf62e951a5 100644 --- a/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java +++ b/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java @@ -60,6 +60,15 @@ public interface DocWriteRequest 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 diff --git a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java index 01b9c22b4d1..292d75db5cf 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java @@ -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 { 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) { diff --git a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestBuilder.java b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestBuilder.java index fc91f4f907e..34837d0e696 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestBuilder.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestBuilder.java @@ -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 implements WriteRequestBuilder { + /** + * @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::new); Objects.requireNonNull(relativeTimeProvider); this.threadPool = threadPool; this.clusterService = clusterService; diff --git a/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java b/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java index 7fb19bbf9eb..8d2967fd28b 100644 --- a/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java +++ b/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java @@ -53,7 +53,8 @@ import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO; public class DeleteRequest extends ReplicatedWriteRequest implements DocWriteRequest, 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 @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 @Deprecated @Override public String type() { + if (type == null) { + return MapperService.SINGLE_MAPPING_NAME; + } return type; } @@ -156,6 +160,22 @@ public class DeleteRequest extends ReplicatedWriteRequest 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 @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 @Override public String toString() { - return "delete {[" + index + "][" + type + "][" + id + "]}"; + return "delete {[" + index + "][" + type() + "][" + id + "]}"; } /** diff --git a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java index 195f6863b3d..a9aac3025de 100644 --- a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java +++ b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java @@ -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 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 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 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 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 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 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 implement } catch (Exception e) { // ignore } - return "index {[" + index + "][" + type + "][" + id + "], source[" + sSource + "]}"; + return "index {[" + index + "][" + type() + "][" + id + "], source[" + sSource + "]}"; } diff --git a/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java b/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java index cd0b5629b76..a7805b4cbdb 100644 --- a/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java +++ b/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java @@ -91,7 +91,8 @@ public class UpdateRequest extends InstanceShardOperationRequest 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 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 @Deprecated @Override public String type() { + if (type == null) { + return MapperService.SINGLE_MAPPING_NAME; + } return type; } @@ -203,6 +207,21 @@ public class UpdateRequest extends InstanceShardOperationRequest 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 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 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) { diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java index 5cfbbfdb1b5..7861a4fe9d1 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java @@ -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); diff --git a/server/src/test/java/org/elasticsearch/action/bulk/BulkIntegrationIT.java b/server/src/test/java/org/elasticsearch/action/bulk/BulkIntegrationIT.java index 325894366fe..de8a2d9d67b 100644 --- a/server/src/test/java/org/elasticsearch/action/bulk/BulkIntegrationIT.java +++ b/server/src/test/java/org/elasticsearch/action/bulk/BulkIntegrationIT.java @@ -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()); } diff --git a/server/src/test/java/org/elasticsearch/action/bulk/BulkRequestTests.java b/server/src/test/java/org/elasticsearch/action/bulk/BulkRequestTests.java index 65935bea96e..75701e06852 100644 --- a/server/src/test/java/org/elasticsearch/action/bulk/BulkRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/bulk/BulkRequestTests.java @@ -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 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); } } diff --git a/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTookTests.java b/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTookTests.java index 593bba9f377..89ccbefb00e 100644 --- a/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTookTests.java +++ b/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTookTests.java @@ -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() { @@ -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 { diff --git a/server/src/test/java/org/elasticsearch/action/delete/DeleteRequestTests.java b/server/src/test/java/org/elasticsearch/action/delete/DeleteRequestTests.java index 5f897d0b834..4fe4c3548c2 100644 --- a/server/src/test/java/org/elasticsearch/action/delete/DeleteRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/delete/DeleteRequestTests.java @@ -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")); + } } } diff --git a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java index e33c7ca5324..4534fbe23e3 100644 --- a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java @@ -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(); diff --git a/server/src/test/java/org/elasticsearch/rest/action/document/RestBulkActionTests.java b/server/src/test/java/org/elasticsearch/rest/action/document/RestBulkActionTests.java index 5011946914a..b19c8c6412a 100644 --- a/server/src/test/java/org/elasticsearch/rest/action/document/RestBulkActionTests.java +++ b/server/src/test/java/org/elasticsearch/rest/action/document/RestBulkActionTests.java @@ -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" + diff --git a/x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/DatafeedJobsRestIT.java b/x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/DatafeedJobsRestIT.java index d5aa2c6b435..64d8f73c4a3 100644 --- a/x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/DatafeedJobsRestIT.java +++ b/x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/DatafeedJobsRestIT.java @@ -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"))); } diff --git a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/job/process/autodetect/output/AutodetectStateProcessorTests.java b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/job/process/autodetect/output/AutodetectStateProcessorTests.java index e4fb5a7f074..4f5477a75f8 100644 --- a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/job/process/autodetect/output/AutodetectStateProcessorTests.java +++ b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/job/process/autodetect/output/AutodetectStateProcessorTests.java @@ -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"); } diff --git a/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/action/MonitoringBulkRequestTests.java b/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/action/MonitoringBulkRequestTests.java index dc5cad7c94f..a8ab2960194 100644 --- a/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/action/MonitoringBulkRequestTests.java +++ b/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/action/MonitoringBulkRequestTests.java @@ -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 { diff --git a/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/integration/MonitoringIT.java b/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/integration/MonitoringIT.java index dd45c3e06db..555f2659113 100644 --- a/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/integration/MonitoringIT.java +++ b/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/integration/MonitoringIT.java @@ -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); } /** diff --git a/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/rest/action/RestMonitoringBulkActionTests.java b/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/rest/action/RestMonitoringBulkActionTests.java index 7a4427c9f0f..10fc10e3f97 100644 --- a/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/rest/action/RestMonitoringBulkActionTests.java +++ b/x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/rest/action/RestMonitoringBulkActionTests.java @@ -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); } /** diff --git a/x-pack/plugin/sql/qa/multi-node/src/test/java/org/elasticsearch/xpack/sql/qa/multi_node/RestSqlMultinodeIT.java b/x-pack/plugin/sql/qa/multi-node/src/test/java/org/elasticsearch/xpack/sql/qa/multi_node/RestSqlMultinodeIT.java index 2a4dd79001d..95066306cc2 100644 --- a/x-pack/plugin/sql/qa/multi-node/src/test/java/org/elasticsearch/xpack/sql/qa/multi_node/RestSqlMultinodeIT.java +++ b/x-pack/plugin/sql/qa/multi-node/src/test/java/org/elasticsearch/xpack/sql/qa/multi_node/RestSqlMultinodeIT.java @@ -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(); diff --git a/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/SqlSecurityTestCase.java b/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/SqlSecurityTestCase.java index 1dc765e242a..053fe0c4775 100644 --- a/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/SqlSecurityTestCase.java +++ b/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/SqlSecurityTestCase.java @@ -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); diff --git a/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/UserFunctionIT.java b/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/UserFunctionIT.java index 5d37e38bc4c..639ffd17e34 100644 --- a/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/UserFunctionIT.java +++ b/x-pack/plugin/sql/qa/security/src/test/java/org/elasticsearch/xpack/sql/qa/security/UserFunctionIT.java @@ -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) { diff --git a/x-pack/plugin/sql/qa/single-node/src/test/java/org/elasticsearch/xpack/sql/qa/single_node/JdbcShardFailureIT.java b/x-pack/plugin/sql/qa/single-node/src/test/java/org/elasticsearch/xpack/sql/qa/single_node/JdbcShardFailureIT.java index 487dc5f7173..f7c490cc8b4 100644 --- a/x-pack/plugin/sql/qa/single-node/src/test/java/org/elasticsearch/xpack/sql/qa/single_node/JdbcShardFailureIT.java +++ b/x-pack/plugin/sql/qa/single-node/src/test/java/org/elasticsearch/xpack/sql/qa/single_node/JdbcShardFailureIT.java @@ -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++) { diff --git a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/FetchSizeTestCase.java b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/FetchSizeTestCase.java index afc4c302995..84f74bcbac1 100644 --- a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/FetchSizeTestCase.java +++ b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/FetchSizeTestCase.java @@ -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++) { diff --git a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/DataLoader.java b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/DataLoader.java index 4985dda404d..efa39ec517e 100644 --- a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/DataLoader.java +++ b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/DataLoader.java @@ -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) -> { diff --git a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/FetchSizeTestCase.java b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/FetchSizeTestCase.java index fee5901bc4c..86fa4805ba6 100644 --- a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/FetchSizeTestCase.java +++ b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/FetchSizeTestCase.java @@ -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; diff --git a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/rest/RestSqlTestCase.java b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/rest/RestSqlTestCase.java index a1d284304b5..21faaf17c4e 100644 --- a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/rest/RestSqlTestCase.java +++ b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/rest/RestSqlTestCase.java @@ -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) { diff --git a/x-pack/qa/multi-node/src/test/java/org/elasticsearch/multi_node/RollupIT.java b/x-pack/qa/multi-node/src/test/java/org/elasticsearch/multi_node/RollupIT.java index a7dd57bea89..1feb05b9c64 100644 --- a/x-pack/qa/multi-node/src/test/java/org/elasticsearch/multi_node/RollupIT.java +++ b/x-pack/qa/multi-node/src/test/java/org/elasticsearch/multi_node/RollupIT.java @@ -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"); diff --git a/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java b/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java index b080a77e064..8d8d999a55b 100644 --- a/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java +++ b/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java @@ -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); }