@@ -64,7 +64,6 @@ public class AnalysisConfig implements ToXContentObject, Writeable {
6464 private static final ParseField OVERLAPPING_BUCKETS = new ParseField ("overlapping_buckets" );
6565 private static final ParseField RESULT_FINALIZATION_WINDOW = new ParseField ("result_finalization_window" );
6666 private static final ParseField MULTIVARIATE_BY_FIELDS = new ParseField ("multivariate_by_fields" );
67- private static final ParseField MULTIPLE_BUCKET_SPANS = new ParseField ("multiple_bucket_spans" );
6867 private static final ParseField USER_PER_PARTITION_NORMALIZATION = new ParseField ("use_per_partition_normalization" );
6968
7069 public static final String ML_CATEGORY_FIELD = "mlcategory" ;
@@ -99,9 +98,6 @@ private static ConstructingObjectParser<AnalysisConfig.Builder, Void> createPars
9998 parser .declareBoolean (Builder ::setOverlappingBuckets , OVERLAPPING_BUCKETS );
10099 parser .declareLong (Builder ::setResultFinalizationWindow , RESULT_FINALIZATION_WINDOW );
101100 parser .declareBoolean (Builder ::setMultivariateByFields , MULTIVARIATE_BY_FIELDS );
102- parser .declareStringArray ((builder , values ) -> builder .setMultipleBucketSpans (
103- values .stream ().map (v -> TimeValue .parseTimeValue (v , MULTIPLE_BUCKET_SPANS .getPreferredName ()))
104- .collect (Collectors .toList ())), MULTIPLE_BUCKET_SPANS );
105101 parser .declareBoolean (Builder ::setUsePerPartitionNormalization , USER_PER_PARTITION_NORMALIZATION );
106102
107103 return parser ;
@@ -121,13 +117,12 @@ private static ConstructingObjectParser<AnalysisConfig.Builder, Void> createPars
121117 private final Boolean overlappingBuckets ;
122118 private final Long resultFinalizationWindow ;
123119 private final Boolean multivariateByFields ;
124- private final List <TimeValue > multipleBucketSpans ;
125120 private final boolean usePerPartitionNormalization ;
126121
127122 private AnalysisConfig (TimeValue bucketSpan , String categorizationFieldName , List <String > categorizationFilters ,
128123 CategorizationAnalyzerConfig categorizationAnalyzerConfig , TimeValue latency , String summaryCountFieldName ,
129124 List <Detector > detectors , List <String > influencers , Boolean overlappingBuckets , Long resultFinalizationWindow ,
130- Boolean multivariateByFields , List < TimeValue > multipleBucketSpans , boolean usePerPartitionNormalization ) {
125+ Boolean multivariateByFields , boolean usePerPartitionNormalization ) {
131126 this .detectors = detectors ;
132127 this .bucketSpan = bucketSpan ;
133128 this .latency = latency ;
@@ -139,7 +134,6 @@ private AnalysisConfig(TimeValue bucketSpan, String categorizationFieldName, Lis
139134 this .overlappingBuckets = overlappingBuckets ;
140135 this .resultFinalizationWindow = resultFinalizationWindow ;
141136 this .multivariateByFields = multivariateByFields ;
142- this .multipleBucketSpans = multipleBucketSpans == null ? null : Collections .unmodifiableList (multipleBucketSpans );
143137 this .usePerPartitionNormalization = usePerPartitionNormalization ;
144138 }
145139
@@ -159,16 +153,18 @@ public AnalysisConfig(StreamInput in) throws IOException {
159153 overlappingBuckets = in .readOptionalBoolean ();
160154 resultFinalizationWindow = in .readOptionalLong ();
161155 multivariateByFields = in .readOptionalBoolean ();
162- if (in .readBoolean ()) {
163- final int arraySize = in .readVInt ();
164- final List <TimeValue > spans = new ArrayList <>(arraySize );
165- for (int i = 0 ; i < arraySize ; i ++) {
166- spans .add (in .readTimeValue ());
156+
157+ // BWC for removed multiple_bucket_spans
158+ // TODO Remove in 7.0.0
159+ if (in .getVersion ().before (Version .V_6_5_0 )) {
160+ if (in .readBoolean ()) {
161+ final int arraySize = in .readVInt ();
162+ for (int i = 0 ; i < arraySize ; i ++) {
163+ in .readTimeValue ();
164+ }
167165 }
168- multipleBucketSpans = Collections .unmodifiableList (spans );
169- } else {
170- multipleBucketSpans = null ;
171166 }
167+
172168 usePerPartitionNormalization = in .readBoolean ();
173169 }
174170
@@ -192,15 +188,13 @@ public void writeTo(StreamOutput out) throws IOException {
192188 out .writeOptionalBoolean (overlappingBuckets );
193189 out .writeOptionalLong (resultFinalizationWindow );
194190 out .writeOptionalBoolean (multivariateByFields );
195- if (multipleBucketSpans != null ) {
196- out .writeBoolean (true );
197- out .writeVInt (multipleBucketSpans .size ());
198- for (TimeValue span : multipleBucketSpans ) {
199- out .writeTimeValue (span );
200- }
201- } else {
191+
192+ // BWC for removed multiple_bucket_spans
193+ // TODO Remove in 7.0.0
194+ if (out .getVersion ().before (Version .V_6_5_0 )) {
202195 out .writeBoolean (false );
203196 }
197+
204198 out .writeBoolean (usePerPartitionNormalization );
205199 }
206200
@@ -305,10 +299,6 @@ public Boolean getMultivariateByFields() {
305299 return multivariateByFields ;
306300 }
307301
308- public List <TimeValue > getMultipleBucketSpans () {
309- return multipleBucketSpans ;
310- }
311-
312302 public boolean getUsePerPartitionNormalization () {
313303 return usePerPartitionNormalization ;
314304 }
@@ -413,10 +403,6 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
413403 if (multivariateByFields != null ) {
414404 builder .field (MULTIVARIATE_BY_FIELDS .getPreferredName (), multivariateByFields );
415405 }
416- if (multipleBucketSpans != null ) {
417- builder .field (MULTIPLE_BUCKET_SPANS .getPreferredName (),
418- multipleBucketSpans .stream ().map (TimeValue ::getStringRep ).collect (Collectors .toList ()));
419- }
420406 if (usePerPartitionNormalization ) {
421407 builder .field (USER_PER_PARTITION_NORMALIZATION .getPreferredName (), usePerPartitionNormalization );
422408 }
@@ -440,16 +426,15 @@ public boolean equals(Object o) {
440426 Objects .equals (influencers , that .influencers ) &&
441427 Objects .equals (overlappingBuckets , that .overlappingBuckets ) &&
442428 Objects .equals (resultFinalizationWindow , that .resultFinalizationWindow ) &&
443- Objects .equals (multivariateByFields , that .multivariateByFields ) &&
444- Objects .equals (multipleBucketSpans , that .multipleBucketSpans );
429+ Objects .equals (multivariateByFields , that .multivariateByFields );
445430 }
446431
447432 @ Override
448433 public int hashCode () {
449434 return Objects .hash (
450435 bucketSpan , categorizationFieldName , categorizationFilters , categorizationAnalyzerConfig , latency ,
451436 summaryCountFieldName , detectors , influencers , overlappingBuckets , resultFinalizationWindow ,
452- multivariateByFields , multipleBucketSpans , usePerPartitionNormalization
437+ multivariateByFields , usePerPartitionNormalization
453438 );
454439 }
455440
@@ -468,7 +453,6 @@ public static class Builder {
468453 private Boolean overlappingBuckets ;
469454 private Long resultFinalizationWindow ;
470455 private Boolean multivariateByFields ;
471- private List <TimeValue > multipleBucketSpans ;
472456 private boolean usePerPartitionNormalization = false ;
473457
474458 public Builder (List <Detector > detectors ) {
@@ -488,8 +472,6 @@ public Builder(AnalysisConfig analysisConfig) {
488472 this .overlappingBuckets = analysisConfig .overlappingBuckets ;
489473 this .resultFinalizationWindow = analysisConfig .resultFinalizationWindow ;
490474 this .multivariateByFields = analysisConfig .multivariateByFields ;
491- this .multipleBucketSpans = analysisConfig .multipleBucketSpans == null ? null
492- : new ArrayList <>(analysisConfig .multipleBucketSpans );
493475 this .usePerPartitionNormalization = analysisConfig .usePerPartitionNormalization ;
494476 }
495477
@@ -553,10 +535,6 @@ public void setMultivariateByFields(Boolean multivariateByFields) {
553535 this .multivariateByFields = multivariateByFields ;
554536 }
555537
556- public void setMultipleBucketSpans (List <TimeValue > multipleBucketSpans ) {
557- this .multipleBucketSpans = multipleBucketSpans ;
558- }
559-
560538 public void setUsePerPartitionNormalization (boolean usePerPartitionNormalization ) {
561539 this .usePerPartitionNormalization = usePerPartitionNormalization ;
562540 }
@@ -588,7 +566,6 @@ public AnalysisConfig build() {
588566 verifyCategorizationAnalyzer ();
589567 verifyCategorizationFilters ();
590568 checkFieldIsNotNegativeIfSpecified (RESULT_FINALIZATION_WINDOW .getPreferredName (), resultFinalizationWindow );
591- verifyMultipleBucketSpans ();
592569
593570 verifyNoMetricFunctionsWhenSummaryCountFieldNameIsSet ();
594571
@@ -603,7 +580,7 @@ public AnalysisConfig build() {
603580
604581 return new AnalysisConfig (bucketSpan , categorizationFieldName , categorizationFilters , categorizationAnalyzerConfig ,
605582 latency , summaryCountFieldName , detectors , influencers , overlappingBuckets ,
606- resultFinalizationWindow , multivariateByFields , multipleBucketSpans , usePerPartitionNormalization );
583+ resultFinalizationWindow , multivariateByFields , usePerPartitionNormalization );
607584 }
608585
609586 private void verifyNoMetricFunctionsWhenSummaryCountFieldNameIsSet () {
@@ -727,19 +704,6 @@ private void verifyCategorizationFiltersAreValidRegex() {
727704 }
728705 }
729706
730- private void verifyMultipleBucketSpans () {
731- if (multipleBucketSpans == null ) {
732- return ;
733- }
734-
735- for (TimeValue span : multipleBucketSpans ) {
736- if ((span .getSeconds () % bucketSpan .getSeconds () != 0L ) || (span .compareTo (bucketSpan ) <= 0 )) {
737- throw ExceptionsHelper .badRequestException (
738- Messages .getMessage (Messages .JOB_CONFIG_MULTIPLE_BUCKETSPANS_MUST_BE_MULTIPLE , span , bucketSpan ));
739- }
740- }
741- }
742-
743707 private static void checkDetectorsHavePartitionFields (List <Detector > detectors ) {
744708 for (Detector detector : detectors ) {
745709 if (!Strings .isNullOrEmpty (detector .getPartitionFieldName ())) {
0 commit comments