@@ -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
@@ -339,68 +340,29 @@ class TransportExplainAction @Inject constructor(
339340 val filteredPolicies = mutableListOf<PolicyID ?>()
340341 val enabledStatus = mutableMapOf<String , Boolean >()
341342 val filteredAppliedPolicies = mutableMapOf<String , Policy >()
342- filter(0 , filteredIndices, filteredMetadata, filteredPolicies, enabledStatus, filteredAppliedPolicies)
343- }
344-
345- @Suppress(" LongParameterList" )
346- private fun filter (
347- current : Int ,
348- filteredIndices : MutableList <String >,
349- filteredMetadata : MutableList <ManagedIndexMetaData ?>,
350- filteredPolicies : MutableList <PolicyID ?>,
351- enabledStatus : MutableMap <String , Boolean >,
352- filteredAppliedPolicies : MutableMap <String , Policy >
353- ) {
354- val request = ManagedIndexRequest ().indices(indexNames[current])
355- client.execute(
356- ManagedIndexAction .INSTANCE ,
357- request,
358- object : ActionListener <AcknowledgedResponse > {
359- override fun onResponse (response : AcknowledgedResponse ) {
360- filteredIndices.add(indexNames[current])
361- filteredMetadata.add(indexMetadatas[current])
362- filteredPolicies.add(indexPolicyIDs[current])
363- enabledState[indexNames[current]]?.let { enabledStatus[indexNames[current]] = it }
364- appliedPolicies[indexNames[current]]?.let { filteredAppliedPolicies[indexNames[current]] = it }
365- if (current < indexNames.count() - 1 ) {
366- // do nothing - skip the index and go to next one
367- filter(current + 1 , filteredIndices, filteredMetadata, filteredPolicies, enabledStatus, filteredAppliedPolicies)
368- } else {
369- sendResponse(
370- filteredIndices, filteredMetadata, filteredPolicies, enabledStatus,
371- totalManagedIndices, filteredAppliedPolicies
372- )
373- }
374- }
375343
376- override fun onFailure (e : Exception ) {
377- when (e is OpenSearchSecurityException ) {
378- true -> {
379- totalManagedIndices - = 1
380- if (current < indexNames.count() - 1 ) {
381- // do nothing - skip the index and go to next one
382- filter(
383- current + 1 ,
384- filteredIndices,
385- filteredMetadata,
386- filteredPolicies,
387- enabledStatus,
388- filteredAppliedPolicies
389- )
390- } else {
391- sendResponse(
392- filteredIndices, filteredMetadata, filteredPolicies, enabledStatus,
393- totalManagedIndices, filteredAppliedPolicies
394- )
395- }
396- }
397- false -> {
398- actionListener.onFailure(e)
399- }
400- }
344+ CoroutineScope (Dispatchers .IO ).launch {
345+ // filter out indicies for which user doesn't have manage index permissions
346+ for (i in 0 until indexNames.count()) {
347+ val request = ManagedIndexRequest ().indices(indexNames[i])
348+ try {
349+ client.suspendUntil<NodeClient , AcknowledgedResponse > { execute(ManagedIndexAction .INSTANCE , request, it) }
350+ filteredIndices.add(indexNames[i])
351+ filteredMetadata.add(indexMetadatas[i])
352+ filteredPolicies.add(indexPolicyIDs[i])
353+ enabledState[indexNames[i]]?.let { enabledStatus[indexNames[i]] = it }
354+ appliedPolicies[indexNames[i]]?.let { filteredAppliedPolicies[indexNames[i]] = it }
355+ } catch (e: OpenSearchSecurityException ) {
356+ totalManagedIndices - = 1
357+ } catch (e: Exception ) {
358+ actionListener.onFailure(e)
401359 }
402360 }
403- )
361+ sendResponse(
362+ filteredIndices, filteredMetadata, filteredPolicies, enabledStatus,
363+ totalManagedIndices, filteredAppliedPolicies
364+ )
365+ }
404366 }
405367
406368 @Suppress(" LongParameterList" )
0 commit comments