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)
}
}