16
16
import java .io .IOException ;
17
17
import java .time .Clock ;
18
18
import java .util .*;
19
+ import java .util .function .Consumer ;
19
20
import java .util .stream .Collectors ;
20
21
21
22
import org .apache .commons .lang .StringUtils ;
@@ -467,18 +468,10 @@ private void handlePutRequest(boolean indexingDryRun, ActionListener<T> listener
467
468
private void handlePostRequest (boolean indexingDryRun , ActionListener <T > listener ) {
468
469
createConfig (indexingDryRun , ActionListener .wrap (createConfigResponse -> {
469
470
if (shouldHandleFlattening (indexingDryRun )) {
470
- String configId = RestHandlerUtils .getConfigIdFromIndexResponse (createConfigResponse );
471
471
String flattenedResultIndexAlias = config .getFlattenResultIndexAlias ();
472
472
473
- timeSeriesIndices
474
- .initFlattenedResultIndex (
475
- flattenedResultIndexAlias ,
476
- ActionListener
477
- .wrap (
478
- initResponse -> setupIngestPipeline (flattenedResultIndexAlias , configId , listener , createConfigResponse ),
479
- listener ::onFailure
480
- )
481
- );
473
+ initAndSetupPipeline (flattenedResultIndexAlias , listener , l -> l .onResponse (createConfigResponse ));
474
+
482
475
} else {
483
476
listener .onResponse (createConfigResponse );
484
477
}
@@ -491,23 +484,25 @@ private boolean shouldHandleFlattening(boolean indexingDryRun) {
491
484
return !indexingDryRun && config .getCustomResultIndexOrAlias () != null && Boolean .TRUE .equals (flattenResultIndexMapping );
492
485
}
493
486
494
- protected void setupIngestPipeline (
495
- String flattenedResultIndexAlias ,
496
- String configId ,
497
- ActionListener <T > listener ,
498
- T createConfigResponse
499
- ) {
487
+ private void initAndSetupPipeline (String flattenedResultIndexAlias , ActionListener <T > listener , Consumer <ActionListener <T >> onSuccess ) {
488
+ timeSeriesIndices
489
+ .initFlattenedResultIndex (
490
+ flattenedResultIndexAlias ,
491
+ ActionListener
492
+ .wrap (initResponse -> setupIngestPipeline (flattenedResultIndexAlias , listener , onSuccess ), listener ::onFailure )
493
+ );
494
+ }
495
+
496
+ private void setupIngestPipeline (String flattenedResultIndexAlias , ActionListener <T > listener , Consumer <ActionListener <T >> onSuccess ) {
500
497
String pipelineId = config .getFlattenResultIndexIngestPipelineName ();
501
498
502
499
try {
503
500
BytesReference pipelineSource = createPipelineDefinition (flattenedResultIndexAlias );
504
-
505
501
PutPipelineRequest putPipelineRequest = new PutPipelineRequest (pipelineId , pipelineSource , XContentType .JSON );
506
502
507
503
client .admin ().cluster ().putPipeline (putPipelineRequest , ActionListener .wrap (putPipelineResponse -> {
508
504
logger .info ("Ingest pipeline created successfully for pipelineId: {}" , pipelineId );
509
- bindIngestPipelineWithFlattenedResultIndex (pipelineId , configId , flattenedResultIndexAlias , listener , createConfigResponse );
510
-
505
+ bindIngestPipelineWithFlattenedResultIndex (pipelineId , flattenedResultIndexAlias , listener , onSuccess );
511
506
}, exception -> {
512
507
logger .error ("Error while creating ingest pipeline for pipelineId: {}" , pipelineId , exception );
513
508
listener .onFailure (exception );
@@ -519,6 +514,23 @@ protected void setupIngestPipeline(
519
514
}
520
515
}
521
516
517
+ private void bindIngestPipelineWithFlattenedResultIndex (
518
+ String pipelineId ,
519
+ String flattenedResultIndexAlias ,
520
+ ActionListener <T > listener ,
521
+ Consumer <ActionListener <T >> onSuccess
522
+ ) {
523
+ UpdateSettingsRequest updateSettingsRequest = buildUpdateSettingsRequest (flattenedResultIndexAlias , pipelineId );
524
+
525
+ client .admin ().indices ().updateSettings (updateSettingsRequest , ActionListener .wrap (updateSettingsResponse -> {
526
+ logger .info ("Successfully updated settings for index: {} with pipeline: {}" , flattenedResultIndexAlias , pipelineId );
527
+ onSuccess .accept (listener );
528
+ }, exception -> {
529
+ logger .error ("Failed to update settings for index: {} with pipeline: {}" , flattenedResultIndexAlias , pipelineId , exception );
530
+ listener .onFailure (exception );
531
+ }));
532
+ }
533
+
522
534
private BytesReference createPipelineDefinition (String indexName ) throws IOException {
523
535
XContentBuilder pipelineBuilder = XContentFactory .jsonBuilder ();
524
536
pipelineBuilder .startObject ();
@@ -544,11 +556,7 @@ private BytesReference createPipelineDefinition(String indexName) throws IOExcep
544
556
return BytesReference .bytes (pipelineBuilder );
545
557
}
546
558
547
- private UpdateSettingsRequest buildUpdateSettingsRequest (
548
- String flattenedResultIndexAlias ,
549
- String defaultPipelineName ,
550
- String configId
551
- ) {
559
+ private UpdateSettingsRequest buildUpdateSettingsRequest (String flattenedResultIndexAlias , String defaultPipelineName ) {
552
560
UpdateSettingsRequest updateSettingsRequest = new UpdateSettingsRequest ();
553
561
updateSettingsRequest .indices (flattenedResultIndexAlias );
554
562
@@ -560,24 +568,6 @@ private UpdateSettingsRequest buildUpdateSettingsRequest(
560
568
return updateSettingsRequest ;
561
569
}
562
570
563
- protected void bindIngestPipelineWithFlattenedResultIndex (
564
- String pipelineId ,
565
- String configId ,
566
- String flattenedResultIndexAlias ,
567
- ActionListener <T > listener ,
568
- T createConfigResponse
569
- ) {
570
- UpdateSettingsRequest updateSettingsRequest = buildUpdateSettingsRequest (flattenedResultIndexAlias , pipelineId , configId );
571
-
572
- client .admin ().indices ().updateSettings (updateSettingsRequest , ActionListener .wrap (updateSettingsResponse -> {
573
- logger .info ("Successfully updated settings for index: {} with pipeline: {}" , flattenedResultIndexAlias , pipelineId );
574
- listener .onResponse (createConfigResponse );
575
- }, exception -> {
576
- logger .error ("Failed to update settings for index: {} with pipeline: {}" , flattenedResultIndexAlias , pipelineId , exception );
577
- listener .onFailure (exception );
578
- }));
579
- }
580
-
581
571
protected void updateConfig (String id , boolean indexingDryRun , ActionListener <T > listener ) {
582
572
GetRequest request = new GetRequest (CommonName .CONFIG_INDEX , id );
583
573
client
@@ -619,18 +609,6 @@ private void onGetConfigResponse(GetResponse response, boolean indexingDryRun, S
619
609
);
620
610
return ;
621
611
}
622
- if (!existingConfig .getFlattenResultIndexMapping ()
623
- && config .getFlattenResultIndexMapping ()
624
- && existingConfig .getCustomResultIndexOrAlias () != null ) {
625
- // customers can choose to use a flattened result index for newly created detectors and disable it for those detectors.
626
- // however, since enabling the flattened result index creates additional resources and due to bwc concerns,
627
- // we do not allow customers to enable this feature for existing running detectors.
628
- listener
629
- .onFailure (
630
- new OpenSearchStatusException (CommonMessages .CAN_NOT_CHANGE_FLATTEN_RESULT_INDEX , RestStatus .BAD_REQUEST )
631
- );
632
- return ;
633
- }
634
612
} else {
635
613
if (!ParseUtils .listEqualsWithoutConsideringOrder (existingConfig .getCategoryFields (), config .getCategoryFields ())
636
614
|| !Objects .equals (existingConfig .getCustomResultIndexOrAlias (), config .getCustomResultIndexOrAlias ())) {
@@ -650,6 +628,19 @@ private void onGetConfigResponse(GetResponse response, boolean indexingDryRun, S
650
628
listener ::onFailure
651
629
);
652
630
631
+ } else if (!existingConfig .getFlattenResultIndexMapping ()
632
+ && config .getFlattenResultIndexMapping ()
633
+ && existingConfig .getCustomResultIndexOrAlias () != null ) {
634
+ confirmBatchRunningListener = ActionListener
635
+ .wrap (
636
+ r -> initAndSetupPipeline (
637
+ config .getFlattenResultIndexAlias (),
638
+ listener ,
639
+ l -> searchConfigInputIndices (id , indexingDryRun , l )
640
+ ),
641
+ listener ::onFailure
642
+ );
643
+
653
644
} else {
654
645
confirmBatchRunningListener = ActionListener
655
646
.wrap (
@@ -673,11 +664,7 @@ private void unbindIngestPipelineWithFlattenedResultIndex(
673
664
boolean indexingDryRun
674
665
) {
675
666
// The pipeline name _none specifies that the index does not have an ingest pipeline.
676
- UpdateSettingsRequest updateSettingsRequest = buildUpdateSettingsRequest (
677
- existingConfig .getFlattenResultIndexAlias (),
678
- "_none" ,
679
- existingConfig .getId ()
680
- );
667
+ UpdateSettingsRequest updateSettingsRequest = buildUpdateSettingsRequest (existingConfig .getFlattenResultIndexAlias (), "_none" );
681
668
client
682
669
.admin ()
683
670
.indices ()
0 commit comments