@@ -36,7 +36,10 @@ teardown:
3636      ingest.delete_pipeline :
3737        id : " pipeline-2" 
3838        ignore : 404 
39- 
39+   - do :
40+       indices.delete_data_stream :
41+         name : " data-stream-*" 
42+         expand_wildcards : all 
4043---
4144" Test first matching router terminates pipeline "  :
4245  - skip :
@@ -252,3 +255,322 @@ teardown:
252255  - match : { _source.existing-field : true } 
253256  - match : { _source.added-in-pipeline-before-reroute : true } 
254257  - match : { _source.added-in-pipeline-after-reroute : true } 
258+ 
259+ ---
260+ " Test data stream with lazy rollover obtains pipeline from template "  :
261+   #  This test starts with chain of reroutes, from data-stream-1, to data-stream-2, to data-stream-3
262+   #  We then add higher priority templates that remove the reroute processors. Then we show that
263+   #  after a lazy rollover on data-stream-2, a document written to data-stream-1 still gets rerouted
264+   #  to data-steam-2, but not on to data-stream-3. Finally, after a lazy rollover on data-stream-1
265+   #  causes the new template to also take effect on data-stream-1, and the last write goes directly
266+   #  into data-stream-1. Multiple reroute steps are tested because pipeline resolution using a
267+   #  different code path for initial index and indices after a reroute.
268+ 
269+   #  start with pipeline that reroutes from ds-1 to ds-2
270+   - do :
271+       ingest.put_pipeline :
272+         id : " reroute-1" 
273+         body : > 
274+           { 
275+             "processors": [ 
276+               { 
277+                 "reroute" : {"destination": "data-stream-2"} 
278+               } 
279+             ] 
280+           } 
281+    - match : { acknowledged: true } 
282+ 
283+   #  and pipeline that reroutes from ds-2 to ds-3
284+   - do :
285+       ingest.put_pipeline :
286+         id : " reroute-2" 
287+         body : > 
288+           { 
289+             "processors": [ 
290+               { 
291+                 "reroute" : {"destination": "data-stream-3"} 
292+               } 
293+             ] 
294+           } 
295+    - match : { acknowledged: true } 
296+ 
297+   #  set pipelines in templates
298+   - do :
299+       indices.put_index_template :
300+         name : template-1 
301+         body :
302+           index_patterns : [ "data-stream-1"] 
303+           priority : 1 
304+           data_stream : { } 
305+           template :
306+             settings :
307+               index.default_pipeline : " reroute-1" 
308+   - match : { acknowledged: true } 
309+   - do :
310+       indices.put_index_template :
311+         name : template-2 
312+         body :
313+           index_patterns : [ "data-stream-2"] 
314+           priority : 1 
315+           data_stream : { } 
316+           template :
317+             settings :
318+               index.default_pipeline : " reroute-2" 
319+   - match : { acknowledged: true } 
320+   - do :
321+       indices.put_index_template :
322+         name : template_3 
323+         body :
324+           index_patterns : [ "data-stream-3" ] 
325+           priority : 1 
326+           data_stream : { } 
327+   - match : { acknowledged: true } 
328+ 
329+   - do :
330+       indices.create_data_stream :
331+         name : data-stream-1 
332+   - match : { acknowledged: true } 
333+   - do :
334+       indices.create_data_stream :
335+         name : data-stream-2 
336+   - match : { acknowledged: true } 
337+   - do :
338+       indices.create_data_stream :
339+         name : data-stream-3 
340+   - match : { acknowledged: true } 
341+ 
342+   #  write to ds-1
343+   - do :
344+       index :
345+         index : data-stream-1 
346+         body :
347+           ' @timestamp '  : ' 2020-12-12' 
348+           some-field : 1 
349+   - do :
350+       indices.refresh :
351+         index : data-stream-3 
352+ 
353+   #  document is rerouted to ds-3
354+   - do :
355+       search :
356+         index : data-stream-3 
357+         body : { query: { match_all: { } } } 
358+   - length : { hits.hits: 1 } 
359+   - match : { hits.hits.0._source.some-field: 1 } 
360+ 
361+   #  add higher priority templates without reroute processors
362+   - do :
363+       indices.put_index_template :
364+         name : template_4 
365+         body :
366+           index_patterns : [ "data-stream-1" ] 
367+           priority : 2  #  higher priority
368+           data_stream : { } 
369+   - match : { acknowledged: true } 
370+   - do :
371+       indices.put_index_template :
372+         name : template_5 
373+         body :
374+           index_patterns : [ "data-stream-2" ] 
375+           priority : 2  #  higher priority
376+           data_stream : { } 
377+   - match : { acknowledged: true } 
378+ 
379+   #  write to ds-1
380+   - do :
381+       index :
382+         index : data-stream-1 
383+         body :
384+           ' @timestamp '  : ' 2020-12-12' 
385+           some-field : 2 
386+   - do :
387+       indices.refresh :
388+         index : data-stream-3 
389+ 
390+   #  still rerouted because ds-1 and ds-2 rolled over
391+   - do :
392+       search :
393+         index : data-stream-3 
394+         body : { query: { match_all: { } } } 
395+   - length : { hits.hits: 2 } 
396+ 
397+   #  perform lazy rollover on ds-2
398+   - do :
399+       indices.rollover :
400+         alias : data-stream-2 
401+         lazy : true 
402+ 
403+   #  write to ds-1
404+   - do :
405+       index :
406+         index : data-stream-1 
407+         body :
408+           ' @timestamp '  : ' 2020-12-12' 
409+           some-field : 3 
410+   - do :
411+       indices.refresh :
412+         index : data-stream-2 
413+ 
414+   #  written to ds-2, as rerouted to ds-2, but not on to ds-3
415+   - do :
416+       search :
417+         index : data-stream-2 
418+         body : { query: { match_all: { } } } 
419+   - length : { hits.hits: 1 } 
420+   - match : { hits.hits.0._source.some-field: 3 } 
421+ 
422+   #  perform lazy rollover on 1
423+   - do :
424+       indices.rollover :
425+         alias : data-stream-1 
426+         lazy : true 
427+ 
428+   #  write to ds-1
429+   - do :
430+       index :
431+         index : data-stream-1 
432+         body :
433+           ' @timestamp '  : ' 2020-12-12' 
434+           some-field : 4 
435+   - do :
436+       indices.refresh :
437+         index : data-stream-1 
438+ 
439+   #  written to ds-1, as not rerouted to ds-2
440+   - do :
441+       search :
442+         index : data-stream-1 
443+         body : { query: { match_all: { } } } 
444+   - length : { hits.hits: 1 } 
445+   - match : { hits.hits.0._source.some-field: 4 } 
446+ 
447+ ---
448+ " Test remove then add reroute processor with and without lazy rollover "  :
449+   #  start with pipeline that reroutes from ds-1 to ds-2
450+   - do :
451+       ingest.put_pipeline :
452+         id : " reroute-1" 
453+         body : > 
454+           { 
455+             "processors": [ 
456+               { 
457+                 "reroute" : {"destination": "data-stream-2"} 
458+               } 
459+             ] 
460+           } 
461+    - match : { acknowledged: true } 
462+ 
463+  #  set pipelines in templates
464+   - do :
465+       indices.put_index_template :
466+         name : template-1 
467+         body :
468+           index_patterns : [ "data-stream-1"] 
469+           priority : 1 
470+           data_stream : { } 
471+           template :
472+             settings :
473+               index.default_pipeline : " reroute-1" 
474+   - match : { acknowledged: true } 
475+   - do :
476+       indices.put_index_template :
477+         name : template_2 
478+         body :
479+           index_patterns : [ "data-stream-2" ] 
480+           priority : 1 
481+           data_stream : { } 
482+   - match : { acknowledged: true } 
483+ 
484+   - do :
485+       indices.create_data_stream :
486+         name : data-stream-1 
487+   - match : { acknowledged: true } 
488+ 
489+   - do :
490+       indices.create_data_stream :
491+         name : data-stream-2 
492+   - match : { acknowledged: true } 
493+ 
494+   #  write to ds-1
495+   - do :
496+       index :
497+         index : data-stream-1 
498+         body :
499+           ' @timestamp '  : ' 2020-12-12' 
500+           some-field : 1 
501+   - do :
502+       indices.refresh :
503+         index : data-stream-2 
504+ 
505+   #  document is rerouted to ds-2
506+   - do :
507+       search :
508+         index : data-stream-2 
509+         body : { query: { match_all: { } } } 
510+   - length : { hits.hits: 1 } 
511+ 
512+   #  add higher priority templates without reroute processors
513+   - do :
514+       indices.put_index_template :
515+         name : template_3 
516+         body :
517+           index_patterns : [ "data-stream-1" ] 
518+           priority : 2  #  higher priority
519+           data_stream : { } 
520+   - match : { acknowledged: true } 
521+ 
522+   #  perform lazy rollover on ds-2
523+   - do :
524+       indices.rollover :
525+         alias : data-stream-1 
526+         lazy : true 
527+ 
528+   #  write to ds-1
529+   - do :
530+       index :
531+         index : data-stream-1 
532+         body :
533+           ' @timestamp '  : ' 2020-12-12' 
534+           some-field : 2 
535+   - do :
536+       indices.refresh :
537+         index : data-stream-1 
538+ 
539+   #  written to ds-1, as not rerouted to ds-2
540+   - do :
541+       search :
542+         index : data-stream-1 
543+         body : { query: { match_all: { } } } 
544+   - length : { hits.hits: 1 } 
545+ 
546+   #  add another higher priority templates with reroute processors
547+   - do :
548+       indices.put_index_template :
549+         name : template-3 
550+         body :
551+           index_patterns : [ "data-stream-1" ] 
552+           priority : 3 
553+           data_stream : { } 
554+           template :
555+             settings :
556+               index.default_pipeline : " reroute-1" 
557+   - match : { acknowledged: true } 
558+ 
559+   #  don't do a lazy rollover
560+   #  write to ds-1
561+   - do :
562+       index :
563+         index : data-stream-1 
564+         body :
565+           ' @timestamp '  : ' 2020-12-12' 
566+           some-field : 3 
567+   - do :
568+       indices.refresh :
569+         index : data-stream-1 
570+ 
571+   #  because no lazy rollover, still no reroute processor
572+   - do :
573+       search :
574+         index : data-stream-1 
575+         body : { query: { match_all: { } } } 
576+   - length : { hits.hits: 2 } 
0 commit comments