79
79
import java .util .HashSet ;
80
80
import java .util .Iterator ;
81
81
import java .util .List ;
82
- import java .util .Locale ;
83
82
import java .util .Map ;
84
83
import java .util .Objects ;
85
84
import java .util .Set ;
@@ -163,7 +162,7 @@ protected void doExecute(Task task, BulkRequest bulkRequest, ActionListener<Bulk
163
162
IndexRequest indexRequest = getIndexWriteRequest (actionRequest );
164
163
if (indexRequest != null ) {
165
164
// Each index request needs to be evaluated, because this method also modifies the IndexRequest
166
- boolean indexRequestHasPipeline = resolveRequiredOrDefaultPipeline (actionRequest , indexRequest , metaData );
165
+ boolean indexRequestHasPipeline = resolvePipelines (actionRequest , indexRequest , metaData );
167
166
hasIndexRequestsWithPipelines |= indexRequestHasPipeline ;
168
167
}
169
168
@@ -269,16 +268,14 @@ public void onFailure(Exception e) {
269
268
}
270
269
}
271
270
272
- static boolean resolveRequiredOrDefaultPipeline (DocWriteRequest <?> originalRequest ,
273
- IndexRequest indexRequest ,
274
- MetaData metaData ) {
275
-
271
+ static boolean resolvePipelines (final DocWriteRequest <?> originalRequest , final IndexRequest indexRequest , final MetaData metaData ) {
276
272
if (indexRequest .isPipelineResolved () == false ) {
277
273
final String requestPipeline = indexRequest .getPipeline ();
278
274
indexRequest .setPipeline (IngestService .NOOP_PIPELINE_NAME );
279
- boolean requestCanOverridePipeline = true ;
280
- String requiredPipeline = null ;
281
- // start to look for default or required pipelines via settings found in the index meta data
275
+ indexRequest .setFinalPipeline (IngestService .NOOP_PIPELINE_NAME );
276
+ String defaultPipeline = null ;
277
+ String finalPipeline = null ;
278
+ // start to look for default or final pipelines via settings found in the index meta data
282
279
IndexMetaData indexMetaData = metaData .indices ().get (originalRequest .index ());
283
280
// check the alias for the index request (this is how normal index requests are modeled)
284
281
if (indexMetaData == null && indexRequest .index () != null ) {
@@ -298,64 +295,42 @@ static boolean resolveRequiredOrDefaultPipeline(DocWriteRequest<?> originalReque
298
295
}
299
296
if (indexMetaData != null ) {
300
297
final Settings indexSettings = indexMetaData .getSettings ();
301
- if (IndexSettings .REQUIRED_PIPELINE .exists (indexSettings )) {
302
- // find the required pipeline if one is defined from an existing index
303
- requiredPipeline = IndexSettings .REQUIRED_PIPELINE .get (indexSettings );
304
- assert IndexSettings .DEFAULT_PIPELINE .get (indexSettings ).equals (IngestService .NOOP_PIPELINE_NAME ) :
305
- IndexSettings .DEFAULT_PIPELINE .get (indexSettings );
306
- indexRequest .setPipeline (requiredPipeline );
307
- requestCanOverridePipeline = false ;
308
- } else {
309
- // find the default pipeline if one is defined from an existing index
310
- String defaultPipeline = IndexSettings .DEFAULT_PIPELINE .get (indexSettings );
298
+ if (IndexSettings .DEFAULT_PIPELINE .exists (indexSettings )) {
299
+ // find the default pipeline if one is defined from an existing index setting
300
+ defaultPipeline = IndexSettings .DEFAULT_PIPELINE .get (indexSettings );
311
301
indexRequest .setPipeline (defaultPipeline );
312
302
}
303
+ if (IndexSettings .FINAL_PIPELINE .exists (indexSettings )) {
304
+ // find the final pipeline if one is defined from an existing index setting
305
+ finalPipeline = IndexSettings .FINAL_PIPELINE .get (indexSettings );
306
+ indexRequest .setFinalPipeline (finalPipeline );
307
+ }
313
308
} else if (indexRequest .index () != null ) {
314
- // the index does not exist yet (and is valid request), so match index templates to look for a default pipeline
309
+ // the index does not exist yet (and this is a valid request), so match index templates to look for pipelines
315
310
List <IndexTemplateMetaData > templates = MetaDataIndexTemplateService .findTemplates (metaData , indexRequest .index ());
316
311
assert (templates != null );
317
- // order of templates are highest order first, we have to iterate through them all though
318
- String defaultPipeline = null ;
319
- for (IndexTemplateMetaData template : templates ) {
312
+ // order of templates are highest order first
313
+ for (final IndexTemplateMetaData template : templates ) {
320
314
final Settings settings = template .settings ();
321
- if (requiredPipeline == null && IndexSettings .REQUIRED_PIPELINE .exists (settings )) {
322
- requiredPipeline = IndexSettings .REQUIRED_PIPELINE .get (settings );
323
- requestCanOverridePipeline = false ;
324
- // we can not break in case a lower-order template has a default pipeline that we need to reject
325
- } else if (defaultPipeline == null && IndexSettings .DEFAULT_PIPELINE .exists (settings )) {
315
+ if (defaultPipeline == null && IndexSettings .DEFAULT_PIPELINE .exists (settings )) {
326
316
defaultPipeline = IndexSettings .DEFAULT_PIPELINE .get (settings );
327
- // we can not break in case a lower-order template has a required pipeline that we need to reject
317
+ // we can not break in case a lower-order template has a final pipeline that we need to collect
318
+ }
319
+ if (finalPipeline == null && IndexSettings .FINAL_PIPELINE .exists (settings )) {
320
+ finalPipeline = IndexSettings .FINAL_PIPELINE .get (settings );
321
+ // we can not break in case a lower-order template has a default pipeline that we need to collect
322
+ }
323
+ if (defaultPipeline != null && finalPipeline != null ) {
324
+ // we can break if we have already collected a default and final pipeline
325
+ break ;
328
326
}
329
327
}
330
- if (requiredPipeline != null && defaultPipeline != null ) {
331
- // we can not have picked up a required and a default pipeline from applying templates
332
- final String message = String .format (
333
- Locale .ROOT ,
334
- "required pipeline [%s] and default pipeline [%s] can not both be set" ,
335
- requiredPipeline ,
336
- defaultPipeline );
337
- throw new IllegalArgumentException (message );
338
- }
339
- final String pipeline ;
340
- if (requiredPipeline != null ) {
341
- pipeline = requiredPipeline ;
342
- } else {
343
- pipeline = Objects .requireNonNullElse (defaultPipeline , IngestService .NOOP_PIPELINE_NAME );
344
- }
345
- indexRequest .setPipeline (pipeline );
328
+ indexRequest .setPipeline (Objects .requireNonNullElse (defaultPipeline , IngestService .NOOP_PIPELINE_NAME ));
329
+ indexRequest .setFinalPipeline (Objects .requireNonNullElse (finalPipeline , IngestService .NOOP_PIPELINE_NAME ));
346
330
}
347
331
348
332
if (requestPipeline != null ) {
349
- if (requestCanOverridePipeline == false ) {
350
- final String message = String .format (
351
- Locale .ROOT ,
352
- "request pipeline [%s] can not override required pipeline [%s]" ,
353
- requestPipeline ,
354
- requiredPipeline );
355
- throw new IllegalArgumentException (message );
356
- } else {
357
- indexRequest .setPipeline (requestPipeline );
358
- }
333
+ indexRequest .setPipeline (requestPipeline );
359
334
}
360
335
361
336
/*
@@ -371,8 +346,10 @@ static boolean resolveRequiredOrDefaultPipeline(DocWriteRequest<?> originalReque
371
346
indexRequest .isPipelineResolved (true );
372
347
}
373
348
374
- // Return whether this index request has a pipeline
375
- return IngestService .NOOP_PIPELINE_NAME .equals (indexRequest .getPipeline ()) == false ;
349
+
350
+ // return whether this index request has a pipeline
351
+ return IngestService .NOOP_PIPELINE_NAME .equals (indexRequest .getPipeline ()) == false
352
+ || IngestService .NOOP_PIPELINE_NAME .equals (indexRequest .getFinalPipeline ()) == false ;
376
353
}
377
354
378
355
boolean needToCheck () {
0 commit comments