From 415f3744360de3a244d4daf1984dbe1a344077b2 Mon Sep 17 00:00:00 2001 From: aggarwalShivani Date: Mon, 8 Jan 2024 12:32:47 +0530 Subject: [PATCH 1/4] Fix for GET request on SM policies to return empty list when ism config index does not exist Signed-off-by: aggarwalShivani --- .../api/transport/get/TransportGetSMPoliciesAction.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt index a93daf398..140a281aa 100644 --- a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt +++ b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt @@ -70,11 +70,15 @@ class TransportGetSMPoliciesAction @Inject constructor( private suspend fun getAllPolicies(searchParams: SearchParams, user: User?): Pair, Long> { val searchRequest = getAllPoliciesRequest(searchParams, user) val searchResponse: SearchResponse = try { - client.suspendUntil { search(searchRequest, it) } + return try { + val searchResponse = client.suspendUntil { search(searchRequest, it) } + parseGetAllPoliciesResponse(searchResponse) } catch (e: IndexNotFoundException) { - throw OpenSearchStatusException("Snapshot management config index not found", RestStatus.NOT_FOUND) + // config index hasn't been initialized, catch this here and show empty result for policies + Pair(emptyList(), 0L) + } catch (e: Exception) { + throw e } - return parseGetAllPoliciesResponse(searchResponse) } private fun getAllPoliciesRequest(searchParams: SearchParams, user: User?): SearchRequest { From 2ac032a332f1d9dce0a140878ffbe3f97ab65879 Mon Sep 17 00:00:00 2001 From: aggarwalShivani <39588384+aggarwalShivani@users.noreply.github.com> Date: Wed, 17 Jan 2024 09:59:53 +0530 Subject: [PATCH 2/4] Update getAllPolicies in TransportGetSMPoliciesAction.kt Signed-off-by: aggarwalShivani <39588384+aggarwalShivani@users.noreply.github.com> --- .../api/transport/get/TransportGetSMPoliciesAction.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt index 140a281aa..336f196d8 100644 --- a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt +++ b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt @@ -69,7 +69,6 @@ class TransportGetSMPoliciesAction @Inject constructor( private suspend fun getAllPolicies(searchParams: SearchParams, user: User?): Pair, Long> { val searchRequest = getAllPoliciesRequest(searchParams, user) - val searchResponse: SearchResponse = try { return try { val searchResponse = client.suspendUntil { search(searchRequest, it) } parseGetAllPoliciesResponse(searchResponse) From 4320a5352789adc614679e7f2a19abbd65350007 Mon Sep 17 00:00:00 2001 From: aggarwalShivani Date: Thu, 18 Jan 2024 19:32:57 +0530 Subject: [PATCH 3/4] Added test case for the change and handled exception with ExceptionsHelper.unwrapCause Signed-off-by: aggarwalShivani --- .../transport/get/TransportGetSMPoliciesAction.kt | 3 ++- .../resthandler/RestGetSnapshotManagementIT.kt | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt index 336f196d8..bbbf4ffd4 100644 --- a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt +++ b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt @@ -17,6 +17,7 @@ import org.opensearch.common.settings.Settings import org.opensearch.common.util.concurrent.ThreadContext import org.opensearch.commons.authuser.User import org.opensearch.index.IndexNotFoundException +import org.opensearch.ExceptionsHelper import org.opensearch.index.query.BoolQueryBuilder import org.opensearch.index.query.ExistsQueryBuilder import org.opensearch.index.query.Operator @@ -76,7 +77,7 @@ class TransportGetSMPoliciesAction @Inject constructor( // config index hasn't been initialized, catch this here and show empty result for policies Pair(emptyList(), 0L) } catch (e: Exception) { - throw e + throw ExceptionsHelper.unwrapCause(e) as Exception } } diff --git a/src/test/kotlin/org/opensearch/indexmanagement/snapshotmanagement/resthandler/RestGetSnapshotManagementIT.kt b/src/test/kotlin/org/opensearch/indexmanagement/snapshotmanagement/resthandler/RestGetSnapshotManagementIT.kt index 88cae159b..b467d2a74 100644 --- a/src/test/kotlin/org/opensearch/indexmanagement/snapshotmanagement/resthandler/RestGetSnapshotManagementIT.kt +++ b/src/test/kotlin/org/opensearch/indexmanagement/snapshotmanagement/resthandler/RestGetSnapshotManagementIT.kt @@ -80,6 +80,20 @@ class RestGetSnapshotManagementIT : SnapshotManagementRestTestCase() { } } + @Throws(Exception::class) + @Suppress("UNCHECKED_CAST") + fun `test getting all snapshot management policies when config index doesn't exist`() { + val response = client().makeRequest( + "GET", IndexManagementPlugin.SM_POLICIES_URI, null, + BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json") + ) + val map = response.asMap() + val totalPolicies = map["total_policies"] as Int + val responsePolicies = map["policies"] as List> + assertTrue("Total policies is 0", totalPolicies == 0) + assertTrue("Response list of policies is empty", responsePolicies.isEmpty()) + } + @Throws(Exception::class) @Suppress("UNCHECKED_CAST") fun `test getting all snapshot management policies with search params`() { From 7a63a9d6d684a8217563375e2af7b5f5e901c11c Mon Sep 17 00:00:00 2001 From: aggarwalShivani Date: Tue, 23 Jan 2024 16:17:51 +0530 Subject: [PATCH 4/4] Modified ExceptionsHelper.unwrapCause handling for Exception Signed-off-by: aggarwalShivani --- .../api/transport/get/TransportGetSMPoliciesAction.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt index bbbf4ffd4..bcc927a09 100644 --- a/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt +++ b/src/main/kotlin/org/opensearch/indexmanagement/snapshotmanagement/api/transport/get/TransportGetSMPoliciesAction.kt @@ -73,11 +73,14 @@ class TransportGetSMPoliciesAction @Inject constructor( return try { val searchResponse = client.suspendUntil { search(searchRequest, it) } parseGetAllPoliciesResponse(searchResponse) - } catch (e: IndexNotFoundException) { - // config index hasn't been initialized, catch this here and show empty result for policies - Pair(emptyList(), 0L) } catch (e: Exception) { - throw ExceptionsHelper.unwrapCause(e) as Exception + val unwrappedException = ExceptionsHelper.unwrapCause(e) as Exception + if (unwrappedException is IndexNotFoundException) { + // config index hasn't been initialized, catch this here and show empty result for policies + Pair(emptyList(), 0L) + } else { + throw unwrappedException + } } }