@@ -52,6 +52,7 @@ import org.opensearch.indexmanagement.indexstatemanagement.util.MetadataCheck
5252import org.opensearch.indexmanagement.indexstatemanagement.util.checkMetadata
5353import org.opensearch.indexmanagement.indexstatemanagement.util.managedIndexMetadataID
5454import org.opensearch.indexmanagement.opensearchapi.parseWithType
55+ import org.opensearch.indexmanagement.opensearchapi.suspendUntil
5556import org.opensearch.indexmanagement.spi.indexstatemanagement.model.ISMIndexMetadata
5657import org.opensearch.indexmanagement.spi.indexstatemanagement.model.ManagedIndexMetaData
5758import org.opensearch.indexmanagement.util.SecurityUtils.Companion.buildUser
@@ -343,68 +344,29 @@ class TransportExplainAction @Inject constructor(
343344 val filteredPolicies = mutableListOf<PolicyID ?>()
344345 val enabledStatus = mutableMapOf<String , Boolean >()
345346 val filteredAppliedPolicies = mutableMapOf<String , Policy >()
346- filter(0 , filteredIndices, filteredMetadata, filteredPolicies, enabledStatus, filteredAppliedPolicies)
347- }
348-
349- @Suppress(" LongParameterList" )
350- private fun filter (
351- current : Int ,
352- filteredIndices : MutableList <String >,
353- filteredMetadata : MutableList <ManagedIndexMetaData ?>,
354- filteredPolicies : MutableList <PolicyID ?>,
355- enabledStatus : MutableMap <String , Boolean >,
356- filteredAppliedPolicies : MutableMap <String , Policy >
357- ) {
358- val request = ManagedIndexRequest ().indices(indexNames[current])
359- client.execute(
360- ManagedIndexAction .INSTANCE ,
361- request,
362- object : ActionListener <AcknowledgedResponse > {
363- override fun onResponse (response : AcknowledgedResponse ) {
364- filteredIndices.add(indexNames[current])
365- filteredMetadata.add(indexMetadatas[current])
366- filteredPolicies.add(indexPolicyIDs[current])
367- enabledState[indexNames[current]]?.let { enabledStatus[indexNames[current]] = it }
368- appliedPolicies[indexNames[current]]?.let { filteredAppliedPolicies[indexNames[current]] = it }
369- if (current < indexNames.count() - 1 ) {
370- // do nothing - skip the index and go to next one
371- filter(current + 1 , filteredIndices, filteredMetadata, filteredPolicies, enabledStatus, filteredAppliedPolicies)
372- } else {
373- sendResponse(
374- filteredIndices, filteredMetadata, filteredPolicies, enabledStatus,
375- totalManagedIndices, filteredAppliedPolicies
376- )
377- }
378- }
379347
380- override fun onFailure (e : Exception ) {
381- when (e is OpenSearchSecurityException ) {
382- true -> {
383- totalManagedIndices - = 1
384- if (current < indexNames.count() - 1 ) {
385- // do nothing - skip the index and go to next one
386- filter(
387- current + 1 ,
388- filteredIndices,
389- filteredMetadata,
390- filteredPolicies,
391- enabledStatus,
392- filteredAppliedPolicies
393- )
394- } else {
395- sendResponse(
396- filteredIndices, filteredMetadata, filteredPolicies, enabledStatus,
397- totalManagedIndices, filteredAppliedPolicies
398- )
399- }
400- }
401- false -> {
402- actionListener.onFailure(e)
403- }
404- }
348+ CoroutineScope (Dispatchers .IO ).launch {
349+ // filter out indicies for which user doesn't have manage index permissions
350+ for (i in 0 until indexNames.count()) {
351+ val request = ManagedIndexRequest ().indices(indexNames[i])
352+ try {
353+ client.suspendUntil<NodeClient , AcknowledgedResponse > { execute(ManagedIndexAction .INSTANCE , request, it) }
354+ filteredIndices.add(indexNames[i])
355+ filteredMetadata.add(indexMetadatas[i])
356+ filteredPolicies.add(indexPolicyIDs[i])
357+ enabledState[indexNames[i]]?.let { enabledStatus[indexNames[i]] = it }
358+ appliedPolicies[indexNames[i]]?.let { filteredAppliedPolicies[indexNames[i]] = it }
359+ } catch (e: OpenSearchSecurityException ) {
360+ totalManagedIndices - = 1
361+ } catch (e: Exception ) {
362+ actionListener.onFailure(e)
405363 }
406364 }
407- )
365+ sendResponse(
366+ filteredIndices, filteredMetadata, filteredPolicies, enabledStatus,
367+ totalManagedIndices, filteredAppliedPolicies
368+ )
369+ }
408370 }
409371
410372 @Suppress(" LongParameterList" )
0 commit comments