fun buildResponse()

in src/main/kotlin/org/opensearch/indexmanagement/indexstatemanagement/transport/action/explain/TransportExplainAction.kt [264:302]


        fun buildResponse(
            indices: Map<String, String>,
            metadataMap: Map<String, Map<String, String>?>,
            clusterStateIndexMetadatas: Map<String, IndexMetadata>,
            threadContext: ThreadContext.StoredContext
        ) {

            // cluster state response will not resisting the sort order
            // so use the order from previous search result saved in indexNames
            for (indexName in indexNames) {
                var managedIndexMetadataMap = managedIndicesMetaDataMap[indexName]
                indexPolicyIDs.add(managedIndexMetadataMap?.get("policy_id")) // use policyID from metadata

                val clusterStateMetadata = clusterStateIndexMetadatas[indexName]?.getManagedIndexMetadata()
                var managedIndexMetadata: ManagedIndexMetaData? = null
                val configIndexMetadataMap = metadataMap[indices[indexName]?.let { managedIndexMetadataID(it) }]
                if (managedIndexMetadataMap != null) {
                    if (configIndexMetadataMap != null) { // if has metadata saved, use that
                        managedIndexMetadataMap = configIndexMetadataMap
                    }
                    if (managedIndexMetadataMap.isNotEmpty()) {
                        managedIndexMetadata = ManagedIndexMetaData.fromMap(managedIndexMetadataMap)
                    }

                    if (!isMetadataMoved(clusterStateMetadata, configIndexMetadataMap, log)) {
                        val info = mapOf("message" to "Metadata is pending migration")
                        managedIndexMetadata = clusterStateMetadata?.copy(info = info)
                    }
                }
                indexMetadatas.add(managedIndexMetadata)
            }
            managedIndicesMetaDataMap.clear()

            if (user == null || indexNames.isEmpty()) {
                sendResponse()
            } else {
                filterAndSendResponse(threadContext)
            }
        }