Type removal - added deprecation warnings to _bulk apis (#36549)

Added warnings checks to existing tests
Added “defaultTypeIfNull” to DocWriteRequest interface so that Bulk requests can override a null choice of document type with any global custom choice.
Related to #35190
This commit is contained in:
markharwood 2019-01-10 21:35:19 +00:00 committed by GitHub
parent 04dcb13ac4
commit 434430506b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
46 changed files with 500 additions and 166 deletions

View File

@ -32,13 +32,15 @@ import org.elasticsearch.index.shard.ShardId;
import org.elasticsearch.tasks.Task;
import org.elasticsearch.transport.TransportService;
import java.util.function.Supplier;
public class TransportNoopBulkAction extends HandledTransportAction<BulkRequest, BulkResponse> {
private static final BulkItemResponse ITEM_RESPONSE = new BulkItemResponse(1, DocWriteRequest.OpType.UPDATE,
new UpdateResponse(new ShardId("mock", "", 1), "mock_type", "1", 1L, DocWriteResponse.Result.CREATED));
@Inject
public TransportNoopBulkAction(TransportService transportService, ActionFilters actionFilters) {
super(NoopBulkAction.NAME, transportService, actionFilters, BulkRequest::new);
super(NoopBulkAction.NAME, transportService, actionFilters, (Supplier<BulkRequest>) BulkRequest::new);
}
@Override

View File

@ -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());

View File

@ -35,6 +35,8 @@ import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.rest.action.document.RestBulkAction;
import org.elasticsearch.search.SearchHit;
import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
@ -70,8 +72,15 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
private static BulkProcessor.Builder initBulkProcessorBuilder(BulkProcessor.Listener listener) {
return BulkProcessor.builder(
(request, bulkListener) -> highLevelClient().bulkAsync(request, RequestOptions.DEFAULT, bulkListener), listener);
(request, bulkListener) -> highLevelClient().bulkAsync(request, RequestOptions.DEFAULT,
bulkListener), listener);
}
private static BulkProcessor.Builder initBulkProcessorBuilderUsingTypes(BulkProcessor.Listener listener) {
return BulkProcessor.builder(
(request, bulkListener) -> highLevelClient().bulkAsync(request, expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE),
bulkListener), listener);
}
public void testThatBulkProcessorCountIsCorrect() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
@ -320,35 +329,105 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
public void testGlobalParametersAndBulkProcessor() throws Exception {
createIndexWithMultipleShards("test");
final CountDownLatch latch = new CountDownLatch(1);
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
createFieldAddingPipleine("pipeline_id", "fieldNameXYZ", "valueXYZ");
final String customType = "testType";
final String ignoredType = "ignoredType";
int numDocs = randomIntBetween(10, 10);
try (BulkProcessor processor = initBulkProcessorBuilder(listener)
//let's make sure that the bulk action limit trips, one single execution will index all the documents
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
.setGlobalIndex("test")
.setGlobalType("_doc")
.setGlobalRouting("routing")
.setGlobalPipeline("pipeline_id")
.build()) {
{
final CountDownLatch latch = new CountDownLatch(1);
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
//Check that untyped document additions inherit the global type
String globalType = customType;
String localType = null;
try (BulkProcessor processor = initBulkProcessorBuilderUsingTypes(listener)
//let's make sure that the bulk action limit trips, one single execution will index all the documents
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
.setGlobalIndex("test")
.setGlobalType(globalType)
.setGlobalRouting("routing")
.setGlobalPipeline("pipeline_id")
.build()) {
indexDocs(processor, numDocs, null, null, "test", "pipeline_id");
latch.await();
indexDocs(processor, numDocs, null, localType, "test", globalType, "pipeline_id");
latch.await();
assertThat(listener.beforeCounts.get(), equalTo(1));
assertThat(listener.afterCounts.get(), equalTo(1));
assertThat(listener.bulkFailures.size(), equalTo(0));
assertResponseItems(listener.bulkItems, numDocs);
assertThat(listener.beforeCounts.get(), equalTo(1));
assertThat(listener.afterCounts.get(), equalTo(1));
assertThat(listener.bulkFailures.size(), equalTo(0));
assertResponseItems(listener.bulkItems, numDocs, globalType);
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType(globalType))));
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
}
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType("_doc"))));
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
}
{
//Check that typed document additions don't inherit the global type
String globalType = ignoredType;
String localType = customType;
final CountDownLatch latch = new CountDownLatch(1);
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
try (BulkProcessor processor = initBulkProcessorBuilderUsingTypes(listener)
//let's make sure that the bulk action limit trips, one single execution will index all the documents
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
.setGlobalIndex("test")
.setGlobalType(globalType)
.setGlobalRouting("routing")
.setGlobalPipeline("pipeline_id")
.build()) {
indexDocs(processor, numDocs, null, localType, "test", globalType, "pipeline_id");
latch.await();
assertThat(listener.beforeCounts.get(), equalTo(1));
assertThat(listener.afterCounts.get(), equalTo(1));
assertThat(listener.bulkFailures.size(), equalTo(0));
assertResponseItems(listener.bulkItems, numDocs, localType);
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType(localType))));
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
}
}
{
//Check that untyped document additions and untyped global inherit the established custom type
// (the custom document type introduced to the mapping by the earlier code in this test)
String globalType = null;
String localType = null;
final CountDownLatch latch = new CountDownLatch(1);
BulkProcessorTestListener listener = new BulkProcessorTestListener(latch);
try (BulkProcessor processor = initBulkProcessorBuilder(listener)
//let's make sure that the bulk action limit trips, one single execution will index all the documents
.setConcurrentRequests(randomIntBetween(0, 1)).setBulkActions(numDocs)
.setFlushInterval(TimeValue.timeValueHours(24)).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
.setGlobalIndex("test")
.setGlobalType(globalType)
.setGlobalRouting("routing")
.setGlobalPipeline("pipeline_id")
.build()) {
indexDocs(processor, numDocs, null, localType, "test", globalType, "pipeline_id");
latch.await();
assertThat(listener.beforeCounts.get(), equalTo(1));
assertThat(listener.afterCounts.get(), equalTo(1));
assertThat(listener.bulkFailures.size(), equalTo(0));
assertResponseItems(listener.bulkItems, numDocs, MapperService.SINGLE_MAPPING_NAME);
Iterable<SearchHit> hits = searchAll(new SearchRequest("test").routing("routing"));
assertThat(hits, everyItem(hasProperty(fieldFromSource("fieldNameXYZ"), equalTo("valueXYZ"))));
assertThat(hits, everyItem(Matchers.allOf(hasIndex("test"), hasType(customType))));
assertThat(hits, containsInAnyOrder(expectedIds(numDocs)));
}
}
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
@SuppressWarnings("unchecked")
@ -359,15 +438,15 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
.<Matcher<SearchHit>>toArray(Matcher[]::new);
}
private static MultiGetRequest indexDocs(BulkProcessor processor, int numDocs, String localIndex,
private static MultiGetRequest indexDocs(BulkProcessor processor, int numDocs, String localIndex, String localType,
String globalIndex, String globalType, String globalPipeline) throws Exception {
MultiGetRequest multiGetRequest = new MultiGetRequest();
for (int i = 1; i <= numDocs; i++) {
if (randomBoolean()) {
processor.add(new IndexRequest(localIndex).id(Integer.toString(i))
processor.add(new IndexRequest(localIndex, localType, Integer.toString(i))
.source(XContentType.JSON, "field", randomRealisticUnicodeOfLengthBetween(1, 30)));
} else {
BytesArray data = bytesBulkRequest(localIndex, "_doc", i);
BytesArray data = bytesBulkRequest(localIndex, localType, i);
processor.add(data, globalIndex, globalType, globalPipeline, null, XContentType.JSON);
}
multiGetRequest.add(localIndex, Integer.toString(i));
@ -396,15 +475,19 @@ public class BulkProcessorIT extends ESRestHighLevelClientTestCase {
}
private static MultiGetRequest indexDocs(BulkProcessor processor, int numDocs) throws Exception {
return indexDocs(processor, numDocs, "test", null, null, null);
return indexDocs(processor, numDocs, "test", null, null, null, null);
}
private static void assertResponseItems(List<BulkItemResponse> bulkItemResponses, int numDocs) {
assertResponseItems(bulkItemResponses, numDocs, MapperService.SINGLE_MAPPING_NAME);
}
private static void assertResponseItems(List<BulkItemResponse> bulkItemResponses, int numDocs, String expectedType) {
assertThat(bulkItemResponses.size(), is(numDocs));
int i = 1;
for (BulkItemResponse bulkItemResponse : bulkItemResponses) {
assertThat(bulkItemResponse.getIndex(), equalTo("test"));
assertThat(bulkItemResponse.getType(), equalTo("_doc"));
assertThat(bulkItemResponse.getType(), equalTo(expectedType));
assertThat(bulkItemResponse.getId(), equalTo(Integer.toString(i++)));
assertThat("item " + i + " failed with cause: " + bulkItemResponse.getFailureMessage(),
bulkItemResponse.isFailed(), equalTo(false));

View File

@ -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));
}

View File

@ -24,6 +24,7 @@ import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.action.document.RestBulkAction;
import org.elasticsearch.search.SearchHit;
import java.io.IOException;
@ -140,20 +141,19 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
}
public void testGlobalType() throws IOException {
BulkRequest request = new BulkRequest(null, "_doc");
BulkRequest request = new BulkRequest(null, "global_type");
request.add(new IndexRequest("index").id("1")
.source(XContentType.JSON, "field", "bulk1"));
request.add(new IndexRequest("index").id("2")
.source(XContentType.JSON, "field", "bulk2"));
bulk(request);
bulkWithTypes(request);
Iterable<SearchHit> hits = searchAll("index");
assertThat(hits, everyItem(hasType("_doc")));
assertThat(hits, everyItem(hasType("global_type")));
}
@SuppressWarnings("unchecked")
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/pull/36549")
public void testTypeGlobalAndPerRequest() throws IOException {
BulkRequest request = new BulkRequest(null, "global_type");
request.add(new IndexRequest("index1", "local_type", "1")
@ -161,7 +161,7 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
request.add(new IndexRequest("index2").id("2") // will take global type
.source(XContentType.JSON, "field", "bulk2"));
bulk(request);
bulkWithTypes(request);
Iterable<SearchHit> hits = searchAll("index1", "index2");
assertThat(hits, containsInAnyOrder(
@ -174,7 +174,7 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
@SuppressWarnings("unchecked")
public void testGlobalRouting() throws IOException {
createIndexWithMultipleShards("index");
BulkRequest request = new BulkRequest(null, null);
BulkRequest request = new BulkRequest(null);
request.add(new IndexRequest("index").id("1")
.source(XContentType.JSON, "field", "bulk1"));
request.add(new IndexRequest("index").id("2")
@ -191,7 +191,7 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
@SuppressWarnings("unchecked")
public void testMixLocalAndGlobalRouting() throws IOException {
BulkRequest request = new BulkRequest(null, null);
BulkRequest request = new BulkRequest(null);
request.routing("globalRouting");
request.add(new IndexRequest("index").id("1")
.source(XContentType.JSON, "field", "bulk1"));
@ -204,12 +204,32 @@ public class BulkRequestWithGlobalParametersIT extends ESRestHighLevelClientTest
Iterable<SearchHit> hits = searchAll(new SearchRequest("index").routing("globalRouting", "localRouting"));
assertThat(hits, containsInAnyOrder(hasId("1"), hasId("2")));
}
public void testGlobalIndexNoTypes() throws IOException {
BulkRequest request = new BulkRequest("global_index");
request.add(new IndexRequest().id("1")
.source(XContentType.JSON, "field", "bulk1"));
request.add(new IndexRequest().id("2")
.source(XContentType.JSON, "field", "bulk2"));
private BulkResponse bulk(BulkRequest request) throws IOException {
BulkResponse bulkResponse = execute(request, highLevelClient()::bulk, highLevelClient()::bulkAsync);
bulk(request);
Iterable<SearchHit> hits = searchAll("global_index");
assertThat(hits, everyItem(hasIndex("global_index")));
}
private BulkResponse bulkWithTypes(BulkRequest request) throws IOException {
BulkResponse bulkResponse = execute(request, highLevelClient()::bulk, highLevelClient()::bulkAsync,
expectWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE));
assertFalse(bulkResponse.hasFailures());
return bulkResponse;
}
private BulkResponse bulk(BulkRequest request) throws IOException {
BulkResponse bulkResponse = execute(request, highLevelClient()::bulk, highLevelClient()::bulkAsync, RequestOptions.DEFAULT);
assertFalse(bulkResponse.hasFailures());
return bulkResponse;
}
@SuppressWarnings("unchecked")
private static <T> Function<SearchHit, T> fieldFromSource(String fieldName) {

View File

@ -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)

View File

@ -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\":"

View File

@ -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);

View File

@ -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);

View File

@ -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)

View File

@ -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

View File

@ -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());

View File

@ -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[]

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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");

View File

@ -60,6 +60,15 @@ public interface DocWriteRequest<T> extends IndicesRequest {
*/
String type();
/**
* Set the default type supplied to a bulk
* request if this individual request's type is null
* or empty
* @return the Request
*/
T defaultTypeIfNull(String defaultType);
/**
* Get the id of the document for this request
* @return the id

View File

@ -19,6 +19,7 @@
package org.elasticsearch.action.bulk;
import org.apache.logging.log4j.LogManager;
import org.elasticsearch.action.ActionRequest;
import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.CompositeIndicesRequest;
@ -36,6 +37,7 @@ import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.logging.DeprecationLogger;
import org.elasticsearch.common.lucene.uid.Versions;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.LoggingDeprecationHandler;
@ -45,6 +47,8 @@ import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.VersionType;
import org.elasticsearch.index.seqno.SequenceNumbers;
import org.elasticsearch.rest.action.document.RestBulkAction;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import java.io.IOException;
@ -68,7 +72,7 @@ import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_PRIMARY_T
public class BulkRequest extends ActionRequest implements CompositeIndicesRequest, WriteRequest<BulkRequest> {
private static final int REQUEST_OVERHEAD = 50;
private static final DeprecationLogger deprecationLogger = new DeprecationLogger(LogManager.getLogger(BulkRequest.class));
private static final ParseField INDEX = new ParseField("_index");
private static final ParseField TYPE = new ParseField("_type");
private static final ParseField ID = new ParseField("_id");
@ -104,6 +108,14 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
public BulkRequest() {
}
public BulkRequest(@Nullable String globalIndex) {
this.globalIndex = globalIndex;
}
/**
* @deprecated Types are in the process of being removed. Use {@link #BulkRequest(String)} instead
*/
@Deprecated
public BulkRequest(@Nullable String globalIndex, @Nullable String globalType) {
this.globalIndex = globalIndex;
this.globalType = globalType;
@ -280,28 +292,71 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
/**
* Adds a framed data in binary format
* @deprecated use {@link #add(byte[], int, int, String, XContentType)} instead
*/
@Deprecated
public BulkRequest add(byte[] data, int from, int length, @Nullable String defaultIndex, @Nullable String defaultType,
XContentType xContentType) throws IOException {
return add(new BytesArray(data, from, length), defaultIndex, defaultType, xContentType);
}
/**
* Adds a framed data in binary format
*/
public BulkRequest add(byte[] data, int from, int length, @Nullable String defaultIndex,
XContentType xContentType) throws IOException {
return add(new BytesArray(data, from, length), defaultIndex, MapperService.SINGLE_MAPPING_NAME, xContentType);
}
/**
* Adds a framed data in binary format
* @deprecated use {@link #add(BytesReference, String, XContentType)} instead
*/
@Deprecated
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Nullable String defaultType,
XContentType xContentType) throws IOException {
return add(data, defaultIndex, defaultType, null, null, null, null, true, xContentType);
}
/**
* Adds a framed data in binary format
*/
public BulkRequest add(BytesReference data, @Nullable String defaultIndex,
XContentType xContentType) throws IOException {
return add(data, defaultIndex, MapperService.SINGLE_MAPPING_NAME, null, null, null, null, true, xContentType);
}
/**
* Adds a framed data in binary format
* @deprecated use {@link #add(BytesReference, String, boolean, XContentType)} instead
*/
@Deprecated
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Nullable String defaultType, boolean allowExplicitIndex,
XContentType xContentType) throws IOException {
return add(data, defaultIndex, defaultType, null, null, null, null, allowExplicitIndex, xContentType);
}
/**
* Adds a framed data in binary format
*/
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, boolean allowExplicitIndex,
XContentType xContentType) throws IOException {
return add(data, defaultIndex, MapperService.SINGLE_MAPPING_NAME, null, null, null, null, allowExplicitIndex, xContentType);
}
public BulkRequest add(BytesReference data, @Nullable String defaultIndex,
@Nullable String defaultRouting, @Nullable FetchSourceContext defaultFetchSourceContext,
@Nullable String defaultPipeline, @Nullable Object payload, boolean allowExplicitIndex,
XContentType xContentType) throws IOException {
return add(data, defaultIndex, MapperService.SINGLE_MAPPING_NAME, defaultRouting, defaultFetchSourceContext,
defaultPipeline, payload, allowExplicitIndex, xContentType);
}
/**
* @deprecated use {@link #add(BytesReference, String, String, FetchSourceContext, String, Object, boolean, XContentType)} instead
*/
@Deprecated
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Nullable String defaultType,
@Nullable String defaultRouting, @Nullable FetchSourceContext defaultFetchSourceContext,
@Nullable String defaultPipeline, @Nullable Object payload, boolean allowExplicitIndex,
@ -371,7 +426,8 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
throw new IllegalArgumentException("explicit index in bulk is not allowed");
}
index = parser.text();
} else if (TYPE.match(currentFieldName, parser.getDeprecationHandler())) {
} else if (TYPE.match(currentFieldName, parser.getDeprecationHandler())) {
deprecationLogger.deprecatedAndMaybeLog("bulk_with_types", RestBulkAction.TYPES_DEPRECATION_MESSAGE);
type = parser.text();
} else if (ID.match(currentFieldName, parser.getDeprecationHandler())) {
id = parser.text();
@ -625,7 +681,9 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques
private void applyGlobalMandatoryParameters(DocWriteRequest<?> request) {
request.index(valueOrDefault(request.index(), globalIndex));
request.type(valueOrDefault(request.type(), globalType));
if (Strings.isNullOrEmpty(globalType) == false && MapperService.SINGLE_MAPPING_NAME.equals(globalType) == false) {
request.defaultTypeIfNull(globalType);
}
}
private static String valueOrDefault(String value, String globalDefault) {

View File

@ -33,6 +33,7 @@ import org.elasticsearch.client.ElasticsearchClient;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.mapper.MapperService;
/**
* A bulk request holds an ordered {@link IndexRequest}s and {@link DeleteRequest}s and allows to executes
@ -41,10 +42,18 @@ import org.elasticsearch.common.xcontent.XContentType;
public class BulkRequestBuilder extends ActionRequestBuilder<BulkRequest, BulkResponse>
implements WriteRequestBuilder<BulkRequestBuilder> {
/**
* @deprecated use {@link #BulkRequestBuilder(ElasticsearchClient, BulkAction, String)} instead
*/
@Deprecated
public BulkRequestBuilder(ElasticsearchClient client, BulkAction action, @Nullable String globalIndex, @Nullable String globalType) {
super(client, action, new BulkRequest(globalIndex, globalType));
}
public BulkRequestBuilder(ElasticsearchClient client, BulkAction action, @Nullable String globalIndex) {
super(client, action, new BulkRequest(globalIndex));
}
public BulkRequestBuilder(ElasticsearchClient client, BulkAction action) {
super(client, action, new BulkRequest());
}
@ -104,18 +113,29 @@ public class BulkRequestBuilder extends ActionRequestBuilder<BulkRequest, BulkRe
* Adds a framed data in binary format
*/
public BulkRequestBuilder add(byte[] data, int from, int length, XContentType xContentType) throws Exception {
request.add(data, from, length, null, null, xContentType);
request.add(data, from, length, null, xContentType);
return this;
}
/**
* Adds a framed data in binary format
* @deprecated use {@link #add(byte[], int, int, String, XContentType)} instead
*/
@Deprecated
public BulkRequestBuilder add(byte[] data, int from, int length, @Nullable String defaultIndex, @Nullable String defaultType,
XContentType xContentType) throws Exception {
request.add(data, from, length, defaultIndex, defaultType, xContentType);
return this;
}
/**
* Adds a framed data in binary format
*/
public BulkRequestBuilder add(byte[] data, int from, int length, @Nullable String defaultIndex, @Nullable String defaultType,
public BulkRequestBuilder add(byte[] data, int from, int length, @Nullable String defaultIndex,
XContentType xContentType) throws Exception {
request.add(data, from, length, defaultIndex, defaultType, xContentType);
request.add(data, from, length, defaultIndex, MapperService.SINGLE_MAPPING_NAME, xContentType);
return this;
}
}
/**
* Sets the number of shard copies that must be active before proceeding with the write.

View File

@ -78,6 +78,7 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.LongSupplier;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import static java.util.Collections.emptyMap;
@ -113,7 +114,7 @@ public class TransportBulkAction extends HandledTransportAction<BulkRequest, Bul
TransportShardBulkAction shardBulkAction, NodeClient client,
ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver,
AutoCreateIndex autoCreateIndex, LongSupplier relativeTimeProvider) {
super(BulkAction.NAME, transportService, actionFilters, BulkRequest::new);
super(BulkAction.NAME, transportService, actionFilters, (Supplier<BulkRequest>) BulkRequest::new);
Objects.requireNonNull(relativeTimeProvider);
this.threadPool = threadPool;
this.clusterService = clusterService;

View File

@ -53,7 +53,8 @@ import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO;
public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
implements DocWriteRequest<DeleteRequest>, CompositeIndicesRequest {
private String type = MapperService.SINGLE_MAPPING_NAME;
// Set to null initially so we can know to override in bulk requests that have a default type.
private String type;
private String id;
@Nullable
private String routing;
@ -103,7 +104,7 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
@Override
public ActionRequestValidationException validate() {
ActionRequestValidationException validationException = super.validate();
if (Strings.isEmpty(type)) {
if (Strings.isEmpty(type())) {
validationException = addValidationError("type is missing", validationException);
}
if (Strings.isEmpty(id)) {
@ -142,6 +143,9 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
@Deprecated
@Override
public String type() {
if (type == null) {
return MapperService.SINGLE_MAPPING_NAME;
}
return type;
}
@ -156,6 +160,22 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
this.type = type;
return this;
}
/**
* Set the default type supplied to a bulk
* request if this individual request's type is null
* or empty
*
* @deprecated Types are in the process of being removed.
*/
@Deprecated
@Override
public DeleteRequest defaultTypeIfNull(String defaultType) {
if (Strings.isNullOrEmpty(type)) {
type = defaultType;
}
return this;
}
/**
* The id of the document to delete.
@ -295,7 +315,9 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
out.writeString(type);
// A 7.x request allows null types but if deserialized in a 6.x node will cause nullpointer exceptions.
// So we use the type accessor method here to make the type non-null (will default it to "_doc").
out.writeString(type());
out.writeString(id);
out.writeOptionalString(routing());
if (out.getVersion().before(Version.V_7_0_0)) {
@ -316,7 +338,7 @@ public class DeleteRequest extends ReplicatedWriteRequest<DeleteRequest>
@Override
public String toString() {
return "delete {[" + index + "][" + type + "][" + id + "]}";
return "delete {[" + index + "][" + type() + "][" + id + "]}";
}
/**

View File

@ -31,6 +31,7 @@ import org.elasticsearch.client.Requests;
import org.elasticsearch.cluster.metadata.MappingMetaData;
import org.elasticsearch.cluster.metadata.MetaData;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.UUIDs;
import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.bytes.BytesReference;
@ -82,7 +83,8 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
*/
static final int MAX_SOURCE_LENGTH_IN_TOSTRING = 2048;
private String type = MapperService.SINGLE_MAPPING_NAME;
// Set to null initially so we can know to override in bulk requests that have a default type.
private String type;
private String id;
@Nullable
private String routing;
@ -152,12 +154,12 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
@Override
public ActionRequestValidationException validate() {
ActionRequestValidationException validationException = super.validate();
if (type == null) {
validationException = addValidationError("type is missing", validationException);
}
if (source == null) {
validationException = addValidationError("source is missing", validationException);
}
if (Strings.isEmpty(type())) {
validationException = addValidationError("type is missing", validationException);
}
if (contentType == null) {
validationException = addValidationError("content type is missing", validationException);
}
@ -239,6 +241,9 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
@Deprecated
@Override
public String type() {
if (type == null) {
return MapperService.SINGLE_MAPPING_NAME;
}
return type;
}
@ -253,6 +258,20 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
return this;
}
/**
* Set the default type supplied to a bulk
* request if this individual request's type is null
* or empty
* @deprecated Types are in the process of being removed.
*/
@Deprecated
@Override
public IndexRequest defaultTypeIfNull(String defaultType) {
if (Strings.isNullOrEmpty(type)) {
type = defaultType;
}
return this;
}
/**
* The id of the indexed document. If not set, will be automatically generated.
*/
@ -563,7 +582,7 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
if (mappingMd != null) {
// might as well check for routing here
if (mappingMd.routing().required() && routing == null) {
throw new RoutingMissingException(concreteIndex, type, id);
throw new RoutingMissingException(concreteIndex, type(), id);
}
}
@ -629,7 +648,9 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
out.writeOptionalString(type);
// A 7.x request allows null types but if deserialized in a 6.x node will cause nullpointer exceptions.
// So we use the type accessor method here to make the type non-null (will default it to "_doc").
out.writeOptionalString(type());
out.writeOptionalString(id);
out.writeOptionalString(routing);
if (out.getVersion().before(Version.V_7_0_0)) {
@ -679,7 +700,7 @@ public class IndexRequest extends ReplicatedWriteRequest<IndexRequest> implement
} catch (Exception e) {
// ignore
}
return "index {[" + index + "][" + type + "][" + id + "], source[" + sSource + "]}";
return "index {[" + index + "][" + type() + "][" + id + "], source[" + sSource + "]}";
}

View File

@ -91,7 +91,8 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
ObjectParser.ValueType.OBJECT_ARRAY_BOOLEAN_OR_STRING);
}
private String type = MapperService.SINGLE_MAPPING_NAME;
// Set to null initially so we can know to override in bulk requests that have a default type.
private String type;
private String id;
@Nullable
private String routing;
@ -146,7 +147,7 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
if(upsertRequest != null && upsertRequest.version() != Versions.MATCH_ANY) {
validationException = addValidationError("can't provide version in upsert request", validationException);
}
if (Strings.isEmpty(type)) {
if (Strings.isEmpty(type())) {
validationException = addValidationError("type is missing", validationException);
}
if (Strings.isEmpty(id)) {
@ -189,6 +190,9 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
@Deprecated
@Override
public String type() {
if (type == null) {
return MapperService.SINGLE_MAPPING_NAME;
}
return type;
}
@ -203,6 +207,21 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
return this;
}
/**
* Set the default type supplied to a bulk
* request if this individual request's type is null
* or empty
* @deprecated Types are in the process of being removed.
*/
@Deprecated
@Override
public UpdateRequest defaultTypeIfNull(String defaultType) {
if (Strings.isNullOrEmpty(type)) {
type = defaultType;
}
return this;
}
/**
* The id of the indexed document.
*/
@ -800,7 +819,9 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
waitForActiveShards.writeTo(out);
out.writeString(type);
// A 7.x request allows null types but if deserialized in a 6.x node will cause nullpointer exceptions.
// So we use the type accessor method here to make the type non-null (will default it to "_doc").
out.writeString(type());
out.writeString(id);
out.writeOptionalString(routing);
if (out.getVersion().before(Version.V_7_0_0)) {
@ -887,7 +908,7 @@ public class UpdateRequest extends InstanceShardOperationRequest<UpdateRequest>
public String toString() {
StringBuilder res = new StringBuilder()
.append("update {[").append(index)
.append("][").append(type)
.append("][").append(type())
.append("][").append(id).append("]");
res.append(", doc_as_upsert[").append(docAsUpsert).append("]");
if (doc != null) {

View File

@ -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);

View File

@ -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());
}

View File

@ -34,6 +34,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentHelper;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.action.document.RestBulkAction;
import org.elasticsearch.script.Script;
import org.elasticsearch.test.ESTestCase;
@ -57,42 +58,46 @@ public class BulkRequestTests extends ESTestCase {
public void testSimpleBulk1() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk.json");
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
assertThat(bulkRequest.numberOfActions(), equalTo(3));
assertThat(((IndexRequest) bulkRequest.requests().get(0)).source(), equalTo(new BytesArray("{ \"field1\" : \"value1\" }")));
assertThat(bulkRequest.requests().get(1), instanceOf(DeleteRequest.class));
assertThat(((IndexRequest) bulkRequest.requests().get(2)).source(), equalTo(new BytesArray("{ \"field1\" : \"value3\" }")));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testSimpleBulkWithCarriageReturn() throws Exception {
String bulkAction = "{ \"index\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\"} }\r\n{ \"field1\" : \"value1\" }\r\n";
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
assertThat(bulkRequest.numberOfActions(), equalTo(1));
assertThat(((IndexRequest) bulkRequest.requests().get(0)).source(), equalTo(new BytesArray("{ \"field1\" : \"value1\" }")));
Map<String, Object> sourceMap = XContentHelper.convertToMap(((IndexRequest) bulkRequest.requests().get(0)).source(),
false, XContentType.JSON).v2();
assertEquals("value1", sourceMap.get("field1"));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testSimpleBulk2() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk2.json");
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
assertThat(bulkRequest.numberOfActions(), equalTo(3));
}
public void testSimpleBulk3() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk3.json");
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
assertThat(bulkRequest.numberOfActions(), equalTo(3));
}
public void testSimpleBulk4() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk4.json");
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
assertThat(bulkRequest.numberOfActions(), equalTo(4));
assertThat(bulkRequest.requests().get(0).id(), equalTo("1"));
assertThat(((UpdateRequest) bulkRequest.requests().get(0)).retryOnConflict(), equalTo(2));
@ -109,6 +114,8 @@ public class BulkRequestTests extends ESTestCase {
assertThat(scriptParams.size(), equalTo(1));
assertThat(scriptParams.get("param1"), equalTo(1));
assertThat(((UpdateRequest) bulkRequest.requests().get(1)).upsertRequest().source().utf8ToString(), equalTo("{\"counter\":1}"));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testBulkAllowExplicitIndex() throws Exception {
@ -120,6 +127,8 @@ public class BulkRequestTests extends ESTestCase {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk5.json");
new BulkRequest().add(new BytesArray(bulkAction.getBytes(StandardCharsets.UTF_8)), "test", null, false, XContentType.JSON);
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testBulkAddIterable() {
@ -139,32 +148,38 @@ public class BulkRequestTests extends ESTestCase {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk6.json");
BulkRequest bulkRequest = new BulkRequest();
ParsingException exc = expectThrows(ParsingException.class,
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
assertThat(exc.getMessage(), containsString("Unknown key for a VALUE_STRING in [hello]"));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testSimpleBulk7() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk7.json");
BulkRequest bulkRequest = new BulkRequest();
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
assertThat(exc.getMessage(),
containsString("Malformed action/metadata line [5], expected a simple value for field [_unknown] but found [START_ARRAY]"));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testSimpleBulk8() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk8.json");
BulkRequest bulkRequest = new BulkRequest();
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
assertThat(exc.getMessage(), containsString("Action/metadata line [3] contains an unknown parameter [_foo]"));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testSimpleBulk9() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk9.json");
BulkRequest bulkRequest = new BulkRequest();
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
assertThat(exc.getMessage(),
containsString("Malformed action/metadata line [3], expected START_OBJECT or END_OBJECT but found [START_ARRAY]"));
}
@ -172,8 +187,10 @@ public class BulkRequestTests extends ESTestCase {
public void testSimpleBulk10() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk10.json");
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
assertThat(bulkRequest.numberOfActions(), equalTo(9));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testBulkActionShouldNotContainArray() throws Exception {
@ -181,13 +198,13 @@ public class BulkRequestTests extends ESTestCase {
+ "{ \"field1\" : \"value1\" }\r\n";
BulkRequest bulkRequest = new BulkRequest();
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
assertEquals(exc.getMessage(), "Malformed action/metadata line [1]" +
", expected a simple value for field [_index] but found [START_ARRAY]");
}
public void testBulkEmptyObject() throws Exception {
String bulkIndexAction = "{ \"index\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\"} }\r\n";
String bulkIndexAction = "{ \"index\":{\"_index\":\"test\",\"_id\":\"1\"} }\r\n";
String bulkIndexSource = "{ \"field1\" : \"value1\" }\r\n";
String emptyObject = "{}\r\n";
StringBuilder bulk = new StringBuilder();
@ -207,7 +224,7 @@ public class BulkRequestTests extends ESTestCase {
String bulkAction = bulk.toString();
BulkRequest bulkRequest = new BulkRequest();
IllegalArgumentException exc = expectThrows(IllegalArgumentException.class,
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
() -> bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
assertThat(exc.getMessage(), containsString("Malformed action/metadata line ["
+ emptyLine + "], expected FIELD_NAME but found [END_OBJECT]"));
}
@ -218,7 +235,7 @@ public class BulkRequestTests extends ESTestCase {
// We force here a "id is missing" validation error
bulkRequest.add(new DeleteRequest("index", "type", null).setRefreshPolicy(RefreshPolicy.IMMEDIATE));
// We force here a "type is missing" validation error
bulkRequest.add(new DeleteRequest("index", null, "id"));
bulkRequest.add(new DeleteRequest("index", "", "id"));
bulkRequest.add(new DeleteRequest("index", "type", "id").setRefreshPolicy(RefreshPolicy.IMMEDIATE));
bulkRequest.add(new UpdateRequest("index", "type", "id").doc("{}", XContentType.JSON).setRefreshPolicy(RefreshPolicy.IMMEDIATE));
bulkRequest.add(new IndexRequest("index", "type", "id").source("{}", XContentType.JSON).setRefreshPolicy(RefreshPolicy.IMMEDIATE));
@ -290,6 +307,8 @@ public class BulkRequestTests extends ESTestCase {
IndexRequest request = (IndexRequest) docWriteRequest;
assertEquals(1, request.sourceAsMap().size());
assertEquals("value", request.sourceAsMap().get("field"));
//This test's content contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testToValidateUpsertRequestAndVersionInBulkRequest() throws IOException {
@ -324,18 +343,22 @@ public class BulkRequestTests extends ESTestCase {
bulkRequest.add(data, null, null, xContentType);
assertThat(bulkRequest.validate().validationErrors(), contains("can't provide both upsert request and a version",
"can't provide version in upsert request"));
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
public void testBulkTerminatedByNewline() throws Exception {
String bulkAction = copyToStringFromClasspath("/org/elasticsearch/action/bulk/simple-bulk11.json");
IllegalArgumentException expectThrows = expectThrows(IllegalArgumentException.class, () -> new BulkRequest()
.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON));
.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON));
assertEquals("The bulk request must be terminated by a newline [\n]", expectThrows.getMessage());
String bulkActionWithNewLine = bulkAction + "\n";
BulkRequest bulkRequestWithNewLine = new BulkRequest();
bulkRequestWithNewLine.add(bulkActionWithNewLine.getBytes(StandardCharsets.UTF_8), 0, bulkActionWithNewLine.length(), null, null,
bulkRequestWithNewLine.add(bulkActionWithNewLine.getBytes(StandardCharsets.UTF_8), 0, bulkActionWithNewLine.length(), null,
XContentType.JSON);
assertEquals(3, bulkRequestWithNewLine.numberOfActions());
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
}

View File

@ -38,6 +38,7 @@ import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.AtomicArray;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.IndexNotFoundException;
import org.elasticsearch.rest.action.document.RestBulkAction;
import org.elasticsearch.tasks.Task;
import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.test.transport.CapturingTransport;
@ -178,7 +179,7 @@ public class TransportBulkActionTookTests extends ESTestCase {
bulkAction = Strings.replace(bulkAction, "\r\n", "\n");
}
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, null, XContentType.JSON);
bulkRequest.add(bulkAction.getBytes(StandardCharsets.UTF_8), 0, bulkAction.length(), null, XContentType.JSON);
AtomicLong expected = new AtomicLong();
TransportBulkAction action = createAction(controlled, expected);
action.doExecute(null, bulkRequest, new ActionListener<BulkResponse>() {
@ -200,6 +201,8 @@ public class TransportBulkActionTookTests extends ESTestCase {
}
});
//This test's JSON contains outdated references to types
assertWarnings(RestBulkAction.TYPES_DEPRECATION_MESSAGE);
}
static class Resolver extends IndexNameExpressionResolver {

View File

@ -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"));
}
}
}

View File

@ -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();

View File

@ -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" +

View File

@ -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")));
}

View File

@ -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");
}

View File

@ -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 {

View File

@ -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);
}
/**

View File

@ -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);
}
/**

View File

@ -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();

View File

@ -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);

View File

@ -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) {

View File

@ -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++) {

View File

@ -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++) {

View File

@ -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) -> {

View File

@ -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;

View File

@ -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) {

View File

@ -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");

View File

@ -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);
}