in src/main/kotlin/org/opensearch/indexmanagement/indexstatemanagement/transport/action/updateindexmetadata/TransportUpdateManagedIndexMetaDataAction.kt [98:134]
fun getUpdatedClusterState(currentState: ClusterState, tasks: List<ManagedIndexMetaDataTask>): ClusterState {
// If there are no indices to make changes to, return early.
// Also doing this because when creating a metaDataBuilder and making no changes to it, for some
// reason the task does not complete, leading to indefinite suspension.
if (tasks.all { it.indicesToAddManagedIndexMetaDataTo.isEmpty() && it.indicesToRemoveManagedIndexMetaDataFrom.isEmpty() }
) {
return currentState
}
log.trace("Start of building new cluster state")
val metaDataBuilder = Metadata.builder(currentState.metadata)
for (task in tasks) {
for (pair in task.indicesToAddManagedIndexMetaDataTo) {
if (currentState.metadata.hasIndex(pair.first.name)) {
metaDataBuilder.put(
IndexMetadata.builder(currentState.metadata.index(pair.first))
.putCustom(ManagedIndexMetaData.MANAGED_INDEX_METADATA_TYPE, pair.second.toMap())
)
} else {
log.debug("No IndexMetadata found for [${pair.first.name}] when updating ManagedIndexMetaData")
}
}
for (index in task.indicesToRemoveManagedIndexMetaDataFrom) {
if (currentState.metadata.hasIndex(index.name)) {
val indexMetaDataBuilder = IndexMetadata.builder(currentState.metadata.index(index))
indexMetaDataBuilder.removeCustom(ManagedIndexMetaData.MANAGED_INDEX_METADATA_TYPE)
metaDataBuilder.put(indexMetaDataBuilder)
} else {
log.debug("No IndexMetadata found for [${index.name}] when removing ManagedIndexMetaData")
}
}
}
log.trace("End of building new cluster state")
return ClusterState.builder(currentState).metadata(metaDataBuilder).build()
}