@@ -279,6 +279,17 @@ public final TasksClient tasks() {
279279 *
280280 * See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html">Bulk API on elastic.co</a>
281281 */
282+ public final BulkResponse bulk (BulkRequest bulkRequest , RequestOptions options ) throws IOException {
283+ return performRequestAndParseEntity (bulkRequest , RequestConverters ::bulk , options , BulkResponse ::fromXContent , emptySet ());
284+ }
285+
286+ /**
287+ * Executes a bulk request using the Bulk API
288+ *
289+ * See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html">Bulk API on elastic.co</a>
290+ * @deprecated Prefer {@link #bulk(BulkRequest, RequestOptions)}
291+ */
292+ @ Deprecated
282293 public final BulkResponse bulk (BulkRequest bulkRequest , Header ... headers ) throws IOException {
283294 return performRequestAndParseEntity (bulkRequest , RequestConverters ::bulk , BulkResponse ::fromXContent , emptySet (), headers );
284295 }
@@ -288,6 +299,17 @@ public final BulkResponse bulk(BulkRequest bulkRequest, Header... headers) throw
288299 *
289300 * See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html">Bulk API on elastic.co</a>
290301 */
302+ public final void bulkAsync (BulkRequest bulkRequest , RequestOptions options , ActionListener <BulkResponse > listener ) {
303+ performRequestAsyncAndParseEntity (bulkRequest , RequestConverters ::bulk , options , BulkResponse ::fromXContent , listener , emptySet ());
304+ }
305+
306+ /**
307+ * Asynchronously executes a bulk request using the Bulk API
308+ *
309+ * See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html">Bulk API on elastic.co</a>
310+ * @deprecated Prefer {@link #bulkAsync(BulkRequest, RequestOptions, ActionListener)}
311+ */
312+ @ Deprecated
291313 public final void bulkAsync (BulkRequest bulkRequest , ActionListener <BulkResponse > listener , Header ... headers ) {
292314 performRequestAsyncAndParseEntity (bulkRequest , RequestConverters ::bulk , BulkResponse ::fromXContent , listener , emptySet (), headers );
293315 }
@@ -584,23 +606,42 @@ public final void fieldCapsAsync(FieldCapabilitiesRequest fieldCapabilitiesReque
584606 FieldCapabilitiesResponse ::fromXContent , listener , emptySet (), headers );
585607 }
586608
609+ @ Deprecated
587610 protected final <Req extends ActionRequest , Resp > Resp performRequestAndParseEntity (Req request ,
588611 CheckedFunction <Req , Request , IOException > requestConverter ,
589612 CheckedFunction <XContentParser , Resp , IOException > entityParser ,
590613 Set <Integer > ignores , Header ... headers ) throws IOException {
591614 return performRequest (request , requestConverter , (response ) -> parseEntity (response .getEntity (), entityParser ), ignores , headers );
592615 }
593616
617+ protected final <Req extends ActionRequest , Resp > Resp performRequestAndParseEntity (Req request ,
618+ CheckedFunction <Req , Request , IOException > requestConverter ,
619+ RequestOptions options ,
620+ CheckedFunction <XContentParser , Resp , IOException > entityParser ,
621+ Set <Integer > ignores ) throws IOException {
622+ return performRequest (request , requestConverter , options ,
623+ response -> parseEntity (response .getEntity (), entityParser ), ignores );
624+ }
625+
626+ @ Deprecated
594627 protected final <Req extends ActionRequest , Resp > Resp performRequest (Req request ,
595628 CheckedFunction <Req , Request , IOException > requestConverter ,
596629 CheckedFunction <Response , Resp , IOException > responseConverter ,
597630 Set <Integer > ignores , Header ... headers ) throws IOException {
631+ return performRequest (request , requestConverter , optionsForHeaders (headers ), responseConverter , ignores );
632+ }
633+
634+ protected final <Req extends ActionRequest , Resp > Resp performRequest (Req request ,
635+ CheckedFunction <Req , Request , IOException > requestConverter ,
636+ RequestOptions options ,
637+ CheckedFunction <Response , Resp , IOException > responseConverter ,
638+ Set <Integer > ignores ) throws IOException {
598639 ActionRequestValidationException validationException = request .validate ();
599640 if (validationException != null ) {
600641 throw validationException ;
601642 }
602643 Request req = requestConverter .apply (request );
603- addHeaders ( req , headers );
644+ req . setOptions ( options );
604645 Response response ;
605646 try {
606647 response = client .performRequest (req );
@@ -626,6 +667,7 @@ protected final <Req extends ActionRequest, Resp> Resp performRequest(Req reques
626667 }
627668 }
628669
670+ @ Deprecated
629671 protected final <Req extends ActionRequest , Resp > void performRequestAsyncAndParseEntity (Req request ,
630672 CheckedFunction <Req , Request , IOException > requestConverter ,
631673 CheckedFunction <XContentParser , Resp , IOException > entityParser ,
@@ -634,10 +676,28 @@ protected final <Req extends ActionRequest, Resp> void performRequestAsyncAndPar
634676 listener , ignores , headers );
635677 }
636678
679+ protected final <Req extends ActionRequest , Resp > void performRequestAsyncAndParseEntity (Req request ,
680+ CheckedFunction <Req , Request , IOException > requestConverter ,
681+ RequestOptions options ,
682+ CheckedFunction <XContentParser , Resp , IOException > entityParser ,
683+ ActionListener <Resp > listener , Set <Integer > ignores ) {
684+ performRequestAsync (request , requestConverter , options ,
685+ response -> parseEntity (response .getEntity (), entityParser ), listener , ignores );
686+ }
687+
688+ @ Deprecated
637689 protected final <Req extends ActionRequest , Resp > void performRequestAsync (Req request ,
638690 CheckedFunction <Req , Request , IOException > requestConverter ,
639691 CheckedFunction <Response , Resp , IOException > responseConverter ,
640692 ActionListener <Resp > listener , Set <Integer > ignores , Header ... headers ) {
693+ performRequestAsync (request , requestConverter , optionsForHeaders (headers ), responseConverter , listener , ignores );
694+ }
695+
696+ protected final <Req extends ActionRequest , Resp > void performRequestAsync (Req request ,
697+ CheckedFunction <Req , Request , IOException > requestConverter ,
698+ RequestOptions options ,
699+ CheckedFunction <Response , Resp , IOException > responseConverter ,
700+ ActionListener <Resp > listener , Set <Integer > ignores ) {
641701 ActionRequestValidationException validationException = request .validate ();
642702 if (validationException != null ) {
643703 listener .onFailure (validationException );
@@ -650,19 +710,12 @@ protected final <Req extends ActionRequest, Resp> void performRequestAsync(Req r
650710 listener .onFailure (e );
651711 return ;
652712 }
653- addHeaders ( req , headers );
713+ req . setOptions ( options );
654714
655715 ResponseListener responseListener = wrapResponseListener (responseConverter , listener , ignores );
656716 client .performRequestAsync (req , responseListener );
657717 }
658718
659- private static void addHeaders (Request request , Header ... headers ) {
660- Objects .requireNonNull (headers , "headers cannot be null" );
661- for (Header header : headers ) {
662- request .addHeader (header .getName (), header .getValue ());
663- }
664- }
665-
666719 final <Resp > ResponseListener wrapResponseListener (CheckedFunction <Response , Resp , IOException > responseConverter ,
667720 ActionListener <Resp > actionListener , Set <Integer > ignores ) {
668721 return new ResponseListener () {
@@ -746,6 +799,15 @@ protected final <Resp> Resp parseEntity(final HttpEntity entity,
746799 }
747800 }
748801
802+ private static RequestOptions optionsForHeaders (Header [] headers ) {
803+ RequestOptions .Builder options = RequestOptions .DEFAULT .toBuilder ();
804+ for (Header header : headers ) {
805+ Objects .requireNonNull (header , "header cannot be null" );
806+ options .addHeader (header .getName (), header .getValue ());
807+ }
808+ return options .build ();
809+ }
810+
749811 static boolean convertExistsResponse (Response response ) {
750812 return response .getStatusLine ().getStatusCode () == 200 ;
751813 }
0 commit comments