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