Skip to content

Commit 35ddc74

Browse files
committed
Merge pull request #12060 from cbuescher/fix/9821
Fix: Use correct OpType on Failure in BulkItemResponse
2 parents d732c0d + 201dc87 commit 35ddc74

File tree

3 files changed

+45
-5
lines changed

3 files changed

+45
-5
lines changed

core/src/main/java/org/elasticsearch/action/bulk/BulkItemResponse.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
package org.elasticsearch.action.bulk;
2121

22-
import org.elasticsearch.ElasticsearchException;
2322
import org.elasticsearch.ExceptionsHelper;
2423
import org.elasticsearch.action.ActionWriteResponse;
2524
import org.elasticsearch.action.delete.DeleteResponse;
@@ -28,7 +27,6 @@
2827
import org.elasticsearch.common.io.stream.StreamInput;
2928
import org.elasticsearch.common.io.stream.StreamOutput;
3029
import org.elasticsearch.common.io.stream.Streamable;
31-
import org.elasticsearch.common.xcontent.XContentBuilder;
3230
import org.elasticsearch.rest.RestStatus;
3331

3432
import java.io.IOException;

core/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,13 @@ private boolean setResponseFailureIfIndexMatches(AtomicArray<BulkItemResponse> r
168168
} else if (request instanceof DeleteRequest) {
169169
DeleteRequest deleteRequest = (DeleteRequest) request;
170170
if (index.equals(deleteRequest.index())) {
171-
responses.set(idx, new BulkItemResponse(idx, "index", new BulkItemResponse.Failure(deleteRequest.index(), deleteRequest.type(), deleteRequest.id(), e)));
171+
responses.set(idx, new BulkItemResponse(idx, "delete", new BulkItemResponse.Failure(deleteRequest.index(), deleteRequest.type(), deleteRequest.id(), e)));
172172
return true;
173173
}
174174
} else if (request instanceof UpdateRequest) {
175175
UpdateRequest updateRequest = (UpdateRequest) request;
176176
if (index.equals(updateRequest.index())) {
177-
responses.set(idx, new BulkItemResponse(idx, "index", new BulkItemResponse.Failure(updateRequest.index(), updateRequest.type(), updateRequest.id(), e)));
177+
responses.set(idx, new BulkItemResponse(idx, "update", new BulkItemResponse.Failure(updateRequest.index(), updateRequest.type(), updateRequest.id(), e)));
178178
return true;
179179
}
180180
} else {
@@ -379,7 +379,15 @@ private boolean addFailureIfIndexIsUnavailable(DocumentRequest request, BulkRequ
379379
if (unavailableException != null) {
380380
BulkItemResponse.Failure failure = new BulkItemResponse.Failure(request.index(), request.type(), request.id(),
381381
unavailableException);
382-
BulkItemResponse bulkItemResponse = new BulkItemResponse(idx, "index", failure);
382+
String operationType = "unknown";
383+
if (request instanceof IndexRequest) {
384+
operationType = "index";
385+
} else if (request instanceof DeleteRequest) {
386+
operationType = "delete";
387+
} else if (request instanceof UpdateRequest) {
388+
operationType = "update";
389+
}
390+
BulkItemResponse bulkItemResponse = new BulkItemResponse(idx, operationType, failure);
383391
responses.set(idx, bulkItemResponse);
384392
// make sure the request gets never processed again
385393
bulkRequest.requests.set(idx, null);

core/src/test/java/org/elasticsearch/document/BulkTests.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,5 +725,39 @@ public void testThatMissingIndexDoesNotAbortFullBulkRequest() throws Exception{
725725
assertThat(bulkResponse.hasFailures(), is(true));
726726
assertThat(bulkResponse.getItems().length, is(5));
727727
}
728+
729+
@Test // issue 9821
730+
public void testFailedRequestsOnClosedIndex() throws Exception {
731+
createIndex("bulkindex1");
732+
ensureYellow();
733+
734+
client().prepareIndex("bulkindex1", "index1_type", "1").setSource("text", "test").get();
735+
assertAcked(client().admin().indices().prepareClose("bulkindex1"));
736+
737+
BulkRequest bulkRequest = new BulkRequest();
738+
bulkRequest.add(new IndexRequest("bulkindex1", "index1_type", "1").source("text", "hallo1"))
739+
.add(new UpdateRequest("bulkindex1", "index1_type", "1").doc("foo", "bar"))
740+
.add(new DeleteRequest("bulkindex1", "index1_type", "1")).refresh(true);
741+
742+
BulkResponse bulkResponse = client().bulk(bulkRequest).get();
743+
assertThat(bulkResponse.hasFailures(), is(true));
744+
BulkItemResponse[] responseItems = bulkResponse.getItems();
745+
assertThat(responseItems.length, is(3));
746+
assertThat(responseItems[0].getOpType(), is("index"));
747+
assertThat(responseItems[1].getOpType(), is("update"));
748+
assertThat(responseItems[2].getOpType(), is("delete"));
749+
}
750+
751+
@Test // issue 9821
752+
public void testInvalidIndexNamesCorrectOpType() {
753+
BulkResponse bulkResponse = client().prepareBulk()
754+
.add(client().prepareIndex().setIndex("INVALID.NAME").setType("type1").setId("1").setSource("field", 1))
755+
.add(client().prepareUpdate().setIndex("INVALID.NAME").setType("type1").setId("1").setDoc("field", randomInt()))
756+
.add(client().prepareDelete().setIndex("INVALID.NAME").setType("type1").setId("1")).get();
757+
assertThat(bulkResponse.getItems().length, is(3));
758+
assertThat(bulkResponse.getItems()[0].getOpType(), is("index"));
759+
assertThat(bulkResponse.getItems()[1].getOpType(), is("update"));
760+
assertThat(bulkResponse.getItems()[2].getOpType(), is("delete"));
761+
}
728762
}
729763

0 commit comments

Comments
 (0)