From ce85d436b68e06730573cc695572059a1c8b30d1 Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Mon, 10 Jun 2024 13:42:30 -0700 Subject: [PATCH] only parse number value for custom result index conditions fields Signed-off-by: Jackie Han --- .../ad/indices/ADIndexManagement.java | 2 +- .../opensearch/ad/model/AnomalyDetector.java | 14 +++++++++++--- .../indices/ForecastIndexManagement.java | 2 +- .../timeseries/indices/IndexManagement.java | 17 ++++++++--------- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/opensearch/ad/indices/ADIndexManagement.java b/src/main/java/org/opensearch/ad/indices/ADIndexManagement.java index c056a7890..dec1b5787 100644 --- a/src/main/java/org/opensearch/ad/indices/ADIndexManagement.java +++ b/src/main/java/org/opensearch/ad/indices/ADIndexManagement.java @@ -94,7 +94,7 @@ public ADIndexManagement( ADIndex.RESULT.getMapping(), xContentRegistry, AnomalyDetector::parse, - ADCommonName.CUSTOM_RESULT_INDEX_PREFIX + "*" + ADCommonName.CUSTOM_RESULT_INDEX_PREFIX ); this.clusterService.addLocalNodeClusterManagerListener(this); diff --git a/src/main/java/org/opensearch/ad/model/AnomalyDetector.java b/src/main/java/org/opensearch/ad/model/AnomalyDetector.java index 32d9b4e2c..2adacaee6 100644 --- a/src/main/java/org/opensearch/ad/model/AnomalyDetector.java +++ b/src/main/java/org/opensearch/ad/model/AnomalyDetector.java @@ -567,13 +567,13 @@ public static AnomalyDetector parse( } break; case RESULT_INDEX_FIELD_MIN_SIZE: - customResultIndexMinSize = parser.intValue(); + customResultIndexMinSize = onlyParseNumberValue(parser); break; case RESULT_INDEX_FIELD_MIN_AGE: - customResultIndexMinAge = parser.intValue(); + customResultIndexMinAge = onlyParseNumberValue(parser); break; case RESULT_INDEX_FIELD_TTL: - customResultIndexTTL = parser.intValue(); + customResultIndexTTL = onlyParseNumberValue(parser); break; default: parser.skipChildren(); @@ -685,4 +685,12 @@ private List getDefaultRule() { } return rules; } + + private static Integer onlyParseNumberValue(XContentParser parser) throws IOException { + XContentParser.Token currentToken = parser.currentToken(); + if (currentToken == XContentParser.Token.VALUE_NUMBER) { + return parser.intValue(); + } + return null; + } } diff --git a/src/main/java/org/opensearch/forecast/indices/ForecastIndexManagement.java b/src/main/java/org/opensearch/forecast/indices/ForecastIndexManagement.java index 35ade2ef7..b4a669a47 100644 --- a/src/main/java/org/opensearch/forecast/indices/ForecastIndexManagement.java +++ b/src/main/java/org/opensearch/forecast/indices/ForecastIndexManagement.java @@ -97,7 +97,7 @@ public ForecastIndexManagement( ForecastIndex.RESULT.getMapping(), xContentRegistry, Forecaster::parse, - ForecastCommonName.CUSTOM_RESULT_INDEX_PREFIX + "*" + ForecastCommonName.CUSTOM_RESULT_INDEX_PREFIX ); this.indexStates = new EnumMap(ForecastIndex.class); diff --git a/src/main/java/org/opensearch/timeseries/indices/IndexManagement.java b/src/main/java/org/opensearch/timeseries/indices/IndexManagement.java index 1c3f30c77..269d0011d 100644 --- a/src/main/java/org/opensearch/timeseries/indices/IndexManagement.java +++ b/src/main/java/org/opensearch/timeseries/indices/IndexManagement.java @@ -12,7 +12,6 @@ package org.opensearch.timeseries.indices; import static org.opensearch.core.xcontent.XContentParserUtils.ensureExpectedToken; -import static org.opensearch.forecast.constant.ForecastCommonName.CUSTOM_RESULT_INDEX_PREFIX; import static org.opensearch.timeseries.util.RestHandlerUtils.createXContentParserFromRegistry; import java.io.IOException; @@ -52,7 +51,6 @@ import org.opensearch.action.search.SearchRequest; import org.opensearch.action.support.GroupedActionListener; import org.opensearch.action.support.IndicesOptions; -import org.opensearch.ad.constant.ADCommonName; import org.opensearch.client.AdminClient; import org.opensearch.client.Client; import org.opensearch.cluster.LocalNodeClusterManagerListener; @@ -137,7 +135,7 @@ public abstract class IndexManagement & TimeSe private String resultMapping; private NamedXContentRegistry xContentRegistry; protected BiCheckedFunction configParser; - protected String customResultIndexRegex; + protected String customResultIndexPrefix; protected class IndexState { // keep track of whether the mapping version is up-to-date @@ -169,7 +167,7 @@ protected IndexManagement( String resultMapping, NamedXContentRegistry xContentRegistry, BiCheckedFunction configParser, - String customResultIndexRegex + String customResultIndexPrefix ) throws IOException { this.client = client; @@ -193,7 +191,7 @@ protected IndexManagement( this.resultMapping = resultMapping; this.xContentRegistry = xContentRegistry; this.configParser = configParser; - this.customResultIndexRegex = customResultIndexRegex; + this.customResultIndexPrefix = customResultIndexPrefix; } /** @@ -794,7 +792,7 @@ private void getConfigsWithCustomResultIndexAlias(ActionListener> l } BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder shouldQueries = new BoolQueryBuilder(); - shouldQueries.should(QueryBuilders.wildcardQuery(Config.RESULT_INDEX_FIELD, customResultIndexRegex)); + shouldQueries.should(QueryBuilders.wildcardQuery(Config.RESULT_INDEX_FIELD, customResultIndexPrefix + "*")); if (shouldQueries.should().isEmpty() == false) { boolQuery.filter(shouldQueries); } @@ -1308,6 +1306,9 @@ private void proceedWithRolloverAndDelete( IndexType resultIndex, Integer customResultIndexTtl ) { + if (rollOverRequest.getConditions().size() == 0) { + return; + } adminClient.indices().rolloverIndex(rollOverRequest, ActionListener.wrap(response -> { if (!response.isRolledOver()) { logger.warn("{} not rolled over. Conditions were: {}", resultIndexAlias, response.getConditionStatus()); @@ -1315,12 +1316,10 @@ private void proceedWithRolloverAndDelete( IndexState indexState = indexStates.computeIfAbsent(resultIndex, k -> new IndexState(k.getMapping())); indexState.mappingUpToDate = true; logger.info("{} rolled over. Conditions were: {}", resultIndexAlias, response.getConditionStatus()); - if (resultIndexAlias.startsWith(ADCommonName.CUSTOM_RESULT_INDEX_PREFIX) - || resultIndexAlias.startsWith(CUSTOM_RESULT_INDEX_PREFIX)) { + if (resultIndexAlias.startsWith(customResultIndexPrefix)) { // handle custom result index deletion if (customResultIndexTtl != null) { deleteOldHistoryIndices(allResultIndicesPattern, TimeValue.timeValueHours(customResultIndexTtl * 24)); - } } else { // handle default result index deletion