5454import org .elasticsearch .index .VersionType ;
5555import org .elasticsearch .index .engine .Engine ;
5656import org .elasticsearch .index .engine .VersionConflictEngineException ;
57+ import org .elasticsearch .index .get .GetResult ;
5758import org .elasticsearch .index .mapper .MapperParsingException ;
5859import org .elasticsearch .index .mapper .Mapping ;
5960import org .elasticsearch .index .mapper .SourceToParse ;
@@ -142,7 +143,7 @@ private static BulkItemResultHolder executeIndexRequest(final IndexRequest index
142143 return new BulkItemResultHolder (null , indexResult , bulkItemRequest );
143144 } else {
144145 IndexResponse response = new IndexResponse (primary .shardId (), indexRequest .type (), indexRequest .id (),
145- indexResult .getSeqNo (), indexResult .getVersion (), indexResult .isCreated ());
146+ indexResult .getSeqNo (), primary . getPrimaryTerm (), indexResult .getVersion (), indexResult .isCreated ());
146147 return new BulkItemResultHolder (response , indexResult , bulkItemRequest );
147148 }
148149 }
@@ -155,7 +156,7 @@ private static BulkItemResultHolder executeDeleteRequest(final DeleteRequest del
155156 return new BulkItemResultHolder (null , deleteResult , bulkItemRequest );
156157 } else {
157158 DeleteResponse response = new DeleteResponse (primary .shardId (), deleteRequest .type (), deleteRequest .id (),
158- deleteResult .getSeqNo (), deleteResult .getVersion (), deleteResult .isFound ());
159+ deleteResult .getSeqNo (), primary . getPrimaryTerm (), deleteResult .getVersion (), deleteResult .isFound ());
159160 return new BulkItemResultHolder (response , deleteResult , bulkItemRequest );
160161 }
161162 }
@@ -276,7 +277,7 @@ private static BulkItemResultHolder executeUpdateRequest(UpdateRequest updateReq
276277 int requestIndex , UpdateHelper updateHelper ,
277278 LongSupplier nowInMillis ,
278279 final MappingUpdatePerformer mappingUpdater ) throws Exception {
279- Engine .Result updateOperationResult = null ;
280+ Engine .Result result = null ;
280281 UpdateResponse updateResponse = null ;
281282 BulkItemRequest replicaRequest = request .items ()[requestIndex ];
282283 int maxAttempts = updateRequest .retryOnConflict ();
@@ -288,7 +289,7 @@ private static BulkItemResultHolder executeUpdateRequest(UpdateRequest updateReq
288289 } catch (Exception failure ) {
289290 // we may fail translating a update to index or delete operation
290291 // we use index result to communicate failure while translating update request
291- updateOperationResult = new Engine .IndexResult (failure , updateRequest .version (), SequenceNumbersService .UNASSIGNED_SEQ_NO );
292+ result = new Engine .IndexResult (failure , updateRequest .version (), SequenceNumbersService .UNASSIGNED_SEQ_NO );
292293 break ; // out of retry loop
293294 }
294295 // execute translated update request
@@ -298,34 +299,46 @@ private static BulkItemResultHolder executeUpdateRequest(UpdateRequest updateReq
298299 IndexRequest indexRequest = translate .action ();
299300 MappingMetaData mappingMd = metaData .mappingOrDefault (indexRequest .type ());
300301 indexRequest .process (mappingMd , request .index ());
301- updateOperationResult = executeIndexRequestOnPrimary (indexRequest , primary , mappingUpdater );
302+ result = executeIndexRequestOnPrimary (indexRequest , primary , mappingUpdater );
302303 break ;
303304 case DELETED :
304305 DeleteRequest deleteRequest = translate .action ();
305- updateOperationResult = executeDeleteRequestOnPrimary (deleteRequest , primary );
306+ result = executeDeleteRequestOnPrimary (deleteRequest , primary );
306307 break ;
307308 case NOOP :
308309 primary .noopUpdate (updateRequest .type ());
309310 break ;
310311 default : throw new IllegalStateException ("Illegal update operation " + translate .getResponseResult ());
311312 }
312- if (updateOperationResult == null ) {
313+ if (result == null ) {
313314 // this is a noop operation
314315 updateResponse = translate .action ();
315316 break ; // out of retry loop
316- } else if (updateOperationResult .hasFailure () == false ) {
317+ } else if (result .hasFailure () == false ) {
317318 // enrich update response and
318319 // set translated update (index/delete) request for replica execution in bulk items
319- switch (updateOperationResult .getOperationType ()) {
320+ switch (result .getOperationType ()) {
320321 case INDEX :
322+ assert result instanceof Engine .IndexResult : result .getClass ();
321323 IndexRequest updateIndexRequest = translate .action ();
322- final IndexResponse indexResponse = new IndexResponse (primary .shardId (),
323- updateIndexRequest .type (), updateIndexRequest .id (), updateOperationResult .getSeqNo (),
324- updateOperationResult .getVersion (), ((Engine .IndexResult ) updateOperationResult ).isCreated ());
324+ final IndexResponse indexResponse = new IndexResponse (
325+ primary .shardId (),
326+ updateIndexRequest .type (),
327+ updateIndexRequest .id (),
328+ result .getSeqNo (),
329+ primary .getPrimaryTerm (),
330+ result .getVersion (),
331+ ((Engine .IndexResult ) result ).isCreated ());
325332 BytesReference indexSourceAsBytes = updateIndexRequest .source ();
326- updateResponse = new UpdateResponse (indexResponse .getShardInfo (),
327- indexResponse .getShardId (), indexResponse .getType (), indexResponse .getId (), indexResponse .getSeqNo (),
328- indexResponse .getVersion (), indexResponse .getResult ());
333+ updateResponse = new UpdateResponse (
334+ indexResponse .getShardInfo (),
335+ indexResponse .getShardId (),
336+ indexResponse .getType (),
337+ indexResponse .getId (),
338+ indexResponse .getSeqNo (),
339+ indexResponse .getPrimaryTerm (),
340+ indexResponse .getVersion (),
341+ indexResponse .getResult ());
329342 if ((updateRequest .fetchSource () != null && updateRequest .fetchSource ().fetchSource ()) ||
330343 (updateRequest .fields () != null && updateRequest .fields ().length > 0 )) {
331344 Tuple <XContentType , Map <String , Object >> sourceAndContent =
@@ -337,29 +350,46 @@ private static BulkItemResultHolder executeUpdateRequest(UpdateRequest updateReq
337350 replicaRequest = new BulkItemRequest (request .items ()[requestIndex ].id (), updateIndexRequest );
338351 break ;
339352 case DELETE :
353+ assert result instanceof Engine .DeleteResult : result .getClass ();
340354 DeleteRequest updateDeleteRequest = translate .action ();
341- DeleteResponse deleteResponse = new DeleteResponse (primary .shardId (),
342- updateDeleteRequest .type (), updateDeleteRequest .id (), updateOperationResult .getSeqNo (),
343- updateOperationResult .getVersion (), ((Engine .DeleteResult ) updateOperationResult ).isFound ());
344- updateResponse = new UpdateResponse (deleteResponse .getShardInfo (),
345- deleteResponse .getShardId (), deleteResponse .getType (), deleteResponse .getId (), deleteResponse .getSeqNo (),
346- deleteResponse .getVersion (), deleteResponse .getResult ());
347- updateResponse .setGetResult (updateHelper .extractGetResult (updateRequest ,
348- request .index (), deleteResponse .getVersion (), translate .updatedSourceAsMap (),
349- translate .updateSourceContentType (), null ));
355+ DeleteResponse deleteResponse = new DeleteResponse (
356+ primary .shardId (),
357+ updateDeleteRequest .type (),
358+ updateDeleteRequest .id (),
359+ result .getSeqNo (),
360+ primary .getPrimaryTerm (),
361+ result .getVersion (),
362+ ((Engine .DeleteResult ) result ).isFound ());
363+ updateResponse = new UpdateResponse (
364+ deleteResponse .getShardInfo (),
365+ deleteResponse .getShardId (),
366+ deleteResponse .getType (),
367+ deleteResponse .getId (),
368+ deleteResponse .getSeqNo (),
369+ deleteResponse .getPrimaryTerm (),
370+ deleteResponse .getVersion (),
371+ deleteResponse .getResult ());
372+ final GetResult getResult = updateHelper .extractGetResult (
373+ updateRequest ,
374+ request .index (),
375+ deleteResponse .getVersion (),
376+ translate .updatedSourceAsMap (),
377+ translate .updateSourceContentType (),
378+ null );
379+ updateResponse .setGetResult (getResult );
350380 // set translated request as replica request
351381 replicaRequest = new BulkItemRequest (request .items ()[requestIndex ].id (), updateDeleteRequest );
352382 break ;
353383 }
354- assert updateOperationResult .getSeqNo () != SequenceNumbersService .UNASSIGNED_SEQ_NO ;
384+ assert result .getSeqNo () != SequenceNumbersService .UNASSIGNED_SEQ_NO ;
355385 // successful operation
356386 break ; // out of retry loop
357- } else if (updateOperationResult .getFailure () instanceof VersionConflictEngineException == false ) {
387+ } else if (result .getFailure () instanceof VersionConflictEngineException == false ) {
358388 // not a version conflict exception
359389 break ; // out of retry loop
360390 }
361391 }
362- return new BulkItemResultHolder (updateResponse , updateOperationResult , replicaRequest );
392+ return new BulkItemResultHolder (updateResponse , result , replicaRequest );
363393 }
364394
365395 /** Modes for executing item request on replica depending on corresponding primary execution result */
@@ -513,8 +543,7 @@ private static Engine.IndexResult executeIndexRequestOnReplica(
513543 try {
514544 operation = prepareIndexOperationOnReplica (primaryResponse , request , replica );
515545 } catch (MapperParsingException e ) {
516- return new Engine .IndexResult (e , primaryResponse .getVersion (),
517- primaryResponse .getSeqNo ());
546+ return new Engine .IndexResult (e , primaryResponse .getVersion (), primaryResponse .getSeqNo ());
518547 }
519548
520549 Mapping update = operation .parsedDoc ().dynamicMappingsUpdate ();
0 commit comments