From ba1ba44b512462442f98b2d921b62b82df0c0751 Mon Sep 17 00:00:00 2001 From: "opensearch-trigger-bot[bot]" <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Date: Fri, 28 Jul 2023 07:04:57 -0700 Subject: [PATCH] Handle NPE in isRollupIndex (#855) (#871) * Handle NPE in isRollupIndex `metadata.index()` can return `null`, so handle that case by returning `false`. * unit test --------- (cherry picked from commit 05bc0d5b01245201b733500f62c9b55d56e1f5f4) Signed-off-by: Bryce Lampe Signed-off-by: github-actions[bot] Co-authored-by: github-actions[bot] Co-authored-by: bowenlan-amzn --- .../indexmanagement/rollup/util/RollupUtils.kt | 7 +++++-- .../rollup/util/RollupUtilsTests.kt | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtils.kt b/src/main/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtils.kt index f6d749fbb..f563f99d1 100644 --- a/src/main/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtils.kt +++ b/src/main/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtils.kt @@ -68,9 +68,12 @@ const val DATE_FIELD_EPOCH_MILLIS_FORMAT = "epoch_millis" @Suppress("ReturnCount") fun isRollupIndex(index: String, clusterState: ClusterState): Boolean { - if (RollupSettings.ROLLUP_INDEX.get(clusterState.metadata.index(index).settings)) { + val idx = clusterState.metadata.index(index) + if (idx == null) { + return false + } else if (RollupSettings.ROLLUP_INDEX.get(idx.settings)) { return true - } else if (LegacyOpenDistroRollupSettings.ROLLUP_INDEX.get(clusterState.metadata.index(index).settings)) { + } else if (LegacyOpenDistroRollupSettings.ROLLUP_INDEX.get(idx.settings)) { return true } return false diff --git a/src/test/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtilsTests.kt b/src/test/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtilsTests.kt index c063a3487..d535f1fb7 100644 --- a/src/test/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtilsTests.kt +++ b/src/test/kotlin/org/opensearch/indexmanagement/rollup/util/RollupUtilsTests.kt @@ -5,6 +5,11 @@ package org.opensearch.indexmanagement.rollup.util +import com.nhaarman.mockitokotlin2.doReturn +import com.nhaarman.mockitokotlin2.mock +import com.nhaarman.mockitokotlin2.whenever +import org.opensearch.cluster.ClusterState +import org.opensearch.cluster.metadata.Metadata import org.opensearch.index.query.BoolQueryBuilder import org.opensearch.index.query.ConstantScoreQueryBuilder import org.opensearch.index.query.DisMaxQueryBuilder @@ -230,4 +235,16 @@ class RollupUtilsTests : OpenSearchTestCase() { assertEquals("Rewritten aggregation builder is not the correct type", aggBuilder.type, rewrittenAgg.type) } } + + fun `test isRollupIndex`() { + val indexName = "missing index" + val clusterState: ClusterState = mock() + val metadata: Metadata = mock() + + whenever(clusterState.metadata).doReturn(metadata) + whenever(metadata.index(indexName)).doReturn(null) + + val actual = isRollupIndex(indexName, clusterState) + assertFalse(actual) + } }